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

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

выборка всех примитивов с расширенными данными

Ответ
Поиск в этой теме
Непрочитано 01.11.2012, 11:07 #1
выборка всех примитивов с расширенными данными
BoTTePa3
 
Регистрация: 02.02.2012
Сообщений: 22

Доброго времени суток.
Вопрос состоит в следующем: на листе имеется множество полилиний с расширенными данными например (-3 . "2434"). (конкретнее это номер пикетажа, не суть). получается что почти к каждой полилинии присвоены различные расширенные данные. Какой фильтр надо применить что бы в набор через ssget залезали только полилинии с расширенными данными?... На форуме обсуждался уже этот вопрос, решение через метод отсева из набора всех объектов без расширенных данных не подходит... или может это проще провернуть через ActivX?
Просмотров: 4161
 
Непрочитано 01.11.2012, 11:14
#2
Кулик Алексей aka kpblc
Moderator

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


ИМХО не получится - посмотри методику записи и чтения РД.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.11.2012, 19:12
#3
BoTTePa3


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


Не получится отсеять или не получится создать такой набор?
BoTTePa3 вне форума  
 
Непрочитано 01.11.2012, 19:23
#4
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,176


Простите за ламерский вопрос - а фильтр в SSGET по коду -3 не работает?Offtop: Просто нет чертежа с расш. данными под рукой, чтобы проверить, не специально же создавать
kp+ вне форума  
 
Автор темы   Непрочитано 01.11.2012, 21:31
#5
BoTTePa3


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


я пробывал забивать определённые РД и по ним фильтровать, ssget наполняется... просто если у тебя подключено несколько БД или точечные пары РД разные, то фильтр не сработает...
BoTTePa3 вне форума  
 
Непрочитано 01.11.2012, 22:57
#6
Кулик Алексей aka kpblc
Moderator

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


ИМХО не получится набор такой создать через ssget.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.11.2012, 23:00
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Если Lisp функция, делающая фильтрацию по расширенным данным, будет написана на .NET - такой вариант пойдёт? Если "да" - выкладывай файл с примером для тестирования и версию AutoCAD укажи.

P.S. Это означает, что исходный код библиотеки с этой функцией нужно будет компилировать отдельно под каждую новую версию AutoCAD, т.е. под 2010, 2011, 2012 и т.д.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 02.11.2012, 20:18
#8
BoTTePa3


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


"hwd" Спасибо за предложение, но этот вариант не подходит, так как это только часть программы... И работать она должна на разных AutoCad

"Кулик Алексей aka kpblc" а если я присоединю одинаковые РД ко всем этим примитивам и привяжу № Пикетажа через ActivX, там ведь тоже есть подобие РД. Потом реально будет сделать набор из этих приметивов и уже отдельно из каждого вынимать № ПК привязанного через ActivX?.. Я Просто самоучка и подобный код истратит у меня не мало времени... Не то что бы я тороплюсь, просто интересно есть ли вообще смысл начинать...
BoTTePa3 вне форума  
 
Непрочитано 03.11.2012, 22:34
#9
Олег (jr.)

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


Цитата:
Сообщение от BoTTePa3 Посмотреть сообщение
Доброго времени суток.
Вопрос состоит в следующем: на листе имеется множество полилиний с расширенными данными например (-3 . "2434"). (конкретнее это номер пикетажа, не суть). получается что почти к каждой полилинии присвоены различные расширенные данные. Какой фильтр надо применить что бы в набор через ssget залезали только полилинии с расширенными данными?... На форуме обсуждался уже этот вопрос, решение через метод отсева из набора всех объектов без расширенных данных не подходит... или может это проще провернуть через ActivX?
Попробуй исходя из приведенных лиспов,
первый добавляет расширенные данные (измени по ситуации)
второй считывает эти данные и составляет таблицу

Код:
[Выделить все]
;; first lisp
;; xar.lsp
;; first select one by one all what you need with accuracy
;; and add xdata


(defun C:XAR (/	)

(setq osm (getvar "osmode")); store osmode
(setvar "osmode" 512)
(setvar "cmdecho" 0); turn echo off
(regapp "PIPEINFO"); first of register application in ACAD.
;; This would be stored in the table APPID
;; loop through selected plines:
(while
(setq pickpt (getpoint "\nPick point on pline (hit Enter to exit loop): ")); pick point on entity
(setq ps  (getreal "\nPipe size: ")
      ln   (getreal "\nLength: ")
      hws (getstring T "\nHWS: ")
      hwr  (getstring T "\nHWR: ")
      )

(setq en (ssname (ssget "C" pickpt pickpt (list (cons 0 "*POLYLINE")))0))

(setq elist (entget en))
;build extension data 
(setq
xdata (list
(list -3 (list "PIPEINFO"
	       (cons 1040 ps);real
	       (cons 1041 ln);distance
	       (cons 1000 hws);string	       
	       (cons 1000 hwr);string	       
	       ))
)
)
(setq xdlist (append elist xdata));append extension data to entity list
(entmod xdlist); setting data, modify entity list
(entupd en); update entity, optonal
); end loop
(setvar "osmode" osm); restore osmode
(setvar "cmdecho" 1); turn echo on
  (princ)
)
(prompt
  "\n\t\t\t   |-----------------------------|"
)
(prompt
  "\n\t\t\t  <|  Start with XAR to execute  |>"
)
(prompt
  "\n\t\t\t   |-----------------------------|"
)
(or (vl-load-com)
  (princ))
