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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp.Выделение с помощью ActiveX

Lisp.Выделение с помощью ActiveX

Ответ
Поиск в этой теме
Непрочитано 02.03.2012, 16:56 #1
Lisp.Выделение с помощью ActiveX
Composter
 
Отопление и вентиляция
 
Москва
Регистрация: 31.10.2008
Сообщений: 445

добрый день,форумчане.решил освоить выделение с помощью ActiveX.на счет аналога ssget нашел у полещука plbj-filter-select-all .
1)подскажете аналог entsel , nentsel .
2)есть ли аналог (ssget "_F" (list (getpoint) (getpoint))).
3)как отобразить выделение набора по аналогии (sssetfirst nil ss1).
4)и еще вопрос через plbj-filter-select-all добавляются в набор блоки ,а вот их атрибуты нет, я делал это через (entnext) как это делать с помощью ActiveX ?
Просмотров: 3077
 
Непрочитано 02.03.2012, 18:45
#2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Посмотри здесь для начала
http://www.afralisp.net/visual-lisp/...ction-sets.php

и скачай

http://www.midpointcad.com/au/docs/l...pers_Bible.pdf

~'o'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 07.03.2012, 00:13
#3
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


ну вы явно не прочитали моих вопросов.я же говорю что с выделением по полещуку разобрался ,а пользоваться командой vlax-ename->vla-objecе я умею и так.
Composter вне форума  
 
Непрочитано 07.03.2012, 01:14
1 | #4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от Composter Посмотреть сообщение
ну вы явно не прочитали моих вопросов.я же говорю что с выделением по полещуку разобрался ,а пользоваться командой vlax-ename->vla-objecе я умею и так.
1)подскажете аналог entsel , nentsel .
-----------------------------------------------------------
(vla-getentity, vla-getsubentity
2)есть ли аналог (ssget "_F" (list (getpoint) (getpoint))).
-----------------------------------------------------------
Есть только это жуть такого сорта
Код:
[Выделить все]
 (setq adoc (vla-get-activedocument
              (vlax-get-acad-object))
       acsp (vla-get-block (vla-get-activelayout adoc))
       util (vla-get-utility adoc)
       )

  (setq pfset (vla-get-pickfirstselectionset adoc))
  (vla-clear pfset)
(setq p1 (vla-getpoint util nil "\n1: "))
(setq p2 (vla-getpoint util p1 "\n2: "))

  (setq  ftype '(0)
	 fdata '("*text")
	 )
(setq dxfcodes (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) ftype))
(setq dxfvalues (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) fdata))
(setq points(vlax-safearray-fill (vlax-make-safearray vlax-vbdouble '(0 . 5))
		(apply 'append (mapcar 'vlax-safearray->list (mapcar 'vlax-variant-value (list p1 p2))))))
(vla-SelectByPolygon  pfset  acSelectionSetFence points dxfcodes dxfvalues)
(alert (strcat "Выбрал: " (itoa (vla-get-count pfset) " штук")
3)как отобразить выделение набора по аналогии (sssetfirst nil nil).
-------------------------------------------------------------------
никак, только подсветить (без грипсов) объекты методом:
Код:
[Выделить все]
 (vla-highlight pfset :vlax-true)
или конвертировать обратно (полный пипец):
Код:
[Выделить все]
(setq sset (ssget "P"))(sssetfirst nil sset)
4)и еще...........
Тут я не вкурю никак о чем это?

~'o'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 07.03.2012, 02:00
#5
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


спасибо, за конструктивный ответ.на счет 4 пункта поясню.нужно проверить значения атрибутов блоков.можно выделить блоки,и проверить есть ли в каждом блоке атрибуты.а можно вбить в цикл (setq ent (entnext)) и (setq ent (entnext ent)) таким образом перебрать примитивы на чертеже,вычленив из них атрибуты блока и проверить их на определённое значение.
Composter вне форума  
 
Непрочитано 07.03.2012, 08:45
#6
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от Composter Посмотреть сообщение
таким образом перебрать примитивы на чертеже,вычленив из них атрибуты блока и проверить их на определённое значение.
так будет не очень быстро, лучше использовать набоы выбора
будет пошустрее (это чисто пример навскидку без всяких проверок):
Код:
[Выделить все]
(defun C:demo(/ adoc atcoll dxfcodes dxfvalues fdata ftype pfset)
  (setq adoc (vla-get-activedocument
              (vlax-get-acad-object)))
(vla-startundomark adoc)
  (setq pfset (vla-get-pickfirstselectionset adoc))
  (vla-clear pfset)

  (setq  ftype '(0 2 66); коды для типа, имени блока, код на наличие атрибутов
	 fdata '("insert" "ABC" 1);имя блока "ABC"
	 )
(setq dxfcodes (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 2)) ftype))
(setq dxfvalues (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 2)) fdata))

(vla-select pfset  acSelectionSetall nil nil  dxfcodes dxfvalues)
(if (> (vla-get-count pfset) 0)
  (progn
    (alert (itoa (vla-get-count pfset)))
    (vlax-for block pfset
      (setq atcoll (vlax-invoke block 'getattributes))
      (foreach attref atcoll
	(if (eq "ИЗДЕЛИЕ" (vlax-get attref 'tagstring));ищем имя тэга "ИЗДЕЛИЕ"
	(if (eq "Старое значение атрибута" (vlax-get attref 'textstring));ищем значение атрибута "Старое значение атрибута"
		(vlax-put attref 'textstring "Новое значение атрибута")));меняем на "Новое значение атрибута"
	  )
	)
      )

(alert "Ничего не найдено")
)
  (vla-endundomark adoc)
  (princ)
    )

(or (vl-load-com)
    (princ))
~'o'~
Олег (jr.) вне форума  
 
Непрочитано 07.03.2012, 08:46
#7
Кулик Алексей aka kpblc
Moderator

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


Composter, получить атрибуты блока можно намного проще и быстрее. См. vla-getattributes и vla-getconstantattributes для BlockReference.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.03.2012, 15:03
#8
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


я в этой теме пишу какими то невидимыми буквами.kpblc спасибо но я написал что я так могу
Цитата:
Сообщение от Composter Посмотреть сообщение
можно выделить блоки,и проверить есть ли в каждом блоке атрибуты.
Composter вне форума  
 
Непрочитано 07.03.2012, 21:11
#9
Кулик Алексей aka kpblc
Moderator

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


По мне, так атрибуты лучше получать с привязкой к вхождению-владельцу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp.Выделение с помощью ActiveX

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с помощью Activex копировать примитив со смещением? Dmitriyele Программирование 4 05.10.2011 22:21
Как настроить плавное движение курсора при редактировании с помощью ручек? tasia AutoCAD 9 22.06.2011 15:35
создание набора с помощью activeX Composter Программирование 3 15.05.2009 00:11
ActiveX Automation из VBA karp_b Программирование 5 14.09.2007 18:05