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

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

LISP Изменение Thickness замкнутой полилинии в блоке

Ответ
Поиск в этой теме
Непрочитано 09.02.2015, 13:57 #1
LISP Изменение Thickness замкнутой полилинии в блоке
sdv79
 
Инженер ЭОМ
 
Москва
Регистрация: 05.03.2009
Сообщений: 215

Доступ к содержимому нашел на форуме
Код:
[Выделить все]
 
(vl-load-com)


(setq ent (vlax-ename->vla-object (car (entsel "\nSelect block : "))))


(setq block_def (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
                          (vla-get-effectivename ent)
                          ) ;_ end of vla-item
      ) ;_ end of setq


(setq block_cont ((lambda (/ res)
                    (vlax-for sub block_def
                      (setq res (cons sub res))
                      ) ;_ end of vlax-for
                    (reverse res)
                    ) ;_ end of lambda
                  )
      ) ;_ end of setq


(setq result_ent (vl-remove-if-not
                   (function
                     (lambda (x)
                       (= (vla-get-objectname x) "AcDbPolyline") ; "AcDbBlockReference"
                       ) ;_ end of lambda
                     ) ;_ end of function
                   block_cont
                   ) ;_ end of vl-remove-if-not
      ) ;_ end of setq
Как изменить параметр Thickness, скажем у первого 10 у второго 15 у третьего 20. Имя блока можно менять.

Вложения
Тип файла: dwg
DWG 2007
Блок.dwg (194.0 Кб, 1516 просмотров)


Последний раз редактировалось sdv79, 09.02.2015 в 14:35.
Просмотров: 2894
 
Непрочитано 09.02.2015, 14:13
#2
Кулик Алексей aka kpblc
Moderator

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


sdv79, данного описания или данного вхождения блока? Разница принципиальная.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.02.2015, 14:23
#3
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Простите, разницу не понимаю. Задача такова
Ставлю блок в нужную точку-трансформирую его
- изменяю "длину"....
Код:
[Выделить все]
 
   (cond ; äëÿ âñòàâêè áëîêà ïðîâåðÿåì åñòü ëè îí òàáëèöå áëîêîâ
    (
     (or 
       (null(tblsearch "block" "ОП прямоугольник"))
       (null(tblsearch "block" "ОП круг"))
     ) ;/ or
      (vl-cmdf "_.INSERT" (findfile "Светильники.dwg")) ; äàåò äîñòóï êî âñåì áëîêàì â äàííîì ôàéëå
      (vl-cmdf)
    )) ;/ cond

.................................................
  (setq VLA-OBJECT (vlax-ename->vla-object
		     (entlast)
		    ) ;/ vlax-ename->vla-object
   ) ;/ setq


    (vlax-put-property
      (nth 2 
       (safearray-value
	(vlax-variant-value
         (vla-GetDynamicBlockProperties
          VLA-OBJECT
         ) ;/ vla-GetDynamicBlockProperties
        ) ;/ vlax-variant-value
       ) ;/ safearray-value
      ) ;/ nth
      (function value)
      (/ 
        (atof dlina)
        100
      ) ;/ /
    ) ;/ vlax-put-property
далее хочу только для данного блока выставить высоту светильника, а потом его буду поднимать
Код:
[Выделить все]
 
     (setq InsertionPoint (safearray-value
			   (vlax-variant-value ; òî÷êà âñòàâêè
   			    (vla-get-InsertionPoint VLA-OBJECT) ; BlockRef object-Properties-InsertionPoint
  		           ) ;/ vlax-variant-value
			  ) ;/ safearray-value
     ) ;/ setq

     (vlax-put-property	VLA-OBJECT
  			"InsertionPoint"
  			(vlax-3D-point (list ; ò.ê ïðè (vla-get-.. ïîëó÷àåì #<variant 8197 ...> , òî è ôîðìèðîâàòü äîëæíû #<variant 8197 ...> 
			  		     (car  InsertionPoint) ; ïîëîæåíèå Õ
			  		     (cadr InsertionPoint) ; ïîëîæåíèå Y
			                     (- 		; ïîëîæåíèå Z
			                       (* height 10) 	; âûñîòà ïîìåùåíèÿ
			    		       h_lamp		; âûñîòà ñâåòèëüíèêà
			  		     ) ;/ -
			               ) ;/ list
		        ) ;/ vlax-3D-point
     ) ;/ vlax-put-property

В модели могут быть разной высоты светильники.
sdv79 вне форума  
 
Непрочитано 09.02.2015, 14:40
#4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


динамический блок?
Boxa вне форума  
 
Автор темы   Непрочитано 09.02.2015, 14:42
#5
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


да. Возможно. логичнее было бы создать динамический блок не из полилинии, а сразу из 3D-тела, но я не знаю как мне с данным "телом" работать (изменить только для данного динамического блока его длину, ширину, высоту. в остальных не изменять)

Последний раз редактировалось sdv79, 09.02.2015 в 15:06.
sdv79 вне форума  
 
Непрочитано 09.02.2015, 15:09
#6
Кулик Алексей aka kpblc
Moderator

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


Что-то я не очень понимаю. То ли блоку надо установить определенную точку вставки с Z<>0, то ли Z оставить на 0, но поменять общую высоту вхождения блока...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.02.2015, 15:15
#7
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Непроходимо
Код:
[Выделить все]
 
(setq wer (car result_ent))
 (entget (vlax-vla-object->ename wer))
в dfx коде (39 . 1.23) изменить скажем 1.23 на 10, и ТОЛЬКО для ОДНОГО выбранного блока.
sdv79 вне форума  
 
Непрочитано 09.02.2015, 15:45
#8
Кулик Алексей aka kpblc
Moderator

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


sdv79, в таком режиме ты поменяешь описание блока. Автоматом поменяются и все его вхождения (учи матчасть ) Так что выбор у тебя не очень богат: либо делать дин.блок, либо попробовать поиграться с группами, либо забить на эту задачку и попробовать найти обходные пути.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.02.2015, 15:53
#9
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


сначала изменить имя блока-на уникальное (это тоже вопрос, как сделать, можно чопорно дата+время, если есть варианты-предложите, не знаю, возможно подойдут анонимные) (CopyBlock-VVA http://forum.dwg.ru/showpost.php?p=577878&postcount=8), потом изменить dfx, вопрос, как изменить dfx?

Последний раз редактировалось sdv79, 09.02.2015 в 16:05.
sdv79 вне форума  
 
Непрочитано 09.02.2015, 16:08
#10
Кулик Алексей aka kpblc
Moderator

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


http://autolisp.ru/wp-content/upload...-autoregen.lsp
+ http://autolisp.ru/wp-content/upload...t-to-ename.lsp

----- добавлено через 33 сек. -----
А вообще, кто мешает установить свойство Thickness для указанного примитива?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.02.2015, 16:46
#11
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


1)Как установить свойство Thickness для указанного примитива?
2) Почему работает только (arxload "battman") (acet-attsync "ОП прямоугольник")
Код:
[Выделить все]
 
