正在处理的选择集
我似乎无法以任何方式传递每个多段线的选择集,以将点放置在每个多段线的中点?这让我抓狂,我试图修改原始代码来选择列表并以这种方式处理,但它仍然不起作用
(defun c:MidPoly ( / ent ename entl en oname param len hLen MidPt OS )
(vl-load-com)
(setq ent (entsel "\nSelect polyline:"))
(if ent
(progn
(setq ename (car ent)
entl (entget ename)
en (cdr (assoc 0 entl))
)
(if (member en (list "POLYLINE" "LWPOLYLINE"))
(progn
(setq oname (vlax-ename->vla-object ename)
param (vlax-curve-getEndParam oname)
len (vlax-curve-getDistAtParam oname param)
hLen (* 0.5 len)
MidPt (vlax-curve-getPointAtDist oname hLen)
)
(vlax-release-object oname)
(setq OS (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command "._Point" MidPt)
(princ "\nPoint object created at mid-point:")(princ MidPt)
(setvar "OSMODE" OS)
)
(princ "\nYou must pick a polyline object only.")
)
)
)
(prin1)
)
(defun c:test1 ( / e i s x )
(if (setq s (ssget "_X" (list (cons 8 "MGA55_ROW_Stripping_Depth") (cons 0 "LWPOLYLINE"))))
(progn
(setq i (1- (sslength s)))
(while (<= 0 i)
(setq e (ssname s i)
x (cdr (assoc 0 (entget e)))
i (1- i)
)
(command "(c:MIDPOLY)" e)
(print x)
)
)
)
(princ)
)
(defun c:test2 ( / e i s x )
(if (setq s (ssget "_X" (list (cons 8 "MGA55_ROW_Stripping_Depth") (cons 0 "LWPOLYLINE"))))
(progn
(setq i 0)
(repeat (sslength s)
(setq e (ssname s i)
x (cdr (assoc 0 (entget e)))
i (1+ i)
)
(command "(c:MIDPOLY)" e)
(print x)
)
)
)
(princ)
)
(defun c:test3 ( / s )
(if (setq s (ssget "_X" (list (cons 8 "MGA55_ROW_Stripping_Depth") (cons 0 "LWPOLYLINE"))))
(foreach e (ssnamex s)
(if (= 'ename (type (cadr e)))
(command "(c:MIDPOLY)" (cdr (assoc 0 (entget (cadr e)))))
)
)
)
(princ)
)
(defun c:test4 ( / e s )
(if (setq s (ssget "_X" (list (cons 8 "MGA55_ROW_Stripping_Depth") (cons 0 "LWPOLYLINE"))))
(while (setq e (ssname s 0))
(print (cdr (assoc 0 (entget e))))
(setq x (cdr (assoc 0 (entget e))))
(command "(c:MIDPOLY)" e)
(ssdel e s)
)
)
(princ)
)
例子:
(defun c:MIDLINE ( / ent nPt p2 p1 )
(if (setq ent (car (entsel "\nSelect line:")))
(progn
(setq p1 (cdr (assoc 10 (entget ent)))
p2 (cdr (assoc 11 (entget ent)))
)
(setq npt (Line-centroid p1 p2))
(setq OS (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command "._Point" nPt)
(princ "\nPoint object created at mid-point:")(princ nPt)
(setvar "OSMODE" OS)
)
)
)
(defun Line-centroid (p1 p2)
(mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.0)) p1 p2)
)
vlax曲线函数可用于直线、多段线、圆弧、样条曲线等。。 请参阅下面的代码以获取指导。这是非常基本的,但做你想要的,但你可能需要充实它。
;;此lisp将用于:;;线LW多段线(曲线或直线);;3D多段线(曲线或直线);;样条;;(vl load com)(defun c:midpts(/*error*c\u doc ms ss l\u obj m\u dist i\u pt n\u obj)(defun*error*(msg)(if(和c\u doc(=8(logand 8(getvar’Undocl))(vla ENDUMORK c\u doc))(if(not(wcmatch(strcase msg)“*BREAK*,*CANCEL*,*EXIT*”)(princ(strcat“\n错误:“msg”occurred”))(普林斯))_end_*error*_defun(setq c_doc(vla get activedocument(vlax get acad object))ms(vla get modelspace c_doc));end_setq(if(and c_doc(=8(logand 8(getvar'UNDOCTL)))(vla endundomark c_doc))(vla startundomark c_doc)(提示“\n选择直线|多段线|样条曲线|弧:”)(setq ss(ssget“:L”((0。“直线,LWPOLYLINE,POLYLINE,样条曲线,弧”))); http://forums.augi.com/showthread.php?171946-处理-a-选择-set-of-LightWeight-Polylines-to-provide-middpoints&p=#2 谢谢德拉诺
这段代码工作得最好,也帮助我进一步开发了lisp文件(一般来说,编程中断了3年)
感谢大家的快速反应和指点。
页:
[1]