Считывание поля и присвоение его содержимого близлежайшему блоку (желательно VBA)
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Считывание поля и присвоение его содержимого близлежайшему блоку (желательно VBA)

Считывание поля и присвоение его содержимого близлежайшему блоку (желательно VBA)

Ответ
Поиск в этой теме
Непрочитано 06.10.2021, 23:29 #1
Считывание поля и присвоение его содержимого близлежайшему блоку (желательно VBA)
TiDi
 
Регистрация: 06.10.2021
Сообщений: 14

Всем привет, я созрел для создания своей темы. задача достаточно узкая в применении, однако я надеюсь здесь будет полезная инфа для тех, кто решает какую-то свою проблему автоматизации.

Задача: считать поле текста над блоком и записать это в атрибуты этого блока.

Как я понял, средствами VBA одного здесь не обойдешься, придется лезть в lisp :'(

dwg прилагаю

Буду рад полезным комментариям и помощи

Вложения
Тип файла: dwg
DWG 2018
pamagiti.dwg (188.6 Кб, 15 просмотров)

Просмотров: 5136
 
Непрочитано 06.10.2021, 23:54
1 | #2
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


не занимайся извращениями - изучай FDO

Цитата:
придется лезть в lisp
не стоит
trir вне форума  
 
Непрочитано 07.10.2021, 07:26
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Может, проще будет потребовать у пользователя указать поле и отдельно - блок?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.10.2021, 09:09
#4
TiDi


 
Регистрация: 06.10.2021
Сообщений: 14


trir, уже начал на VBA колдовать, на FDO сложно и энергозатратно, если бы на работе заплатили за эту автоматизацию, я бы с большей охотой окунулся в новую тему)
TiDi вне форума  
 
Автор темы   Непрочитано 07.10.2021, 09:10
#5
TiDi


 
Регистрация: 06.10.2021
Сообщений: 14


Кулик Алексей aka kpblc, нельзя, деревьев может быть >10000
TiDi вне форума  
 
Непрочитано 07.10.2021, 09:20
1 | #6
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
деревьев может быть >10000
тебе явно дерево понадобится
trir вне форума  
 
Непрочитано 07.10.2021, 09:54
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от TiDi Посмотреть сообщение
нельзя, деревьев может быть >10000
откуда это все появляется?

ну и даже 10000, если пользователь выделил два последовательно объекта - мультитекст и блок, либо секущей рамкой - экономится время на вызов копирования значения мультитекста (с панели свойств или заходя в сам текст), вызов диалога модификации атрибутов блока (ввод значения с подтверждением) - заметно быстрее будет. И это можете на VBA написать, если он знаком уже.
Сергей812 вне форума  
 
Автор темы   Непрочитано 07.10.2021, 10:32
#8
TiDi


 
Регистрация: 06.10.2021
Сообщений: 14


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
откуда это все появляется?

ну и даже 10000, если пользователь выделил два последовательно объекта - мультитекст и блок, либо секущей рамкой - экономится время на вызов копирования значения мультитекста (с панели свойств или заходя в сам текст), вызов диалога модификации атрибутов блока (ввод значения с подтверждением) - заметно быстрее будет. И это можете на VBA написать, если он знаком уже.
В файле .xls, откуда вставляется блок, записаны координаты вставки, атрибуты по каждому дереву. Файл получаем от геодезистов.

Как мне представляется последовательность блоков программы:

1. Для каждого блока (дерева) выделить поле МТекст, расположенное в координатах (x+Nx;y+Ny;z), где x,y,z - координаты самого блока, а N - поправка на положение поля МТекст. ВАЖНО: текстовое поле вставляется программно и всегда находится на одном и том же месте, относительно блока

2. Присвоить переменной "a" значение текстового поля

3. Обратиться к атрибуту NUMBER (номер дерева) и присвоить ему значение "a"

4. Next

Все пункты, кроме 1, не вызывают затруднений. есть ли способы написать его на VBA?
TiDi вне форума  
 
Непрочитано 07.10.2021, 10:39
#9
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
В файле .xls
facepalm

тут даже AutoCAD не нужен - это можно решить одним SQL-запросом в БД!

Цитата:
уже начал на VBA колдовать, на FDO сложно и энергозатратно
а реализовать RTree на VBA тебе видимо будет легко и просто...

