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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Имена динамических блоков

Имена динамических блоков

Ответ
Поиск в этой теме
Непрочитано 21.03.2011, 10:23
Имена динамических блоков
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Друзья, есть динамический блок. Имя его Truba. Когда вставляю кучу блоков, имена их становятся не труба, а *U232 и тому подобные. Каким образом вытащить программно его истинное имя?
Просмотров: 10336
 
Непрочитано 24.03.2011, 10:20
1 | #21
Лиспер


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


Сейчас проверить быстродействие не могу, но тем не менее (как вариант)
Код:
[Выделить все]
 (defun _dwgru-get-block-name (ent)
  (if (vlax-property-available-p
        (setq ent (vlax-ename->vla-object ent))
        'effectivename
        ) ;_ end of vlax-property-available-p
    (vla-get-effectivename ent)
    (vla-get-name ent)
    ) ;_ end of if
  ) ;_ end of defun
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 24.03.2011, 11:12
1 | #22
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Do$, Блоки с именем *U# не обязательно динамические. Это могут быть и обычные, т.е vla-get-EffectiveName вернет ошибку
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 24.03.2011, 12:06
1 | #23
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Свойство EffectiveName есть у любого блока, а не только динамического,
поэтому достаточно такого будет:
Код:
[Выделить все]
 (defun blk-get-name-vla (ent)
  ;;(blk-get-name-vla (car (entsel)))
  (vla-get-EffectiveName (vlax-ename->vla-object ent))
) ;_ end of defun
И кратко и работет быстро
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)

Последний раз редактировалось Do$, 24.03.2011 в 13:06. Причина: Столько фигни понаписал, а самое главное - сделал...
Do$ вне форума  
 
Непрочитано 24.03.2011, 13:37
1 | #24
Лиспер


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Свойство EffectiveName есть у любого блока, а не только динамического,
Осталось запустить код на AutoCAD 2005 И получить сурьезный облом
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 07.04.2011, 13:52
#25
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Цитата:
Сообщение от Do$ Посмотреть сообщение
Как показала практика, наличие 360 группы в entget-листе вставки блока не является достаточным условием для того, что в тех недрах, куда мы этим лиспом залазим, окажется имя блока... Так что, Владимир, Ваша функция из #17 для динамического блока, который еще не подвергался изменениям, имя не находит и выдет ошибку
Обновлен код в #17

Цитата:
Сообщение от Do$ Посмотреть сообщение
В общем, по моим наблюдениям, самым "быстрым" оказался такой код:
Новые наблюдения
Код:
[Выделить все]
 
(BenchMark
             '(
                  (get-block-name (entlast)) ;_ post #17
                  (blk-get-name-mix (entlast)) ;_post #20
                  (blk-get-name-vla (entlast)) ;_post #23
              )
 )
Цитата:
Benchmarking ..................Elapsed milliseconds / relative speed for 32768 iteration(s):

(GET-BLOCK-NAME (ENTLAST)).......1297 / 1.90 <fastest>
(BLK-GET-NAME-MIX (ENTLAST)).....1297 / 1.90
(BLK-GET-NAME-VLA (ENTLAST)).....2469 / 1.00 <slowest>
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.04.2011, 21:16
#26
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Только диву даюсь: каким образом можно было докопаться до такого решения?
Я, кстати, когда тестировал, проверял на трех разных блоках:
- обычный "статический"
- динамический, только что вставленный
- динамический, у которого значения параметров менялись после вставки
Результаты были сильно разные...
Do$ вне форума  
 
Непрочитано 11.04.2011, 15:02
#27
Walkmax


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


А есть ли возможность в код представленный тут http://www.jefferypsanders.com/autolisp_AttInc.html добавить возможность работы с дин.блоками?
Walkmax вне форума  
 
Непрочитано 11.04.2011, 15:08
#28
Лиспер


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


А чем штатные варианты не устраивают?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 11.04.2011, 15:14
#29
Walkmax


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


Если-бы был достойный груз знаний по данной теме может и устроили-бы, но увы ...
Данный код очень помогает, но вот есть один нюанс ...
Walkmax вне форума  
 
