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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Vertexi 2D i 3D polylinii

Vertexi 2D i 3D polylinii

Ответ
Поиск в этой теме
Непрочитано 19.02.2005, 19:22 #1
Vertexi 2D i 3D polylinii
FuaD
 
Structural Engineer
 
Azerbaijan
Регистрация: 19.02.2005
Сообщений: 3

Rebyata mne nujna pomosh,
KAk vzyat koordinati vertexov s 2D i 3D polinii pri pomoshi lispa, k neschastyu ya mogu vzyat tolko koordinati pervogo vertexa a ostaniye neznayu kak.
Zaraneye blagodaryu.
Просмотров: 3697
 
Непрочитано 19.02.2005, 19:48
#2
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


В панели свойств? Сначала выбери нужный Vertix кнопочками со стрелками например... он будет помечен крестом.
vk вне форума  
 
Непрочитано 19.02.2005, 22:58
#3
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


По ссылке http://dwg.ru/forum/viewtopic.php?t=2584&highlight= лежит программа VK, которая перегоняет координаты вершин полилинии в Excel. В начале этой проги лежит код, создающий список точек-координат вершин полилинии.
По-моему это то, что тебе надо.
Torino вне форума  
 
Непрочитано 19.02.2005, 23:59
#4
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Не заметил сразу про Лисп...
Моя программка по ссылке работает только для LWPOLYLINE, а для 2 и 3D не годится.

Вот код, позаимствованный у ShaggyDoc. Работает для отрезков и всех полилиний.
Код:
[Выделить все]
(defun ic_assoc	(el lst / ls)
	;; кому надо, тот уже понял, что это
	(setq ls (list))
	(foreach n lst
		(if	(or	(equal el (car n))
						(if	(and (= (type el) 'str) (= (type (car n)) 'str))
							(equal (strcase el) (strcase (car n)))
							nil
						) ;_  if
				) ;_  or
			(setq ls (cons n ls))
		) ;_  if
	) ;_  foreach
	(reverse ls)
) ;_  defun



(defun ic_getpolylist	(ent / lst c)
;;; Функция создает список вершин полилинии
;;; (ic_GetPolyList имя_примитива) - возвращает список:
;;;  (
;;;	(список_вершин: (100 100 0) (200 100 0) ...)
;;;	          флаг_замкнутости: T или NIL 
;;;  )
	(if	(/= (type ent) 'ename)
		(progn
			(princ "\nНеверный аргумент.\n")
			(quit)
		) ;_  progn
	) ;_  if
	(setq ent (entget ent))
;;;	(print ent)
	(cond
		((= "LWPOLYLINE" (cdr (assoc 0 ent)))
		 (setq lst (mapcar 'cdr (ic_assoc 10 ent)))
		 (list lst (= 1 (logand 1 (cdr (assoc 70 ent)))))
		)
		((= "POLYLINE" (cdr (assoc 0 ent)))
		 (setq lst (list)
					 c	 (= 1 (logand 1 (cdr (assoc 70 ent))))
					 ent (entnext (cdr (assoc -1 ent)))
		 ) ;_  setq
		 (while	ent
			 (setq ent (entget ent))
			 (if (= "VERTEX" (cdr (assoc 0 ent)))
				 (setq lst (cons (cdr (assoc 10 ent)) lst))
			 ) ;_  if
			 (setq ent (entnext (cdr (assoc -1 ent))))
		 ) ;_  while
		 (list (reverse lst) c)
		)
		((= "LINE" (cdr (assoc 0 ent)))
		 (setq lst (cons (cdr (assoc 11 ent)) lst))
		 (setq lst (cons (cdr (assoc 10 ent)) lst))
		 (list lst nil)
		)
		(t
		 nil
		)
	) ;_  cond
) ;_  defun
Думаю что не будет проблем разобраться....
vk вне форума  
 
Автор темы   Непрочитано 20.02.2005, 23:09
#5
FuaD

Structural Engineer
 
Регистрация: 19.02.2005
Azerbaijan
Сообщений: 3
<phrase 1=


Sposibo rebyata, ochen blagodaren. Postarayus razobrat ves material posmotryu chto poluchitsya.
FuaD вне форума  
 
Непрочитано 21.02.2005, 09:03
#6
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Вот еще код:
Код:
[Выделить все]
;;;---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
;;; $getPointsOfPolyline                                                    февраль 2002г.
;;;---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
;;; Функция возвращает список точек полилинии (облегченной либо стандартной)
;;; В качестве параметра функции передается имя примитива, возвращается список из
;;; двухмерных (для облегченной полилинии) или трехмерных (для стандартной) в том порядке,
;;; в котором они содержатся в описании примитива-полилинии
;;;---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---

(defun $getPointsOfPolyline (polylineName / polylineInfo vertexName listOfPoints)
  (cond
    ;; Облегченная полилиния
    ((= (cdr (assoc '0 (entget polylineName))) "LWPOLYLINE")
     (setq polylineInfo (entget polylineName))
     (while (vl-position (assoc '10 polylineInfo) polylineInfo)
       (setq listOfPoints
	      (cons
		(cdr
		  (nth
		    (vl-position
		      (assoc '10 polylineInfo)
		      polylineInfo
		    ) ;_ vl-position
		    polylineInfo
		  ) ;_ nth
		) ;_ cdr
		listOfPoints
	      ) ;_ cons
       ) ;_ setq
       (setq polylineInfo
	      (vl-remove (assoc '10 polylineInfo) polylineInfo)
       ) ;_ setq
     ) ;_ while
    )
    ;; Стандартная полилиния
    ((= (cdr (assoc '0 (entget polylineName))) "POLYLINE")
     (setq vertexName (entnext polylineName))
     (while vertexName
       (if (= (cdr (assoc '0 (entget vertexName))) "VERTEX")
	 (setq listOfPoints
		(cons
		  (cdr
		    (assoc '10 (entget vertexName))
		  ) ;_ cdr
		  listOfPoints
		) ;_ cons
	 ) ;_ setq
       ) ;_ if
       (setq vertexName (entnext vertexName))
     ) ;_ while
    )
    ;; Не является полилинией
    (T
;;;  (alert "Примитив не является полилинией.")
     (setq listOfPoints nil)
    )
  ) ;_ cond
  (reverse listOfPoints)
) ;_ defun
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 21.02.2005, 12:09
#7
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Или так
Код:
[Выделить все]
(vl-load-com)
(defun coord-vertex (/ listvert plyn)
  (if
    (and
      (setq plyn (car (entsel "\n select polyline:")))
      (wcmatch (cdr (assoc 0 (entget plyn))) "*OLYLINE")
    ) ;_ end of and
     (progn
       (setq k 0)
       (while
	 (not
	   (vl-catch-all-error-p
	     (vl-catch-all-apply
	       (function
		 (lambda (x)
		   (setq vert	  (vla-get-coordinate x k)
			 listvert (cons vert listvert)
		   ) ;_ end of setq
		 ) ;_ end of lambda
	       ) ;_ end of function
	       (list (vlax-ename->vla-object plyn))
	     ) ;_ end of vl-catch-all-apply
	   ) ;_ end of VL-CATCH-ALL-ERROR-P
	 ) ;_ end of not
	  (setq k (1+ k))
       ) ;_ end of while
       (setq listvert (mapcar 'vlax-safearray->list
			      (mapcar 'vlax-variant-value listvert)
		      ) ;_ end of mapcar
       ) ;_ end of setq
     ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun
Эдуард вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Vertexi 2D i 3D polylinii