找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2991|回复: 19

[编程申请] 求一个能做出剖切标记的lisp,过程步骤思路见下面!

[复制链接]
发表于 2013-5-1 17:17:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
file:///C:/Documents%20and%20Settings/wjlib/Application%20Data/Tencent/Users/561523794/QQ/WinTemp/RichOle/]7@_LE%7B1%7D]~Q%25]NL5_qLA.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-5-3 23:16:13 | 显示全部楼层
[pcode=lisp,true]
;剖切箭头、文字大小与标注全局比例关联
(defun c:pq ()
  (VL-LOAD-COM)
  (setq osm (getvar"osmode")
        dim(getvar"dimscale")
        )
  (setq dlb nil)
  (setq zf(strcase(getstring "\n输入剖切符号:"))
        pt(getpoint"\n指定剖切点:")
        )
  (command "pline" pt)
  (while (= 1 (getvar "cmdactive"))
    (command pause)
    )
  (setvar "osmode" 31743)
  (setq dlb(delys (MASSOC 10 (entget (entlast)))))
  (setq pt(getpoint pt"\n指定剖切方向:"))
  (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
  (command "_offset" (* dim 5) (entlast) pt"")
  (setq pl(entlast))
  (setq sd(vlax-curve-getStartPoint pl)
        pt1(polar sd (angle sd (NTH 0 dlb)) (* 2.5 dim))
        pt2(polar (NTH 0 dlb) (angle (NTH 0 dlb)(NTH 1 dlb)) dim)
        )
  (setq md(vlax-curve-getendPoint pl)
        pt3(polar md (angle md (NTH (-(LENGTH dlb)1) dlb)) (* 2.5 dim))
        pt4(polar (NTH (-(LENGTH dlb)1)dlb) (angle (NTH (-(LENGTH dlb)1)dlb)(NTH (-(LENGTH dlb)2)dlb)) dim)
        )
  (setq pta(polar sd (angle pt1 sd) (* 4 dim))
        ptb(polar md (angle pt3 md) (* 4 dim))
        )
  (command "pline" sd "w" 0 (* 0.8 dim) pt1  "w" (* 0.3 dim) (* 0.3 dim) (NTH 0 dlb)pt2 "w" 0 0"")
  (vla-put-Color (vlax-ename->vla-object (entlast)) 5)
  (command "pline" md "w" 0 (* 0.8 dim) pt3  "w" (* 0.3 dim) (* 0.3 dim)  (NTH (-(LENGTH dlb)1) dlb)pt4 "w" 0 0"")
  (vla-put-Color (vlax-ename->vla-object (entlast)) 5)
  (entdel pl)
  (setq n 1)
  (REPEAT (- (LENGTH dlb)2)
    (setq pt1(polar (NTH n dlb) (angle (NTH n dlb)(NTH (- n 1)dlb)) dim)
          pt2(polar (NTH n dlb) (angle (NTH n dlb)(NTH (+ n 1)dlb)) dim)
          )
    (command "pline" pt1 "w" (* 0.3 dim) (* 0.3 dim) (NTH n dlb)pt2 "w" 0 0"")
    (vla-put-Color (vlax-ename->vla-object (entlast)) 5)
    (SETQ n(1+ n))
    )
  (command"_text" "j" "mc"pta (* 4 dim) 0 zf"")
  (command"_text" "j" "mc" ptb (* 4 dim) 0 zf"")
  (setvar "osmode" osm)
  )

(defun massoc (key alist / x nlist);函数来自于论坛
  (foreach x alist
    (if (eq key (car x))
      (setq nlist (cons (cdr x) nlist))
      )
    )
  (reverse nlist)
  );
;删除列表中的相同元素
(defun delys (Lst / LstNew);函数来自于论坛
  (foreach _LstItem Lst
    (if (not (member _LstItem LstNew))
      (setq LstNew (append LstNew (list _LstItem)))
      )
    )
  LstNew
  )
[/pcode]

点评

点支持,结果点到反对上了,管理员可否清理掉---反对?  发表于 2013-5-15 10:30
写的真的不错,1.剖切符号文字的高度可否变为有用户输入,或者选择文字获取高度;2.最后没有做出剖视文字,比如SEC LK-LK.可否在增加这个  发表于 2013-5-4 19:44

评分

参与人数 1D豆 +10 贡献 +1 收起 理由
XDSoft + 10 + 1 指点奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2013-5-1 17:19:23 | 显示全部楼层
过程步骤思路见下面!
11.JPG
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-1 17:58:14 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-2 20:09:21 | 显示全部楼层
真的没有,希望高手们帮忙写一个,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-2 22:33:36 | 显示全部楼层
剖切文字还没有写进去 不知道是不是你想要的
8.gif

点评

为什么会出现这样提示 指定下一点或 [圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W)]: 命令: ; 错误: 参数类型错误: 二维/三维点: nil  发表于 2013-5-3 19:46