Непрочитано 11.04.2011, 16:06
#30
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
А есть ли возможность в код представленный тут http://www.jefferypsanders.com/autolisp_AttInc.html добавить возможность работы с дин.блоками?
Мне кажется, что с такими вопросами лучше в отдельную тему. Но раз уж тут начали обсуждать...
Цитата:
Сообщение от Лиспер Посмотреть сообщение
А чем штатные варианты не устраивают?
А что, есть такое?
Do$ вне форума  
 
Непрочитано 11.04.2011, 16:46
#31
Лиспер


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


Насколько я понял (код не анализировал), это фактически замена стандартной команды _attedit. Или нет? Если нет, дома погляжу еще разок...
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 11.04.2011, 17:04
#32
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Вроде бы, это автоматический нумератор атрибутов (наподобие экспрессовского TCOUNT, только для атрибутов блока).
Do$ вне форума  
 
Непрочитано 11.04.2011, 17:16
#33
Walkmax


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


Функционал следующий:
В чертёж ставм блок с атрибутами
Вызов команды
На запрос указать блок для дальнейших операций указываем нужный блок
В появившемся окне доступны операции выбора атрибутов, определения начального значения нумерации, направление нумерации
Далее если блок не *U, каждый следующий клик мышкой в чертеже ставит ранее указанный блок, с нумерацией в теге указанного атрибута, с ранее указанного стартового значения, в ранее указанном направлении.

Но вот весь вопрос в том, что данный код не работает с *U-именоваными блоками
Walkmax вне форума  
 
Непрочитано 14.04.2011, 10:57
#34
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Walkmax Посмотреть сообщение
А есть ли возможность в код представленный тут http://www.jefferypsanders.com/autolisp_AttInc.html добавить возможность работы с дин.блоками?
Попробуй так
Вложения
Тип файла: zip ATTINC.zip (3.2 Кб, 59 просмотров)
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 14.04.2011, 12:10
#35
Walkmax


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


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Попробуй так
Получается так
Команда: ATTINC

Select Block:
Gathering all blocks named *U16 .....
Walkmax вне форума  
 
Непрочитано 14.04.2011, 12:44
#36
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Walkmax Посмотреть сообщение
Получается так
Команда: ATTINC

Select Block:
Gathering all blocks named *U16 .....


Walkmax, выложи чертеж на котором так получается (в версии не выше 2008 ACAD'а). Да, и кстати какой у Тебя ACAD.
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 14.04.2011, 13:56
#37
Walkmax


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


Вот чертёж и блок в нём
Чертеж1.dwg
Walkmax вне форума  
 
Непрочитано 14.04.2011, 14:11
#38
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Walkmax, судя по всему Ты не обновил свои файлы на те, которые я выложил в посте #34. На всякий случай выкладываю только lisp-файл. На Твоем чертеже у меня все отработало
Вложения
Тип файла: lsp ATTINC_NEW.lsp (10.7 Кб, 60 просмотров)
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 14.04.2011, 14:15
#39
Walkmax


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



Всё работает, после пинка
Спасибо
Walkmax вне форума  
 
Непрочитано 31.05.2011, 19:14
#40
Sanchev


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Свойство EffectiveName есть у любого блока, а не только динамического,
поэтому достаточно такого будет:
Код:
[Выделить все]
 (defun blk-get-name-vla (ent)
  ;;(blk-get-name-vla (car (entsel)))
  (vla-get-EffectiveName (vlax-ename->vla-object ent))
) ;_ end of defun
И кратко и работет быстро
подскажите тупому начинающему, что является параметром функции blk-get-name-vla?
Sanchev вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Имена динамических блоков

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сквозная нумерация динамических блоков zenon Программирование 214 28.08.2020 08:45
подсчет динамических блоков AAI Программирование 37 25.06.2012 15:05
Тормозит команда расчленения набора блоков batmax Программирование 4 31.08.2010 17:37
Подсчет и сортировка блоков на текущем слое. Помогите отредактировать. Kortes Программирование 17 26.03.2010 18:46
Проблема вставки Динамических блоков Владимир М Программирование 11 12.09.2007 15:42