| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум 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 просмотров)

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


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


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

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

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


Может, проще будет потребовать у пользователя указать поле и отдельно - блок?
__________________
Моя библиотека 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,056


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


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


Цитата:
Сообщение от 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,056


Цитата:
В файле .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,040


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

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


Цитата:
Сообщение от 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,056


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


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


Цитата:
Сообщение от 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,040


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

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

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Создание поля (field), ссылающегося на текстовое значение ячейки таблицы. skkkk Готовые программы 141 24.11.2023 15:49
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