迷不知途 发表于 2015-1-28 11:48:15

请问大师,画折线,但是有问题!!

各位大师,最近对lsp编程很感兴趣,在明经逛了很久,向大师们学到了很多的东西,在这感谢大家了!!

参考了论坛的几位前辈的源码,结合工作需要修改了一下,搞出来这么一个小插件!但是有几个问题请问如何修改!

1、画折线时扑捉功能不管用,
2、画出的折线不是连接在一起的,是一段一段分开的,如何能连接在一起呢?

下面是代码,请大师们帮帮忙!!多谢了!!

(defun c:zx( / *error* name1 zx_kz zx_p )

(defun *error* (msg)
    (entdel name1) (entdel name2) (entdel name3)
    (princ "错误: ")(princ msg))

(if (= zx_bl nil) (setq zx_bl 100))
(if (= zx_ys nil) (setq zx_ys 0));定义延伸线长度
(setq zx_kz t)
(setq zx_p (getpoint "等待....输入点:"))

(if (= zx_p nil) (setq zx_kza nil))

(while zx_kz

    (setq zx_sb (grread t 4 3) sb_mode (car zx_sb) zx_sb_p (cadr zx_sb))

    (setq xx_dis (distance zx_p zx_sb_p)xx_ang (angle zx_p zx_sb_p))

    (setq xx_p_mid (polar zx_p xx_ang(/ xx_dis 2))
      xx_p11 (polar zx_p (+ pi xx_ang)(* 2 zx_ys))
      xx_p12 (polar zx_sb_pxx_ang(* 2 zx_ys))
      xx_p13 (polar xx_p_mid(+ pi xx_ang)   zx_bl)
      xx_p14 (polar xx_p_midxx_angzx_bl)
      xx_p15 (polar xx_p_mid(+ (/ pi 2) xx_ang)   (* 2 zx_bl))
      xx_p16 (polar xx_p_mid(+ (* 1.5 pi ) xx_ang)   (* 2 zx_bl))
      )

    (if (= sb_mode 5) (progn

      (if name1 (entdel name1))
      (entmake (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 6)(cons 10 xx_p11)(cons 10 xx_p13)(cons 10 xx_p15)(cons 10 xx_p16)(cons 10 xx_p14)(cons 10 xx_p12)))
      (setq name1 (entlast))))

    (if (= sb_mode 3) (progn
      (if name1 (entdel name1))
      (entmake (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 6)(cons 10 xx_p11)(cons 10 xx_p13)(cons 10 xx_p15)(cons 10 xx_p16)(cons 10 xx_p14)(cons 10 xx_p12)))
      (setq name1 (entlast))
      (setq zx_p zx_sb_p)
      (setq name1 nil)

      ))

    (if (or (= sb_mode 2) (= sb_mode 25)) (progn (setq zx_kz nil) (entdel name1)))
)

(princ)
)

(defun c:zxset()

(setq zx_bl (getreal"\n请输入出图比例:"))
(setq zx_ys_if (Getstring "\n请输入是否有延伸线:"))
    (if (= zx_bl nil) (setq zx_bl 100))
    (if (or (= zx_ys_if nil) (/= zx_ys_if)) (setq zx_ys 0)(setq zx_ys zx_bl ))
)







迷不知途 发表于 2015-1-28 12:27:05

自己顶一下吧!!!

longcashman 发表于 2015-1-29 11:50:55

gread不能捕捉
你要看
http://bbs.mjtd.com/thread-91191-1-1.html
想要整体可以把所有name1放在一个表里面
然后提取所有坐标 生成一个新的pline 再把原来的name1实体删掉

迷不知途 发表于 2015-2-4 17:31:52

longcashman 发表于 2015-1-29 11:50 static/image/common/back.gif
gread不能捕捉
你要看
http://bbs.mjtd.com/thread-91191-1-1.html


多谢!多谢!!再研究研究!有疑问了再请教你!!!

xyp1964 发表于 2015-2-4 22:48:48

(defun c:zx (/ s1 zx_kz zx_p)
(if (= zx_bl nil)
    (setq zx_bl 100)
)
(if (= zx_ys nil)
    (setq zx_ys 0)
)
(setq        s0   (entlast)
        mode t
        zx_p (getpoint "等待....输入点: ")
)
(if (= zx_p nil)
    (setq zx_kza nil)
)
(while mode
    (setq gr (grread t 4 3)
          co (car gr)
    )
    (if        (or (= co 5) (= co 3))
      (setq p1        (cadr gr)
          p1        (xyp-Grvecs-Osnap p1)
          dd        (distance zx_p p1)
          rad        (angle zx_p p1)
          pm        (polar zx_p rad (/ dd 2.))
          p2        (polar zx_p (+ pi rad) (* 2 zx_ys))
          p7        (polar p1 rad (* 2 zx_ys))
          p3        (polar pm (+ pi rad) zx_bl)
          p6        (polar pm rad zx_bl)
          p4        (polar pm (+ (/ pi 2.) rad) (* 2 zx_bl))
          p5        (polar pm (+ (* 1.5 pi) rad) (* 2 zx_bl))
      )
    )
    (cond ((= co 5)
           (if s1
             (entdel s1)
           )
           (setq s1 (xyp-Pline (list p2 p3 p4 p5 p6 p7)
                             nil
                  )
           )
          )
          ((= co 3)
           (if s1
             (entdel s1)
           )
           (setq s1   (xyp-Pline (list p2 p3 p4 p5 p6 p7)
                               nil
                      )
               zx_p p1
               s1   nil
           )
          )
          ((or (= co 2) (= co 25))
           (setq mode nil)
           (entdel s1)
          )
    )
)
(xyp-PeditJoin (xyp-SSelEntnext s0) 0)
(redraw)
(princ)
)

(defun c:zxset ()
(setq        zx_bl       (getreal "\n请输入出图比例: ")
        zx_ys_if (Getstring "\n请输入是否有延伸线: ")
)
(if (= zx_bl nil)
    (setq zx_bl 100)
)
(if (or (= zx_ys_if nil) (/= zx_ys_if))
    (setq zx_ys 0)
    (setq zx_ys zx_bl)
)
)

xyp1964 发表于 2015-2-4 22:50:57


迷不知途 发表于 2015-2-10 01:06:07

xyp1964 发表于 2015-2-4 22:50 static/image/common/back.gif


no function definition: XYP-GRVECS-OSNAP

大师你好,本人新手上面的问题是怎么了?

xuehulong 发表于 2015-6-17 11:01:29

学习了 继续学
页: [1]
查看完整版本: 请问大师,画折线,但是有问题!!