KarlG 发表于 2022-7-5 15:10:35

正在处理的选择集

我似乎无法以任何方式传递每个多段线的选择集,以将点放置在每个多段线的中点?
这让我抓狂,我试图修改原始代码来选择列表并以这种方式处理,但它仍然不起作用
 

(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曲线函数可用于直线、多段线、圆弧、样条曲线等。。

hanhphuc 发表于 2022-7-5 15:25:54

请参阅下面的代码以获取指导。这是非常基本的,但做你想要的,但你可能需要充实它。
 
 
;;此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,样条曲线,弧”)));

dlanorh 发表于 2022-7-5 15:42:01

http://forums.augi.com/showthread.php?171946-处理-a-选择-set-of-LightWeight-Polylines-to-provide-middpoints&p=#2

marko_ribar 发表于 2022-7-5 15:59:39

谢谢德拉诺
这段代码工作得最好,也帮助我进一步开发了lisp文件(一般来说,编程中断了3年)
 
 
感谢大家的快速反应和指点。
 
 
 
 

KarlG 发表于 2022-7-5 16:23:43

页: [1]
查看完整版本: 正在处理的选择集