求助!!如何依次获得多边形网格的全部顶点
本帖最后由 gamexia 于 2018-10-26 23:25 编辑使用edgesurf 生成的多边形网格,如何依次取得全部顶点?
本帖最后由 lisperado 于 2018-10-27 13:22 编辑
gamexia 发表于 2018-10-27 11:23
首先非常感谢帮助!!
有疑问如下:
1)顶点的编号与CAD的特性中的顶点编号刚好相反
1.相反因为之前 ( setq ls (cons x ls) ) 思路,已更正 :)
2.以下示范只以瞬态点取代替插入块以便直接预览(以免undo费时),思路相同以'p'变量坐标值。。
(defun c:tt2 (/ *error* l i s p )
(defun *error* (msg)
(princ "*cancel*")
)
(princ "\n选取多边形网格..")
(cond ((setq s (ssget "_:E:S+." '((0 . "POLYLINE") (-4 . "&=") (70 . 16)))
l (vlax-get (vlax-ename->vla-object (ssname s 0)) 'coordinates)
i 1
)
(while l
(setq p (list (car l) (cadr l) (caddr l))) (setq p (trans p 0 1)) ; UCS坐标只限于瞬态
(or (zerop (logand i 1))
;; (command "-insert" "块名称" p 1 1 0 )
(grvecs (apply
'append
(mapcar
'(lambda (x)
(list 2 p (polar p (* x pi) (* 10. (/ (getvar "viewsize") (cadr (getvar "screensize"))))))
)
'(0.25 0.75 1.25 1.75)
)
)
)
)
(setq i (1+ i)
l (cdddr l)
)
)
)
(t (princ "\n退出?"))
)
(*error* nil)
(princ)
)
本帖最后由 lisperado 于 2018-10-27 11:47 编辑
(defun c:tt (/ *error* s w i r l)
(defun *error* (msg)
(if r
(close r)
)
)
(princ "\n选取多边形网格.." )
(cond ((setq s (ssget "_:E:S+." '((0 . "POLYLINE") (-4 . "&=") (70 . 16)))
l (vlax-get (vlax-ename->vla-object (ssname s 0)) 'coordinates)
i 0
w (setq w (vl-filename-mktemp))
r (open w "w")
)
(while l
(write-line
(apply 'strcat
(vl-list* (itoa i)
"\t"
(mapcar '(lambda (x) (strcat (rtos x 2 3) "\t")) (list (car l) (cadr l) (caddr l)))
)
)
r
)
(setq i (1+ i)
l (cdddr l)
)
)
(close r)
(startapp "notepad" w)
)
(t (princ "\n退出?"))
)(*error* nil)
(princ)
)
本帖最后由 gamexia 于 2018-10-27 11:33 编辑
lisperado 发表于 2018-10-27 05:05
首先非常感谢帮助!!
有疑问如下:
1)顶点的编号与CAD的特性中的顶点编号刚好相反
2)不用输出到EXCEL,我是在奇数编号的点的位置插入块(只用到XY二维平面)
页:
[1]