嘿,李,谢谢你提醒我以下代码:
-
- (setq lst (vlax-invoke line-obj 'IntersectWith polyline acExtendNone))
变异有时会令人头痛。
事实证明,我的问题只是一个小的打字错误。
我想与大家分享我的工作,但请记住,我仍处于调试阶段,还需要添加错误陷阱,使其具有虚拟证明。
以下代码将三维多段线覆盖在沿给定直线的一系列高架多段线(等高线)上。它对多段线进行了采样。请随时告诉我你的想法。
-
- ;Drapes a 3dpolyline over polylines along a selected line.
- (vl-load-com)
- (defun c:sample-pl ( / li *ModSpc *ActDoc *Acad lobj p1 p2 ss sslen i plobj pnts n li pntli finli var)
- (setq li nil)
- (setq *ModSpc (vlax-get-property (setq *ActDoc (vlax-get-property (setq *acad (vlax-get-acad-object)) 'ActiveDocument)) 'ModelSpace))
- (setq lobj (vlax-ename->vla-object (car (entsel "\nSelect Line Object: "))))
- (setq p1 (vlax-safearray->list (vlax-variant-value (vlax-get-property lobj 'StartPoint))))
- (setq p2 (vlax-safearray->list (vlax-variant-value (vlax-get-property lobj 'EndPoint))))
- (setq ss (ssget "f" (list p1 p2) '(( 0 . "LWPOLYLINE"))))
- (setq sslen (sslength ss))
- (setq i 0)
- (repeat sslen
- (setq plobj (vlax-ename->vla-object (ssname ss i)))
- (setq el (vlax-get-property plobj 'Elevation))
- (vlax-put-property plobj 'Elevation 0)
- (setq pnts (vlax-invoke lobj 'IntersectWith plobj acExtendNone))
- (vlax-put-property plobj 'Elevation el)
- (vlax-release-object plobj)
- (setq n 0)
- (repeat (/ (length pnts) 3)
- (setq li (append li (list (nth (+ n 0) pnts))))
- (setq li (append li (list (nth (+ n 1) pnts))))
- (setq li (append li (list el)))
- (drxc (list (nth (+ n 0) pnts) (nth (+ n 1) pnts) el) 2)
- (setq n (+ n 3))
- )
- (setq i (1+ i))
- )
- (setq n 0)
- (setq pntli nil)
- (repeat (/ (length li) 3)
- (setq pntli (append pntli (list (cons (distance (list (nth (+ n 0) li) (nth (+ n 1) li)) (list (nth 0 p1) (nth 1 p1))) (list (list (nth (+ n 0) li) (nth (+ n 1) li)(nth (+ n 2) li)))))))
- (setq n (+ n 3))
- )
- (setq pntli (vl-sort pntli (function (lambda (d1 d2) (< (car d1) (car d2))))))
- (setq n 0)
- (setq finli nil)
- (repeat (length pntli)
- (setq finli (append finli (cadr (nth n pntli))))
- (setq n (1+ n))
- )
- (setq var (pl->var finli))
- (setq 3dobj2 (vlax-invoke-method *ModSpc 'Add3DPoly var))
- (vlax-put-property 3dobj2 'Color 1)
- (vlax-release-object 3dobj2)
- )
- ;Given Pointlist returns pointlist in variant form
- (defun PL->VAR ( pl / pl ub sa var)
- (setq ub (- (length li) 1))
- (setq sa (vlax-make-safearray vlax-vbdouble (cons 0 ub)))
- (setq var (vlax-make-variant (setq sa (vlax-safearray-fill sa pl))))
- )
- ;Graphically draws an "X" at given point and color. Example: (drxc '( 1 2 3) 1) draws x at x=1 y=2 z=3 in the color red
- (defun drxc (ctr color / vs xs xs2 cor1 cor2 cor3 cor4 ctr color)
- (setq vs (getvar "viewsize"))
- (setq xs (/ vs 20))
- (setq xs2 (/ xs 2))
- (setq cor1 (polar ctr (* pi 0.25) xs2))
- (setq cor2 (polar ctr (* pi 0.75) xs2))
- (setq cor3 (polar ctr (* pi 1.25) xs2))
- (setq cor4 (polar ctr (* pi 1.75) xs2))
- (grdraw ctr cor1 color 0)
- (grdraw ctr cor2 color 0)
- (grdraw ctr cor3 color 0)
- (grdraw ctr cor4 color 0)
- )
|