评分

参与人数 1D豆 +10 贡献 +1 收起 理由
XDSoft + 10 + 1 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-3 00:13:14 | 显示全部楼层
xiahwan 发表于 2013-5-2 22:33
剖切文字还没有写进去 不知道是不是你想要的

代码贴到论坛吧,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-3 17:36:43 | 显示全部楼层
比较有意思的一个绘制,写了一小半,回退处理不完善,没有绘制两端箭头和文字
[pcode=lisp,true](defun c:tt (/ pt->2d addpline setwid)
  (defun pt->2d        (p)
    (list (car p) (cadr p))
  )
  (defun mkvar (pts)
    (vlax-make-variant
      (vlax-safearray-fill
        (vlax-make-safearray
          vlax-vbdouble
          (cons 0 (1- (length pts)))
        )
        pts
      )
    )
  )
  (defun addpl (pts)
    (vla-addlightweightpolyline
      ms
      (mkvar (apply 'append (mapcar 'pt->2d pts)))
    )
  )
  (defun chpline (obj pts /)
    (vla-put-coordinates
      obj
      (mkvar (apply 'append (mapcar 'pt->2d pts)))
    )
  )
  (defun setwid        (obj pts / n m)
    (setq n (fix (/ (length pts) 3))
          m 1
    )
    (repeat n
      (vla-setwidth obj m 1. 1.)
      (vla-setwidth obj (1+ m) 1. 1.)
      (setq m (+ m 3))
    )
  )
  ;;Mail
  (setq        doc (vla-get-activedocument (vlax-get-acad-object))
        ms  (vla-get-modelspace doc)
  )
  (vl-catch-all-apply
    (function
      (lambda (/ p p1 ptl pl p2 p3 p4 p5)
        (if (setq p (getpoint "\nFirst Point: "))
          (progn
            (setq ptl (cons p ptl))
            (while
              (progn
                (initget 128 "U")
                (setq p1 (getpoint p "\nNext Point[U - Exit]<exit>: "))
              )
               (if (listp p1)
                 (setq ptl (cons p1 ptl))
                 (setq ptl (cddddr ptl))
               )
               (if (> (length ptl) 1)
                 (progn
                   (if pl
                     (progn
                       (setq p2         (car ptl)
                             p3         (cadr ptl)
                             ptl (cddr ptl)
                       )
                       (setq p4        (polar p3 (angle p3 (car ptl)) 3.)
                             p5        (polar p3 (angle p3 p2) 3.)
                       )
                       (setq ptl (append (list p2 p5 p3 p4) ptl))
                       (chpline pl (reverse ptl))
                       ;;Setwid
                       (setwid pl (reverse ptl))
                     )
                     (setq pl (addpl (reverse ptl)))
                   )
                 )
               )
               (setq p (car ptl))
            )
          )
        )
      )
    )
  )
  (vlax-release-object doc)
  (vlax-release-object ms)
  (princ)
)[/pcode]

评分

