明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1148|回复: 7

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

[复制链接]
发表于 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_p  xx_ang  (* 2 zx_ys))
        xx_p13 (polar xx_p_mid  (+ pi xx_ang)   zx_bl)
        xx_p14 (polar xx_p_mid  xx_ang  zx_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请输入出图比例:[100]"))
  (setq zx_ys_if (Getstring "\n请输入是否有延伸线:[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 ))
  )







本帖子中包含更多资源

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

x
 楼主| 发表于 2015-1-28 12:27:05 | 显示全部楼层
自己顶一下吧!!!
发表于 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
gread不能捕捉
你要看
http://bbs.mjtd.com/thread-91191-1-1.html

多谢!多谢!!再研究研究!有疑问了再请教你!!!
发表于 2015-2-4 22:48:48 | 显示全部楼层
  1. (defun c:zx (/ s1 zx_kz zx_p)
  2.   (if (= zx_bl nil)
  3.     (setq zx_bl 100)
  4.   )
  5.   (if (= zx_ys nil)
  6.     (setq zx_ys 0)
  7.   )
  8.   (setq        s0   (entlast)
  9.         mode t
  10.         zx_p (getpoint "等待....输入点: ")
  11.   )
  12.   (if (= zx_p nil)
  13.     (setq zx_kza nil)
  14.   )
  15.   (while mode
  16.     (setq gr (grread t 4 3)
  17.           co (car gr)
  18.     )
  19.     (if        (or (= co 5) (= co 3))
  20.       (setq p1        (cadr gr)
  21.             p1        (xyp-Grvecs-Osnap p1)
  22.             dd        (distance zx_p p1)
  23.             rad        (angle zx_p p1)
  24.             pm        (polar zx_p rad (/ dd 2.))
  25.             p2        (polar zx_p (+ pi rad) (* 2 zx_ys))
  26.             p7        (polar p1 rad (* 2 zx_ys))
  27.             p3        (polar pm (+ pi rad) zx_bl)
  28.             p6        (polar pm rad zx_bl)
  29.             p4        (polar pm (+ (/ pi 2.) rad) (* 2 zx_bl))
  30.             p5        (polar pm (+ (* 1.5 pi) rad) (* 2 zx_bl))
  31.       )
  32.     )
  33.     (cond ((= co 5)
  34.            (if s1
  35.              (entdel s1)
  36.            )
  37.            (setq s1 (xyp-Pline (list p2 p3 p4 p5 p6 p7)
  38.                                nil
  39.                     )
  40.            )
  41.           )
  42.           ((= co 3)
  43.            (if s1
  44.              (entdel s1)
  45.            )
  46.            (setq s1   (xyp-Pline (list p2 p3 p4 p5 p6 p7)
  47.                                  nil
  48.                       )
  49.                  zx_p p1
  50.                  s1   nil
  51.            )
  52.           )
  53.           ((or (= co 2) (= co 25))
  54.            (setq mode nil)
  55.            (entdel s1)
  56.           )
  57.     )
  58.   )
  59.   (xyp-PeditJoin (xyp-SSelEntnext s0) 0)
  60.   (redraw)
  61.   (princ)
  62. )

  63. (defun c:zxset ()
  64.   (setq        zx_bl         (getreal "\n请输入出图比例: [100] ")
  65.         zx_ys_if (Getstring "\n请输入是否有延伸线: [N] ")
  66.   )
  67.   (if (= zx_bl nil)
  68.     (setq zx_bl 100)
  69.   )
  70.   (if (or (= zx_ys_if nil) (/= zx_ys_if))
  71.     (setq zx_ys 0)
  72.     (setq zx_ys zx_bl)
  73.   )
  74. )
发表于 2015-2-4 22:50:57 | 显示全部楼层

本帖子中包含更多资源

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

x
 楼主| 发表于 2015-2-10 01:06:07 | 显示全部楼层
xyp1964 发表于 2015-2-4 22:50

no function definition: XYP-GRVECS-OSNAP

大师你好,本人新手上面的问题是怎么了?
发表于 2015-6-17 11:01:29 | 显示全部楼层
学习了 继续学
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 21:21 , Processed in 0.198421 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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