(setq wer (car result_ent))
(setq wer (entget (vlax-vla-object->ename wer)))
 (setq e (subst
              (cons 39 3.35)
              (assoc 39 wer)
  wer)
       )
 (entmod e)

(entupd (cdar e))
(redraw (cdar e))

 (arxload "battman")
(acet-attsync "ОП прямоугольник")

sdv79 вне форума  
 
Непрочитано 09.02.2015, 17:12
#12
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Как установить свойство Thickness для указанного примитива?
vlax-put-property
vla-put-thickness
Цитата:
Сообщение от sdv79 Посмотреть сообщение
Почему работает только (arxload "battman") (acet-attsync "ОП прямоугольник")
C чего это "только"? Не только.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.02.2015, 17:26
#13
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


У меня (entupd (cdar e)), (redraw (cdar e)) не работают, возможно как то иначе следует применять? А вот (arxload "battman")(acet-attsync "ОП прямоугольник"), работает отлично. Почему? Win 7 x64+ACAD 2015 x64+SP2
sdv79 вне форума  
 
Непрочитано 09.02.2015, 17:30
#14
Кулик Алексей aka kpblc
Moderator

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


sdv79, для начала пойми разницу между описанием (definition) и вхождением (reference) блока. Потом разберись, где ты выполняешь изменения.
P.S. Эта информация уже столько раз мелькала на форуме...

----- добавлено через ~4 мин. -----
Во, может быть, поможет: http://autolisp.ru/2011/05/23/blockref-update/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.02.2015, 17:39
#15
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Спасибо.
sdv79 вне форума  
 
Непрочитано 09.02.2015, 18:03
#16
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


как обходной вариант:
убрать полилинию из блока и отрисовывать ее программно с любыми подходящими параметрами при вставке блока.
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Непрочитано 09.02.2015, 20:53
#17
Кулик Алексей aka kpblc
Moderator

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


И добавить массу объектных реакторов - на изменение блока, на его копирование, удаление... Оно надо?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2015, 22:40
#18
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


Цитата:
И добавить массу объектных реакторов - на изменение блока, на его копирование, удаление... Оно надо?
или все в нескольких лиспах сделать.
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Непрочитано 09.02.2015, 23:00
#19
Кулик Алексей aka kpblc
Moderator

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


Что в лоб, что по лбу: http://adn-cis.org/forum/index.php?t...sg6716#msg6716
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 09.02.2015, 23:35
#20
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


я так думаю, что вариант с лиспами или же реакторами луше, бесконечного количества похожих блоков с разными именами. впринципе можно вообще убежать от блока. сообразить окно для заполнения необходимых данных-характеристик и нумерацию в расширенные данные каждого элемента (светильник 1, 2, 3 и т.д.), и потом по этим же номерам сделать (если необходимо) спецификацию.
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP Изменение Thickness замкнутой полилинии в блоке

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение порядка нумерации узлов в полилинии remlin Программирование 2 18.11.2014 08:48
lisp: Длина по полилинии до точки vosh LISP 19 15.07.2013 15:10
LISP. Как найти точку пересечения полилинии и сплайна или другой полилинии? LastGraff LISP 11 09.09.2011 13:23
Как получить vla-объект, который находится в блоке или как с помощью Lisp поменять видимость в дин. блоке? Shraybicus LISP 12 28.12.2010 15:45
Выделение и удаление обьектов внутри замкнутой полилинии. Как? DTwice AutoCAD 5 18.05.2009 14:31