Код:
[Выделить все]
;; second lisp
;; art.lsp

;; here is follows part to draw the table

  (vl-load-com)

;; local defuns:

; read extension data:
(defun get_xdata (vobj apname)
(or (vl-load-com))
(if (and vobj apname)
(progn
(vla-getxdata vobj apname 'xtypeOut 'xdataOut) 
(setq xtp (vlax-safearray->list xtypeOut))
(setq dtp (mapcar (function (lambda (x)
		(vlax-variant-value x)))
		  (vlax-safearray->list xdataOut)))
dtp
)
)
)

;Then you can get all xdata:
(defun getallxdata (appname / acapp adoc axss table_data tmp)
  (or (vl-load-com))
  (or acapp (setq acapp (vlax-get-acad-object)))
  (or adoc (setq adoc (vla-get-activedocument acapp)))
  (if (ssget "X" (list (cons 0  "*POLYLINE")
		       (list -3 (list appname))))
    (progn
    (setq axss (vla-get-activeselectionset adoc))
    (vlax-for a axss
      (if
      (setq tmp (cdr (get_xdata a appname)))
      (setq table_data (cons tmp table_data))))))
    (reverse table_data)
  )

;; create table style

(defun make-tablestyle ( name desc txtstyle h1 h2 h3 / tblstyle adoc)
  (or (vl-load-com))
  (setq 
    tblstyle (vla-addobject 
      (vla-item (vla-get-dictionaries 
             (setq adoc (vla-get-activedocument (vlax-get-acad-object))) 
             ) 
           "Acad_Tablestyle" 
           ) 
      name 
      "AcDbTableStyle" 
      ) 
    )
  (setq acmCol (vla-getinterfaceobject
	       (vlax-get-acad-object)
	       (strcat "AutoCAD.AcCmColor."
		       (substr (getvar "ACADVER") 1 2))))  
  (vla-put-name tblstyle name)
  
  (vla-put-headersuppressed tblstyle :vlax-false) 
  (vla-put-titlesuppressed tblstyle :vlax-false)
  (vla-put-description tblstyle desc) 
  (vla-put-flowdirection tblstyle 0)
  (vla-put-bitflags tblstyle 1)
  (vla-put-horzcellmargin tblstyle (/ h3 5))  
  (vla-put-vertcellmargin tblstyle (/ h3 5))
  (vla-settextstyle tblstyle 7 txtstyle)
  (vla-settextheight tblstyle 1 h3)  
  (vla-settextheight tblstyle 4 h2) 
  (vla-settextheight tblstyle 2 h1) 

  (vla-setrgb acmCol 204 102 0)
  (vla-setgridcolor tblstyle 63 7 acmCol)
  
  (vla-setgridvisibility tblstyle 63 7 :vlax-true) 
  (vla-setgridlineweight  tblstyle 18 7 aclnwt009) 
  (vla-setgridlineweight tblstyle 45 7 aclnwt050) 

  (vlax-release-object acmCol)
  )
;==================== * main part * ========================;

;=========== * create table from extended data * ===========;

