明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 592|回复: 1

麻烦谁可以帮我把这个插件末尾增加一个合并线段的功能啊!!感谢

[复制链接]
发表于 2024-6-14 13:52:06 | 显示全部楼层 |阅读模式
(princ "\n        Loading lp.lsp ...")
(defun c:lp  ( / ssf1 ssf2 ssf3 ssf4 ssf5 ssf6 p1 p2 pcen rad
                      p3 oldwid ww ww1 wid1 ltt clt cor cclor
                      d1 d2 p1 p2 p3 p4 ara rad p33 p34
                      ssff ssff0 ssff1 ssff2 ssff3 ssff4 ssff5
                      ssla ele1 ele2 en0
              )
   (setq  ww nil ww1 nil)
(setq #pi90 (* pi 0.50)        ;half of pi
      #pi180 (* pi 1.00)        ;pi
      #pi270 (* pi 1.50)        ;1-1/2 of pi
  );setq            ;*

   (setvar "cmdecho" 0)
   (setvar "highlight" 1)
   (command "units" "2" "4" "1" "4" "0" "n")
   (command "ucs" "world")

   (princ "\nLinetype to Polyline, Version 2.20 (C)1996-2000   by ECEC,Inc")
   (setq ssf1 (ssget))
   (if ssf1
     (progn

     (setq wid1 (getvar "PLINEWID"))
   (princ "\nµ±Ç°¶àÒåÏßĬÈÏ¿í¶ÈΪ") (princ wid1)(princ "mm")
   (initget  0 )
   (princ "\nÇëÊäÈëÐ޸ĺóµÄÏß¿í" )
   (princ "< ") (princ wid1) (princ " mm>:")
   (setq wid (getreal " "   ))
   (if wid
     (princ)
     (setq wid wid1)
   );if
    (setvar "plinewid" wid)
       (setq ssf2 (sslength ssf1))
       (setq ssf3 0)
       (while (<= ssf3 (- ssf2 1))
        (setq ssf4 (ssname ssf1 ssf3))
        (setq ssf5 (entget ssf4))
        (cond
          ((= (dxf 0 ssf5) "CIRCLE")
           (redraw ssf4 3)
           (setq pcen (dxf 10 ssf5))
           (setq rad (dxf 40 ssf5))
           (setq p1 (polar pcen #pi270 rad))
           (setq p2 (polar pcen #pi90  rad))
           (entdel ssf4)
           (command "osnap" "none")
           (command "pline" p1 "w" wid wid "arc" "CE" pcen p2 p1 "")

              (setq ssla (entget (entlast)))
              (if (dxf 6 ssf5)
               (command "change" (dxf -1 ssla) "" "P" "LT" (dxf 6 ssf5) "")
               );if
              (setq ssla (entget (entlast)))
               (if (dxf 62 ssf5)
               (command "change" (dxf -1 ssla) "" "P" "Color" (dxf 62 ssf5) "")
               );if
              (setq ssla (entget (entlast)))
               (if (dxf 39 ssf5)
               (command "change" (dxf -1 ssla) "" "P" "Elev" (dxf 39 ssf5) "")
               );if
              (setq ssla (entget (entlast)))
               (if (dxf 8 ssf5)
               (command "change" (dxf -1 ssla) "" "P" "LA" (dxf 8 ssf5) "")
               );if

            (setq ssf4 (entget (entlast)))
            (redraw (dxf -1 ssf4))

            );cond2

           ((= (dxf 0 ssf5) "ARC")
            (redraw ssf4 3)
            (command "pedit"  (dxf -1 ssf5) "Y" "W" wid "X")
             (setq ssf4 (entget (entlast)))
            (redraw (dxf -1 ssf4))
              );cond
           ((= (dxf 0 ssf5) "POLYLINE")
            (redraw ssf4 3)
            (command "osnap" "none")
            (if (or (= (dxf 70 ssf5) 0) (= (dxf 70 ssf5) 1))
            (progn
            (command "pedit" (dxf -1 ssf5) "w" wid "X")
             );progn
             (progn
             (setq ssf5 (subst (cons 70 0) (assoc 70 ssf5) ssf5))
             (entmod ssf5)
             (entupd (dxf -1 ssf5))
             (command "pedit" (dxf -1 ssf5) "w" wid "X")
             );progn
             );if
            );cond PLINE
           ((= (dxf 0 ssf5) "LWPOLYLINE")
            (redraw ssf4 3)
            (command "osnap" "none")
            (if (or (= (dxf 70 ssf5) 0) (= (dxf 70 ssf5) 1))
            (progn
            (command "pedit" (dxf -1 ssf5) "w" wid "X")
             );progn
             (progn
             (setq ssf5 (subst (cons 70 0) (assoc 70 ssf5) ssf5))
             (entmod ssf5)
             (entupd (dxf -1 ssf5))
             (command "pedit" (dxf -1 ssf5) "w" wid "X")
             );progn
             );if
            );cond LWPLINE
           ((= (dxf 0 ssf5) "LINE")
            (redraw ssf4 3)
            (setq ele1 (caddr (dxf 10 ssf5))
                  ele2 (caddr (dxf 11 ssf5))
            )
            (if (>= (abs (- ele1 ele2)) 0.0001)
               (progn
                 (setq en0 (subst (cons 10 (list (car (dxf 10 ssf5))
                                               (cadr (dxf 10 ssf5))
                                                ele1))
                                  (cons 10 (dxf 10 ssf5))
                                   ssf5
                                  )
                  );setq
                 (entmod en0)

               (setq ssf5 (entget (entlast)))

                 (setq en0 (subst  (cons 11 (list (car (dxf 11 ssf5))
                                                (cadr (dxf 11 ssf5))
                                                ele1))
                                   (cons 11 (dxf 11 ssf5))
                                   ssf5
                                  )
                );setq
                 (entmod en0)
               (setq ssf5 (entget (entlast)))


                );progn
                );if
            (command "osnap" "none")
            (command "pedit" (dxf -1 ssf5) "Y" "w" wid "X")

            );cond PLINE
           (T
            (redraw ssf4 3)
            (princ "\n&#202;&#181;&#204;&#229;&#206;&#170;") (princ (dxf 0 ssf5)) (princ "&#192;à&#208;&#205;,&#178;&#187;&#208;è×&#170;&#187;&#187;&#206;&#170;&#182;à&#210;&#229;&#207;&#223; !")
            );default
          );cond
          (setq ssf3 (1+ ssf3))
          );while
            (redraw)
          );progn ssf1
          (princ)
          );if
   (command "units" "2" "4" "1" "4" "0" "n")
          (princ)
       );end of defun

  (defun  dxf ( hgg hgg1 / )
         (cdr (assoc hgg hgg1 ))
  );defun
(defun div-pt (p1 p2 inc / m)
    (setq m (mapcar '+ p1 (mapcar '* (list inc inc inc) p2)))
    (mapcar '/ m
             (list (+ 1 inc) (+ inc 1) (+ inc 1)))
);defun
(princ " loaded.")
(princ "\n        Now you can start command with LP.")
(princ)


发表于 2024-6-15 14:02:46 | 显示全部楼层
本帖最后由 YuHB 于 2024-6-15 14:06 编辑

应该就用 (command "pedit" "m")命令就可以实现,这个命令你贴出来的代码里面就用过。
一般大神估计不愿意回复你这种问题的,我也不太懂autolisp,所以只是抱着试试的心态。
不过可能我理解得不对,不一定是你想要的效果啊。
;;;
(setq e0 (entlast));;这一句加在主程序开头
...........;;省略处是你程序的主要内容
(setq ss (MyEntNext e0 ssf1));;这两句加在主程序末尾,0.005是我随便设的容差,自己调整
(command "pedit" "m" ss "" "j" 0.005 "");;

;;后面是一个子程序(由黄明儒分享的函数修改)
(defun MyEntNext (en ss / )
        (if (= (type ss) 'pickset) nil (setq ss (ssadd)))
  (if en
          (while (setq en (entnext en))
                    (if (not (member (cdr (assoc 0 (entget en))) '("ATTRIB" "VERTEX" "SEQEND"))) (ssadd en ss))
    )
  )
  ss
)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 05:47 , Processed in 0.191897 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表