嗨,prodromosm,
将以下代码视为“快速而肮脏的演示,而不是最终确定的代码”,并将其视为实现目标的不同方法。
这个“演示”应该在WCS中按预期工作。。。
使用demo1,您只需选择连接所有“点”块的LWMOLYLINE(2D),即可生成具有“ELEV”信息的3D多段线。
- (defun c:demo1 (/ attlst e lst obj par poly pt s s1 z)
- (if (setq s (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))
- (progn
- (vl-cmdf "_.DRAWORDER" (ssname s 0) "" "_B"
- "_.zoom" "_O" (ssname s 0) ""
- "_.-layer" "_M" "3DPoly_Test" "_C" "3" "3DPoly_Test" "" ""
- );; vl-cmdf
- (setq poly (vlax-ename->vla-object (ssname s 0))
- e (fix (vlax-curve-getEndParam poly))
- par 0
- lst nil
- );; setq
- (while (/= par (1+ e))
- (setq pt (vlax-curve-getPointAtParam poly par))
- (if (setq s1 (ssget pt '((0 . "INSERT") (2 . "Point") (66 . 1))))
- (progn
- (setq obj (vlax-ename->vla-object (ssname s1 0))
- attlst (vlax-invoke obj 'GetAttributes)
- );; setq
- (foreach att attlst
- (if (= (vla-get-TagString att) "ELEV")
- (setq z (atof (vla-get-TextString att))
- pt (list (car pt) (cadr pt) z)
- lst (cons pt lst)
- );; setq
- );; if
- );; foreach
- );; progn
- );; if
- (setq par (1+ par))
- );; while
- (if lst
- (progn
- (setq lst (reverse lst))
- (entmake (list '(0 . "POLYLINE")
- (if (vlax-curve-IsClosed poly)
- '(70 . 9)
- '(70 .
- );; if
- );; list
- );; entmake
- (foreach x lst
- (entmake (list '(0 . "VERTEX")
- '(70 . 32)
- (cons 10 x)
- );; list
- );; entmake
- );; foreach
- (entmake '((0 . "SEQEND")))
- );; progn
- );; if
- (vl-cmdf "_.zoom" "_P")
- );; progn
- );; if
- (princ)
- );; demo1
在演示2中,您只需要选择连接所有“点”块的3DPolyline,以使用高程值填充“高程”“标记”。
- (defun c:demo2 (/ attlst e obj par poly pt s s1 )
- (if (setq s (ssget "_+.:E:S" '((0 . "POLYLINE") (-4 . "&") (70 . )))
- (progn
- (vl-cmdf "_.DRAWORDER" (ssname s 0) "" "_B"
- "_.zoom" "_O" (ssname s 0) ""
- );; vl-cmdf
- (setq poly (vlax-ename->vla-object (ssname s 0))
- e (fix (vlax-curve-getEndParam poly))
- par 0
- );; setq
- (while (/= par (1+ e))
- (setq pt (vlax-curve-getPointAtParam poly par))
- (if (setq s1 (ssget pt '((0 . "INSERT") (2 . "Point") (66 . 1))))
- (progn
- (setq obj (vlax-ename->vla-object (ssname s1 0))
- attlst (vlax-invoke obj 'GetAttributes)
- );; setq
- (foreach att attlst
- (if (= (vla-get-TagString att) "ELEV")
- (vla-put-TextString att (rtos (caddr pt) 2 2))
- );; if
- );; foreach
- );; progn
- );; if
- (setq par (1+ par))
- );; while
- (vl-cmdf "_.zoom" "_P")
- );; progn
- );; if
- (princ)
- );; demo2
希望这有帮助。。。
亨里克 |