明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: wzg356

[资源] 继续多线段,看似简单,但很有用

[复制链接]
发表于 2014-9-14 11:57 | 显示全部楼层
杜阳 发表于 2014-9-14 11:09
程序很实用  但是里面存着一个问题就是,能不能换方向啊,假设一条直线  利用程序继续画线的那个端点不是我 ...

用楼主的码弄一下,从点线的那端开始接着画线,希望楼主不要介意
有个问题不能输入c就闭合,一闭合就跟之前选中的en不能连接一体了,
高手再改进一下.
(defun c:tt ( / en ent en1 pt lw)
          (command "undo" "be");;命令编组开始
        (setq en  (entsel "\n请点取要继续的多段线:"))       
       (setq pt (osnap (cadr en) "end"))
          (setq ent (entget (car en)))
        (if (= (cdr (assoc 0 ent)) "LWPOLYLINE")                    
        (progn
                (setq lw (cdr (assoc 43 ent)));实体全局线宽
                (if (= lw nil) (setq lw (cdr (assoc 40 ent))));如果无实体全局线宽        则取起始线宽
                (command ".pline"  pt "w" lw lw)
        (while(/=(getvar"cmdactive")0)(command pause))
                (setq en1 (entlast))
                (command "_matchprop"  en en1 "")
                (command "_join"  en1 en "")
                            )
        
        (alert "选择的不是多线段!")
  )       
    (command "undo" "e")
    (princ)
)

点评

闭合已改好更新  发表于 2014-9-15 10:32
 楼主| 发表于 2014-9-14 12:15 | 显示全部楼层
杜阳 发表于 2014-9-14 11:09
程序很实用  但是里面存着一个问题就是,能不能换方向啊,假设一条直线  利用程序继续画线的那个端点不是我 ...

对线段反向的源码论坛资料里很多的呀,
发表于 2014-9-14 15:55 | 显示全部楼层
kwok 发表于 2014-9-14 11:57
用楼主的码弄一下,从点线的那端开始接着画线,希望楼主不要介意
有个问题不能输入c就闭合,一闭合就跟之 ...

你好,把你的这句(command "_join"  en1 en "")改为
(Vl-Cmdf ".Pedit" en1 en "Yes" "J" "C" Pt1 Pt2 "" "" )
就连接在一起了  但是处理还是不那么顺畅  但是 是一条直线了  我是刚学的   再深了 也解答不了
发表于 2014-9-15 11:35 | 显示全部楼层
wzg356 发表于 2014-9-14 12:15
对线段反向的源码论坛资料里很多的呀,

输入c闭合的意思,如下图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

已改成你这样了,重新下  发表于 2014-9-15 11:40
 楼主| 发表于 2014-9-15 11:41 | 显示全部楼层
本帖最后由 wzg356 于 2014-9-15 11:48 编辑
kwok 发表于 2014-9-15 11:35
输入c闭合的意思,如下图

(command "pline"  pt "w" lw lw);
(while(/=(getvar"cmdactive")0)(command pause))

该成下面的(假闭合)
     (command "pline"  pt "w" lw lw)
     (while(/=(getvar"cmdactive")0)
            (cond
               ((or(equal (grread t 8) '(2 67))(equal (grread t 8) '(2 99)))(command (car lst) ""));按下c/C键闭合
               ((= (car (grread t 8)) 11) (command ""));按下鼠标右键结束
                   (t (command pause))
               )
   )
发表于 2014-9-15 12:47 | 显示全部楼层
wzg356 发表于 2014-9-15 11:41
(command "pline"  pt "w" lw lw);
(while(/=(getvar"cmdactive")0)(command pause))

这个加不加都一样,不起作用,输入c后还是如14楼图片右边的图那样.
发表于 2014-9-15 12:48 | 显示全部楼层
wzg356 发表于 2014-9-15 11:41
(command "pline"  pt "w" lw lw);
(while(/=(getvar"cmdactive")0)(command pause))