Цитата:
Все пункты, кроме 1, не вызывают затруднений. есть ли способы написать его на VBA?
можно

Цитата:
текстовое поле вставляется программно
что за программа?

Последний раз редактировалось trir, 07.10.2021 в 10:47.
trir вне форума  
 
Непрочитано 07.10.2021, 10:58
#10
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от TiDi Посмотреть сообщение
В файле .xls, откуда вставляется блок, записаны координаты вставки, атрибуты по каждому дереву. Файл получаем от геодезистов.
а мультитекст откуда вставляется? И как вставляется блок из xls? Форумчане должны каким то волшебным образом представить этот файл экселя от геодезистов?)
Сергей812 вне форума  
 
Непрочитано 07.10.2021, 11:42
#11
Автон

СЦБ
 
Регистрация: 09.03.2006
Сообщений: 89


Цитата:
Сообщение от TiDi Посмотреть сообщение
Всем привет
Посмотрите личку
Автон вне форума  
 
Автор темы   Непрочитано 07.10.2021, 13:11
#12
TiDi


 
Регистрация: 06.10.2021
Сообщений: 14


trir, программа на лиспе, которая строит полилинию, соединяя последовательно все деревья, а затем нумерует ее вершины.

Сергей812, образец прикрепил. Вставляются через VBA, код дома. В личку вышлю, если интересно, но это не нужно для решения обозначенной задачи.
Вложения
Тип файла: xlsx -Points-общий.xlsx (711.8 Кб, 9 просмотров)
TiDi вне форума  
 
Непрочитано 07.10.2021, 13:35
#13
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
программа на лиспе, которая строит полилинию, соединяя последовательно все деревья, а затем нумерует ее вершины.
проще переписать её на VBA - что бы она отработала сразу в Excel'е
а лучше на SQL - что бы она отработала в БД
trir вне форума  
 
Непрочитано 07.10.2021, 13:55
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от TiDi Посмотреть сообщение
В личку вышлю, если интересно, но это не нужно для решения обозначенной задачи.
да меня интересует взаимосвязь между мультитекстом и блоком. Блок вставляется кодом по данным из таблицы экселя, а зеленый мтекст как на чертеже появляется? И почему его полем зовете, кстати..
Сергей812 вне форума  
 
Автор темы   Непрочитано 07.10.2021, 14:56
#15
TiDi


 
Регистрация: 06.10.2021
Сообщений: 14


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
да меня интересует взаимосвязь между мультитекстом и блоком. Блок вставляется кодом по данным из таблицы экселя, а зеленый мтекст как на чертеже появляется? И почему его полем зовете, кстати..
А вот именно вышеуказанной программкой, которая нумерует вершины полилинии.

----- добавлено через ~3 мин. -----
trir, думаю вы правы, это более простой способ.
______

"Умный в гору не пойдет, умный гору обойдет"
TiDi вне форума  
 
Непрочитано 07.10.2021, 16:13
1 | #16
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


ладно, собирать головоломку никакого желания нет, в частном случае по вашему примеру примерно так:
1. Собрать информацию в коллекцию по текстам: само содержимое мультитекста, средняя точка boundbox и флаг использования.
2. В цикле по блокам: вычислить среднюю точку boundbox, и в подцикле по коллекции текстов найти наименьшее расстояние при дополнительных условия Yтекста>Yблока (чтобы брал только текст сверху) и флаг использования = false. Далее значение текста занести в блок, пометить информацию о тексте как обработанную и выйти из внутреннего подцикла по коллекции info texts.

Можно для ускорения вместо коллекции и массив использовать - если есть возможность фильтром выцепить все мультитексты разом и тогда размерность массива будет определена сразу.
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Считывание поля и присвоение его содержимого близлежайшему блоку (желательно VBA)

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Создание поля (field), ссылающегося на текстовое значение ячейки таблицы. skkkk Готовые программы 144 25.07.2024 10:48
Lisp. Присвоение блоку атрибута и Z из текста. Ancient John LISP 31 20.02.2023 17:20
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Вставка в поле части содержимого другого поля n0str0m0 AutoCAD 9 03.12.2010 13:46
привязка содержимого поля к листу Aseev AutoCAD 1 24.08.2010 14:10