参与人数 1D豆 +10 贡献 +1 收起 理由
XDSoft + 10 + 1 技术引导讨论和指点奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-4 08:48:22 | 显示全部楼层
继续第二步,完成绘制、回退及出错处理
[pcode=lisp,true](defun c:tt (/ pt->2d addpline setwid pl setptl)
  ;;Convert 3D point to 2D point
  (defun pt->2d        (p)
    (list (car p) (cadr p))
  )
  ;;Variant Pts
  (defun mkvar (pts)
    (vlax-make-variant
      (vlax-safearray-fill
        (vlax-make-safearray
          vlax-vbdouble
          (cons 0 (1- (length pts)))
        )
        pts
      )
    )
  )
  ;;mod - t Add index ; nil - delete
  (defun setptl        (p ptl mod le / l a b c d)
    (if        p
      (setq ptl (cons p ptl))
    )
    (setq l (length ptl))
    (if        mod
      (if (> l 2)
        (progn
          (setq        a   (car ptl)
                b   (cadr ptl)
                ptl (cddr ptl)
          )
          (setq        c (polar b (angle b (car ptl)) le)
                d (polar b (angle b a) le)
          )
          (setq ptl (append (list a d b c) ptl))
        )
        ptl
      )
      (if (< l 3)
        nil
        (setq ptl (cons (caddr ptl) (cddddr ptl)))
      )
    )
  )
  ;;Add Lwpolyline in Modelspace
  (defun addpl (pts)
    (vla-addlightweightpolyline
      ms
      (mkvar (apply 'append (mapcar 'pt->2d pts)))
    )
  )
  ;;Reset Pline Coordinates
  (defun chpline (obj pts /)
    (vla-put-coordinates
      obj
      (mkvar (apply 'append (mapcar 'pt->2d pts)))
    )
  )
  ;;Change Width of SegentIndex
  (defun setwid        (obj pts w / n m)
    (setq n (fix (/ (length pts) 3))
          m 1
    )
    (repeat n
      (vla-setwidth obj m w w)
      (vla-setwidth obj (1+ m) w w)
      (setq m (+ m 3))
    )
  )
  ;;Mail
  (setq        doc (vla-get-activedocument (vlax-get-acad-object))
        ms  (vla-get-modelspace doc)
  )
  (if (vl-catch-all-error-p
        (vl-catch-all-apply
          (function
            (lambda (/ scl widl widw p p1 ptl )
              (setq scl         (getvar "dimscale")
                    widl (* 6 scl)
                    widw (* 0.3 scl)
              )
              (if (setq p (getpoint "\nFirst Point: "))
                (progn
                  (setq ptl (cons p ptl))
                  (while
                    (progn
                      (initget 128 "U")
                      (setq p1
                             (getpoint p "\nNext Point[U - Exit]<exit>: ")
                      )
                    )
                     (if (listp p1)
                       (setq ptl (setptl p1 ptl t widl)) ;_Add point
                       (setq ptl (setptl nil ptl nil widl)) ;_U
                     )
                     (if pl
                       (if ptl
                         (progn
                           (chpline pl (reverse ptl)) ;_reset coordinates
                           (setwid pl (reverse ptl) widw) ;_Setwid
                         )
                         (progn
                           (vl-catch-all-apply 'vla-delete (list pl))
                           (setq pl nil)
                           (if (not (listp p1))
                             (princ "\nAll is Undo!")
                           )
                         )
                       )
                       (setq pl (addpl (reverse ptl))) ;_Initialize Pline
                     )
                     (setq p (car ptl)) ;_reset startpoint
                  )
                )
              )
            )
          )
        )
      )
    (vl-catch-all-apply 'vla-delete (list pl)) ;_ Cancel will delete Pline
  )
  (vlax-release-object doc)
  (vlax-release-object ms)
  (princ)
)[/pcode]

点评

程序好像做不出我那样的效果图  发表于 2013-5-7 21:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-15 10:33:07 | 显示全部楼层
期待第三步,完成箭头和文字标识{:soso_e179:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-15 17:49:04 | 显示全部楼层
冰心 发表于 2013-5-15 10:33
期待第三步,完成箭头和文字标识

后面你接力了,写这个程序感兴趣的是实时绘制Pline并可以回退,包括 Coordinates 的修改技巧,后面就是用 Grread 控制箭头方向,这个箭头可以是单独生成的 Pline
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-23 21:29:25 | 显示全部楼层
Free-Lancer 发表于 2013-5-15 17:49
后面你接力了,写这个程序感兴趣的是实时绘制Pline并可以回退,包括 Coordinates 的修改技巧,后面就是用 ...

刚看到,几天没上来了。还是大师出手吧,我很少用vl、vla、vlax。。。。类函数,没有好好学习过,:(
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-23 22:09:16 | 显示全部楼层
冰心 发表于 2013-5-23 21:29
刚看到,几天没上来了。还是大师出手吧,我很少用vl、vla、vlax。。。。类函数,没有好好学习过,

尝试下用下就好了,没啥难的,就是多看代码,多写,几个程序就熟练了,VL函数确实强。编程思路也靠面向对象的方向去了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-7 22:45:37 | 显示全部楼层
剖切号-拐弯.gif

点评

院长,最后生成的是个组? 还是块了?  详情 回复 发表于 2013-6-7 23:34
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2013-6-7 23:34:55 | 显示全部楼层

院长,最后生成的是个组? 还是块了?

点评

群组  发表于 2013-6-8 13:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 06:38 , Processed in 0.401580 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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