(defun C:ART (/ Acmcol Acsp Adoc Axss Col Columns Dht Headers Ipt Objtable Row Rows Table_Data)
  (if (< (atof (getvar "ACADVER")) 16.0)
  (alert "This routine will work\nfor versions A2005 and higher")
  (progn
  (alert "\tBe patience\n\tWorks slowly")
 
  (or adoc
    (setq adoc (vla-get-activedocument
  (vlax-get-acad-object))))
  (or acsp (setq acsp (if (= (getvar "TILEMODE") 0)
  (vla-get-paperspace
  adoc)
  (vla-get-modelspace
  adoc))
  )
  )
  (vl-catch-all-apply (function (lambda()
  (make-tablestyle "PipeInfo" "Electric Table" "Standard" 10.0 10.0 12.0))))
  (setq acmCol (vla-getinterfaceobject
	       (vlax-get-acad-object)
	       (strcat "AutoCAD.AcCmColor."
		       (substr (getvar "ACADVER") 1 2))))
  (setq dht (getvar "dimtxt"))

;;;  (setq lst_count nil)
  (setq table_data (getallxdata "PIPEINFO"))
  (setq table_data (mapcar (function (lambda(x)
		   (mapcar 'vl-princ-to-string x)))
			   table_data))
(setq	columns	 (length (car table_data)) 
	rows	 (length table_data)
	ipt (getpoint "\nUpper left table insertion point: \n")
  )

      (setq objtable (vlax-invoke
		      acsp
		      "AddTable"
		      ipt
		      (+ 2 rows)
		      columns
		 ;; rows height (change by suit):
		 (* dht 1.667);28
		 ;; columns width (change by suit):
		 (* dht 10);50
	       )
       )
  (vla-put-regeneratetablesuppressed objtable :vlax-true)
  (vla-put-titlesuppressed objtable :vlax-false)
  (vla-put-headersuppressed objtable :vlax-false)  

  (vla-put-titlesuppressed objtable :vlax-false)
  (vla-put-headersuppressed objtable :vlax-false)
  (vla-put-horzcellmargin objtable (* dht 0.5))
  (vla-put-vertcellmargin objtable (* dht 0.5))
  (vla-put-layer objtable "0")
  (vla-settextstyle objtable 2 "Standard")
  (vla-settextstyle objtable 4 "Standard")
  (vla-settextstyle objtable 1 "Standard")
  
  (vla-setrowheight objtable 1 (* dht 1.5))
  (vla-setrowheight objtable 2 (* dht 1.25))

  
  (vla-settextheight objtable 2 (* dht 1.25))
  (vla-settextheight objtable 4 dht)
  (vla-settextheight objtable 1 dht)
  
  (vla-put-colorindex acmcol 256)
  (vla-put-truecolor objtable acmcol)
  
  (vla-setcolumnwidth objtable 0 (* dht 10))
  (vla-setcolumnwidth objtable 1 (* dht 15))
  (vla-setcolumnwidth objtable 2 (* dht 10))
  (vla-setcolumnwidth objtable 3 (* dht 15))
  
  (vla-put-colorindex acmcol 2)
  (vla-settext objtable 0 0 "Pipes Info") 
  (vla-setcelltextheight objtable 0 0 (* dht 1.5))
  (vla-setcellcontentcolor objtable 0 0 acmcol)
  (vla-put-colorindex acmcol 102)
  (setq	headers	'("Pipe Size" "Length" "HWS" "HWR")
  )
  
  (setq	col 0
	row 1
  )
  (foreach a headers
    (vla-settext objtable row col a)
    (vla-setcelltextheight objtable row col (* dht 1.25))
    (vla-setcellcontentcolor objtable row col acmcol)
    (setq col (1+ col))
  )
(vla-put-colorindex acmcol 40)  
(setq  row 2 col 0)

  (foreach i table_data
  (vla-setrowheight objtable row (* dht 1.25))  
  (setq col 0)
  (foreach a i
    (vla-settext objtable row col a)
    (if (/= col 1)
    (vla-setcellalignment objtable row col acMiddleLeft)
    (vla-setcellalignment objtable row col acMiddleCenter))
    (vla-setcellcontentcolor objtable row col acmcol)
    (setq col (1+ col)))
    (setq row (1+ row))
    )
  (vla-put-colorindex acmcol 12)

  (vla-setcellcontentcolor objtable row 1 acmcol)
  (vla-put-regeneratetablesuppressed objtable :vlax-false)
  (vl-catch-all-apply
    (function
      (lambda ()
	(progn
	  (vla-clear axss)
	  (vla-delete axss)
	  (mapcar 'vlax-release-object (list axss objtable))
	  )
	)
      )
    )
  (vla-regen adoc acactiveviewport)
  (alert "Done")
  )
    )
  (princ)
)

(prompt
  "\n\t\t\t   |-----------------------------|"
)
(prompt
  "\n\t\t\t  <|  Start with ART to execute  |>"
)
(prompt
  "\n\t\t\t   |-----------------------------|"
)
(or (vl-load-com)
  (princ))
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 08.11.2012, 08:49
#10
BoTTePa3


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


Спасибо на код. Попробую как только на работе завал спадёт
BoTTePa3 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > выборка всех примитивов с расширенными данными



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск всех примитивов по цвету на одном слое GGarry Программирование 11 18.12.2008 00:11
Выбор всех примитивов одним кликом DANZZ AutoCAD 5 12.08.2006 17:49
Как обнулить одну координату для всех примитивов? Miha AutoCAD 4 19.02.2004 09:11
Нужна прога для преобразования ВСЕХ примитивов в полилинии timurka AutoCAD 4 25.11.2003 05:15