Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: Peacemaker_kiss от 13-11-2014, 18:54:29

Название: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 13-11-2014, 18:54:29
Command: (setq aaaaa (vlax-ename->vla-object (car(entsel))))

Select object: #<VLA-OBJECT IAcadRegion 00000000b0ec3438>

Command: (vlax-get-property aaaaa 'Area)
95723.8

Command: (setq aaaaa (vlax-safearray->list (vlax-variant-value _regvar)))
(#<VLA-OBJECT IAcadRegion 00000000b0ec3438>)

Command: (vlax-get-property aaaaa 'Area)
; error: bad argument type: VLA-OBJECT (#<VLA-OBJECT IAcadRegion 00000000b0ec3438>)

Без комментариев, лишь открытый рот!!! Есть мнения?
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Александр Ривилис от 13-11-2014, 19:50:57
Есть мнения?
Есть. Кто сказал что у списка есть свойство Area?
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 10:42:41
Кто сказал что у списка есть свойство Area?
Вот я валенок!
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 14:00:16
Только я что-то зашел в некий тупик, а как перейти от списка к объектам, чтобы наконец применить свойства объектов
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Александр Ривилис от 14-11-2014, 14:36:44
Только я что-то зашел в некий тупик, а как перейти от списка к объектам, чтобы наконец применить свойства объектов
Код - Auto/Visual Lisp [Выбрать]
  1. (setq aaaaa (vlax-safearray->list (vlax-variant-value _regvar)))
  2. (foreach reg aaaaa
  3.   (print (vlax-get-property reg 'Area))
  4. )
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 15:23:23
Изящно, спасибо
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 15:45:47
Также, хочу спросить:
Преамбула:
а. в массиве, из которого получен список, лежат отрезки и полилинии (он получен при взрыве блока)
б. я не хочу применять команду _region из-за ее ограничений
в. я хочу применить команду _pedit, причем лишить пользователя возможности выбор объектов, а пусть макрос из полученного списка сделает мне объединение, в единую полилинию
г. но _pedit не работает со списками, ей необходимы наборы.
Вопрос:
Как мне, имея массив, список получить набор для передачи в _pedit
P.S. Памятуя о том, что я начинающий, делайте скидки на, пока зачастую, глупые вопросы
Спасибо за помощь
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Александр Ривилис от 14-11-2014, 15:53:31
Как мне, имея массив, список получить набор для передачи в _pedit
1) Не массив, а список. В AutoLisp/VisualLisp нет массивов.
2) Для работы с наборами есть функции (ssadd) (ssdel) (ssget) и т.д.:
http://help.autodesk.com/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-43715289-5715-4F96-8D48-3169FA26777A.htm
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 16:00:52
Сидел-тупил, спросил-получил
Код - Auto/Visual Lisp [Выбрать]
  1. (setq bum (vla-explode _block))
  2. (setq bum_set (vlax-safearray->list (vlax-variant-value bum)))
  3. (ssget "_X" bumset)
  4.  
<Selection set: 1f43d>
Спасибо, нужно быть внимательнее мне
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Александр Ривилис от 14-11-2014, 16:03:49
Не забудь, что на форуме действует принцип "Отдельный вопрос - отдельная тема". Последний вопрос к этой теме не относился, так что нужно было создать новую тему.
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 16:04:16
Последний раз!
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Александр Ривилис от 14-11-2014, 16:07:09
Сидел-тупил, спросил-получил
Код - Auto/Visual Lisp: [Выделить]

    (setq bum (vla-explode _block))
    (setq bum_set (vlax-safearray->list (vlax-variant-value bum)))
    (ssget "_X" bumset)
     

<Selection set: 1f43d>
Спасибо, нужно быть внимательнее мне
Ничего не понял, но если это работает, то тебе страшно повезло.
Во-первых, в одном месте у тебя bum_set, а в другом bumset.
Во-вторых, (ssget "_X" ...) так  со списками не работает.
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 16:08:04
Да,я уже обратил внимание, работает конечно не так как нужно! Буду копать дальше
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 16:14:49
Не получается накапать ничего, я могу конечно (ssget) применить с учетом некоторых фильтров, но это компромисс, хотелось бы создать набор из конкретно полученного списка
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Александр Ривилис от 14-11-2014, 16:17:43
Код - Auto/Visual Lisp [Выбрать]
  1. (setq ss (ssadd))
  2. (foreach x bum_set ;; В bum_set список vla-object
  3.   (ssadd (vlax-vla-object->ename x) ss)
  4. )
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Александр Ривилис от 14-11-2014, 16:18:58
Не получается накаопать ничего
Лопата неправильная? ;)

Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 16:21:20
Лопата неправильная?
Да она неопытная еще, вот в Бауман в конце года пойду, тогда...
Здорово, а я так пробовал, но не получалось и теперь я увидел почему я vla-объект в обычный примитив не превращал.
Век живи - век учись
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 16:33:22
Позвольте последний вопрос
Почему
(command "_.pedit" bum_set "_j" "10000" "")
nil
?
bum_set сформирован нормально
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Александр Ривилис от 14-11-2014, 16:37:17
Вообще-то (command ...) всегда возвращает nil - читай документацию: http://help.autodesk.com/view/ACD/2015/ENU/?guid=GUID-1C989B35-2C5A-47EC-A0C9-71998EDFB157
Или ты не об этом? Тогда включи CMDECHO (установи в 1) и смотри что у тебя печатается в командной строке.
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 16:41:14
Command: (command "_.pedit" "_M" "_j" bum_set "0.0001" "")
_.pedit
Select polyline or [Multiple]: _M
Select objects: _j

*Invalid selection*
Expects a point or Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/Add/Remove/Multiple/Previous/Undo/AUto/SIngle
; error: Function cancelled

Почему "Invalid selection"
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Александр Ривилис от 14-11-2014, 16:45:57
Потому что у тебя сначала спрашивается набор, а потом опция _J
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Peacemaker_kiss от 14-11-2014, 17:15:16
Command: (command "_.pedit" "_M" bum_set "J" "1000" )
_.pedit
Select polyline or [Multiple]: _M
Select objects:   9 found

Select objects: J

*Invalid selection*
Expects a point or Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/Add/Remove/Multiple/Previous/Undo/AUto/SIngle
; error: Function cancelled
Противная!!!!
Название: Re: Почему не считывает свойство объекта Region
Отправлено: Александр Ривилис от 14-11-2014, 17:17:02
Код - Auto/Visual Lisp [Выбрать]
  1.  (command "_.pedit" "_M" bum_set "" "_J" "1000" )