我相信OP正在寻找这样的东西。这是一种快速而肮脏的方法。
- (defun c:Test ()
- (setq ms (vlax-get-property (vlax-get-property (vlax-get-acad-object) 'ActiveDocument) 'ModelSpace))
- (defun pl->var (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))))
- )
- (princ "\nSelect Circle:")
- (setq ss (ssget ":S" '(( 0 . "CIRCLE"))))
- (setq pl nil)
- (if ss
- (progn
- (setq cir (vlax-ename->vla-object (ssname ss 0)))
- (setq rp (vlax-safearray->list (vlax-variant-value (vlax-get-property cir 'Center))))
- (setq r (vlax-get-property cir 'Radius))
- (princ "\nSelect AECC TIN Surface:")
- (setq ss (ssget ":S" '((0 . "AECC_TIN_SURFACE"))))
- (setq surf (vlax-ename->vla-object (ssname ss 0)))
- (setq a 0)
- (repeat 360
- (setq p (polar rp a r))
- (setq el (vlax-invoke-method surf 'FindElevationAtXY (car p)(cadr p)))
- (setq p (list (car p)(cadr p)el))
- (setq pl (append pl p))
- (setq a (+ a (/ pi 180.0)))
- )
- (setq var (pl->var pl))
- (setq 3dobj (vlax-invoke-method ms 'Add3DPoly var))
- (vlax-put-property 3dobj 'Closed 1)
- )
- )
- )
请记住,我没有仔细观察错误捕捉。如果圆的任何部分不在曲面顶部,则会出错。这将对圆中的每个度进行采样。
当做
hippe013
P、 也许有人愿意接受这个想法并清理它(添加错误捕获和处理局部变量与全局变量)。 |