sj800918 发表于 2015-12-10 16:14

求mline多线画双线,鼠标指定方向

本帖最后由 sj800918 于 2015-12-11 16:25 编辑

求多线画双线,最后一步鼠标指定方向
自己是小白,用老师们的源码堆叠了一下。请大师指点一下,谢谢!

(defun c:tt()
(command "_mline" )
(while (> (getvar "CMDACTIVE") 0) (command PAUSE))
(setq c (entlast))
(command "explode" c )
(setvar "CMDECHO" 0)
   (if (setq ss (ssget "x"'((0 . "LINE"))))
   (command ".PEDIT" "M" ss "" "J" "0.5" "")
)
(setvar "CMDECHO" 1)
(princ)
)


llsheng_73 发表于 2015-12-10 16:14

sj800918 发表于 2015-12-11 16:01 static/image/common/back.gif
或者是用这个调整一下最后指定线的方向也行,虽说麻烦了点,还要预先设一下多线的封口
(defun c:q()
(c ...

(defun c:tt(/ e a b c)
(while(<(setq d(if(setq a(getreal(strcat"\n双线宽度["(if d(rtos d)"10")"]")))a(if d d 10)))0))
(command"pline")
(while(>(getvar "CMDACTIVE")0)(command PAUSE))
(setq e(entlast))
(command"offset"d e pause nil)
(setq a(entlast)c(entget a)e(reverse(entget e))b(assoc 90 e))
(entmod(append(reverse(cdr(member b e)))
(list(cons 90(+(cdr b)(cdr(assoc 90 c))))'(70 . 1))
(vl-remove-if'(lambda(x)(/=(car x)10))(append e c))))
(entdel a)
)

sj800918 发表于 2015-12-11 08:54

本帖最后由 sj800918 于 2015-12-11 10:10 编辑

晕啊,之前那个代码加了个“X”基本实现了自已选直线
但还是期待大神能给出更好的解决方案,比如画多线画完后,手动选择(鼠标)多线的方向。之后打散,再组成多段线,谢谢!

llsheng_73 发表于 2015-12-11 15:02

本帖最后由 llsheng_73 于 2015-12-11 21:38 编辑

(defun c:tt(/ e a p pt)
(command "_mline" )
(while(>(getvar "CMDACTIVE")0)(command PAUSE))
(setq e(entlast)
      a(entget e))
   (entdel e)
(repeat(car(assoc 72 a))
    (setq p(assoc 11 a)a(cdr(member p a))
          pt(cons(list(cdr p)(cdr(nth 1 a))(abs(cdr(nth 7 a))))pt)))
(entmakex(append'((0 . "lwpolyline")(100 . "AcDbEntity")(100 . "AcDbPolyline"))
                  (cons(cons 90(length pt))(mapcar'(lambda(x)(cons 10(car x)))pt))))
(entmakex(append'((0 . "lwpolyline")(100 . "AcDbEntity")(100 . "AcDbPolyline"))
                  (cons(cons 90(length pt))(mapcar'(lambda(x)(cons 10(polar(car x)(angle(cadr x)'(0 0))(last x))))pt))))
)
好象理解错楼主的意思了,也许下边一个才是楼主的意思,如果还是不对,实在猜不出来了
(defun c:tt(/ d e a)
(vl-load-com)
(command"pline")
(while(<(setq d(if(setq d(getreal"\n双线宽度"))d 10))0))
(initget "C L")
(setq a(if(setq a(getkword"\n绘制位置:中间(C)一边(L)"))a"L"))
(while(>(getvar "CMDACTIVE")0)(command PAUSE))
(setq e(entlast)d(if(="C"a)(/ d 2)d))
(if(="C"a)(progn(vla-offset(vlax-ename->vla-object e)d)(vla-offset(vlax-ename->vla-object e)(- d))(entdel e))
(command"offset"d e pause nil))
)

sj800918 发表于 2015-12-11 15:45

本帖最后由 sj800918 于 2015-12-11 16:05 编辑

llsheng_73 发表于 2015-12-11 15:02 static/image/common/back.gif
好象理解错楼主的意思了,也许下边一个才是楼主的意思,如果还是不对,实在猜不出来了
第一个运行提示
命令: ; 错误: 参数类型错误: consp nil

第二个大概是这个意思,但能否帮我调整一下
1、双线宽度能否记忆上一次输入的尺寸,直接调用,只有在需要的时候像多线一样输入个S,调整线间距。
2、双线两头需要用直线封口
3、不需要选择线在中间还是边上,直接在一边就可以了

谢谢大神!

sj800918 发表于 2015-12-11 16:01

llsheng_73 发表于 2015-12-11 15:02 static/image/common/back.gif
好象理解错楼主的意思了,也许下边一个才是楼主的意思,如果还是不对,实在猜不出来了

或者是用这个调整一下最后指定线的方向也行,虽说麻烦了点,还要预先设一下多线的封口
(defun c:q()
(command "_mline")
(while (> (getvar "CMDACTIVE") 0) (command PAUSE))
(setq c (entlast))
(command "explode" c )
(setvar "CMDECHO" 0)
   (if (setq ss (ssget "x"'((0 . "LINE"))))
   (command ".PEDIT" "M" ss "" "J" "0.5" "")
)
(setvar "CMDECHO" 1)
(princ)
)

sj800918 发表于 2015-12-12 08:53

llsheng_73 发表于 2015-12-10 16:14 static/image/common/back.gif


您给的代码完美解决了我的问题,但能否再麻烦给我优化一下?
现在运行的顺序是,输入TT,回车,改线的宽度,回车,再指定第一点。。。
能否实现,输入TT,回车,提示:“指定第一点或输入S改变线宽【10(现在的线宽)】”。如不输入S,就直接开始画线。需要改变线宽时再多输一步S,谢谢!

sj800918 发表于 2015-12-14 12:49

哪位大神路过给调一下呗,谢谢!

999999 发表于 2020-9-21 12:37

顶一下,谢谢分享

czb203 发表于 2020-9-21 13:17

感谢楼主分享下载试试!
页: [1] 2
查看完整版本: 求mline多线画双线,鼠标指定方向