@grr公司
我不太清楚你这是什么意思。我没有测试你们的代码,但我们所有的代码的最终结果都一样吗?
我已经修改了我的代码,以接受lwpolyline和3dpolyline,并考虑原始对象是否闭合。
- (defun c:test ( / ss 3dplobj coords ms splobj objn n li)
- (vl-load-com)
- (setq ss (ssget ":s:e" '(( 0 . "POLYLINE,LWPOLYLINE"))))
- (if ss
- (progn
- (setq 3dplobj (vlax-ename->vla-object (ssname ss 0)))
- (setq objn (vlax-get-property 3dplobj 'ObjectName))
- (setq coords (vlax-get-property 3dplobj 'Coordinates))
- (if (= "AcDbPolyline" objn)
- (progn
- (setq coords (vlax-safearray->list (vlax-variant-value coords)))
- (setq elev (vlax-get-property 3dplobj 'Elevation))
- (setq n 0)
- (repeat (/ (length coords) 2)
- (setq li (append li (list (nth n coords)(nth (+ n 1) coords) elev)))
- (setq n (+ n 2))
- )
- (setq coords (pl->var li))
- )
- )
- (setq ms (vlax-get-property (vlax-get-property (vlax-get-acad-object) 'ActiveDocument) 'ModelSpace))
- (setq splobj (vlax-invoke-method ms 'AddSpline coords (vlax-3d-point 0 0 0) (vlax-3d-point 0 0 0)))
- (if (= :vlax-true (vlax-get-property 3dplobj 'Closed))
- (vlax-put-property splobj 'Closed2 :vlax-true))
- (vlax-invoke-method 3dplobj 'Delete)
- )
- (princ "\nOops. Nothing was selected.")
- )
- (princ)
- )
- ;Given Pointlist returns pointlist in variant form
- (defun pl->var ( pl / pl ub sa var)
- (setq ub (- (length pl) 1))
- (setq sa (vlax-make-safearray vlax-vbdouble (cons 0 ub)))
- (setq var (vlax-make-variant (setq sa (vlax-safearray-fill sa pl))))
- )
|