这个加不加都一样,不起作用,输入c后还是如14楼图片右边的图那样.测试环境cad2008
 楼主| 发表于 2014-9-15 13:35 | 显示全部楼层
kwok 发表于 2014-9-15 12:48
这个加不加都一样,不起作用,输入c后还是如14楼图片右边的图那样.测试环境cad2008

我用的2006

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-9-15 15:55 | 显示全部楼层
kwok 发表于 2014-9-15 12:48
这个加不加都一样,不起作用,输入c后还是如14楼图片右边的图那样.测试环境cad2008
  1. ;;;修改BY HLCAD.
  2. (defun c:tt ( / en ent en1 pt lw)
  3.   (command "_.undo" "_be");;命令编组开始
  4.   (setq en  (entsel "\n请点取要继续的多段线:"))
  5.   (setq pt (osnap (cadr en) "end"))
  6.   (setq ent (entget (car en)))
  7.   (if (= (cdr (assoc 0 ent)) "LWPOLYLINE")
  8.     (progn
  9.       (or (setq lw (cdr (assoc 43 ent)));实体全局线宽
  10.           (setq lw (cdr (assoc 40 ent)));如果无实体全局线宽        则取起始线宽
  11.           )
  12.       (command "_.pline"  pt "w" lw lw)
  13.       (while (/= (getvar"cmdactive") 0) (command pause))
  14.       (setq en1 (entlast))
  15.       (command "_.matchprop"  en en1 "")
  16.       (if (= (cdr (assoc 70 (entget (entlast)))) 0)
  17.         (command "_.join" en1 en "")
  18.         (progn
  19.           (command ".pedit" (list en1 (cadr en)) "_open" "")
  20.           (command ".pedit" en "_j" en1 "" "_cl" "")
  21.           )
  22.         )
  23.       )
  24.     (alert "选择的不是多线段!")
  25.     )
  26.   (command "_.undo" "_e")
  27.   (princ)
  28.   )

点评

就按你的完善,不再改造了。  发表于 2014-9-15 22:45
谢谢! 方法学习了.  发表于 2014-9-15 19:26
发表于 2014-9-16 17:42 | 显示全部楼层
  1. (defun c:tt ( / en ent en1 pt lw)
  2.        (command "undo" "be");;命令编组开始
  3.        (setq en  (entsel "\n请点取要继续的多段线:")
  4.        closep nil)        
  5.        (setq pt (osnap (cadr en) "end"))
  6.        (setq ent (entget (car en)))
  7.         (if (= (cdr (assoc 0 ent)) "LWPOLYLINE")                    
  8.         (progn
  9.                 (setq lw (cdr (assoc 43 ent)))
  10.                 (if (= lw nil) (setq lw (cdr (assoc 40 ent))))
  11.                 (command ".pline"  pt "w" lw lw)
  12.         (while (and (/= (getvar"cmdactive") 0) (not closep))
  13.     (setq pnt (grread t))
  14.     (cond ((and (= 2 (car pnt)) (or (= (last pnt) 99) (= (last pnt) 67)))
  15.                  (setq closep t) (command ""))
  16.                    ((and (= 2 (car pnt)) (or (= (last pnt) 32) (= (last pnt) 13)))
  17.                 (command ""))
  18.        ((= 3 (car pnt)) (command (last pnt))))
  19.   )
  20.         (setq en1 (entlast))
  21.         (command "_matchprop"  en en1 "")
  22.         (command "_join"  en1 en "")
  23.   (if closep (command "pedit" (entlast) "C" ""))
  24.       )        
  25.       (alert "选择的不是多线段!")
  26.   )
  27.   (command "undo" "e")
  28.   (princ)
  29. )

点评

这是我第一次用grread,里面如何设置鼠标右键  发表于 2014-9-16 18:35
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 23:29 , Processed in 0.415446 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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