找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1328|回复: 5

[原创]:画矩形中心线LISP

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2007-12-7 21:31:53 | 显示全部楼层 |阅读模式

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

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

×
非常不成熟的,谁帮我改改!让它能一次绘制出矩形中心线!!!


[PHP]
;Locked by  China. 2005-2006 第二版
(defun C:rcen ( / rr rr0 rr1 rr2 rr3 rr4 a b le se f g h i j zz)
(princ "\n欢迎使用矩形中心线制程序第二版!")
  (setq oldecho (getvar "cmdecho"))
  (setq oldsnap (getvar "osmode"))
(setvar "osmode" 1)
(setq rr1 (getpoint "\n第一点:")) ;选择一个图元
(setq rr2 (getpoint "\n第二点(第一点的对角点):"))
(setq rr3 (getpoint "\n第三点(第二点最近的一个点):"))
(setq rr4 (getpoint "\n第四点(第二点的对角点):"))
(setq jd (inters rr1 rr2 rr3 rr4))
(setq rr (getpoint "\n伸出矩形外长度第一点:"))
(setq rr0 (getpoint "\n伸出矩形外长度第二点:"))
(setq zz (distance rr rr0))
(setq a1 (angle rr1 rr3))
(setq a2 (angle rr1 rr4))
(setq a (distance rr1 rr3))
(setq b (distance rr1 rr4))
(setq le (+ (/ (max a b) 2) zz))
(setq se (+ (/ (min a b) 2) zz))
(setq g (polar jd a1 le))
(setq h (polar jd a1 (- le)))
(setq i (polar jd a2 se))
(setq j (polar jd a2 (- se)))
  (setq oldlayer (getvar "clayer"))
(if (= nil (tblsearch"layer" "3"))

(command "-layer" "n" "3" "c" "1" "3" "lt" "center2" "3" "")

)
  (setvar "clayer" "3")

(command "line" g h "")
(command "line" i j "")
;(setq rr nil rr0 nil rr1 nil rr2 nil rr3 nil rr4 nil a nil b nil le nil se nil f nil g nil h nil i nil j nil zz nil)
(princ "\n已经为你画完矩形的中心线,谢谢使用!")
  (setvar "cmdecho" oldecho)
  (setvar "osmode" oldsnap)
  (setvar "clayer" oldlayer)
(princ)
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-12-9 15:21:26 | 显示全部楼层
看看dxf部分,应该是选择一条(矩形)的pl线,
判断是否矩形(比如四个顶点,相邻垂直之类)
然后就根据边线的方向、长度自动画上中心线。

如果是用line形成的矩形,一种可以用头尾搜索找到边,
一种就是你这样。

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

使用道具 举报

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

使用道具 举报

发表于 2007-12-12 10:43:01 | 显示全部楼层
手痒,写了一个。。。也请高手们修改修改。。。

  1. ;;;通用函数 carrot1983.2007-12-12
  2. (vl-load-com)
  3. ;;ss->elst选择集->图元表
  4. (defun ss->elst        (ss / elst)
  5.   (setq i 0)
  6.   (repeat (sslength ss)
  7.     (setq elst (cons (ssname ss i) elst)
  8.           i    (1+ i)
  9.     )
  10.   )
  11.   (reverse elst)
  12. )

  13. ;;;按顺序取得曲线的点
  14. (defun jw-get-plst (E / I O PLST)
  15.   (setq        o    (vlax-ename->vla-object e)
  16.         i    1
  17.         plst nil
  18.   )
  19.   (repeat 100
  20.     (if        (and o (setq p (vlax-curve-getPointAtParam o i)))
  21.       (setq plst (cons p plst)
  22.             i         (1+ i)
  23.       )
  24.       (setq o nil)
  25.     )
  26.   )
  27.   plst
  28. )

  29. ;;;写线jw-make-line
  30. (defun jw-make-line (v10 v11)
  31.   (entmake (list (cons 0 "LINE")
  32.                  (cons 6 "BYLAYER")
  33.                  (cons 8 "0")
  34.                  (cons 10 v10)
  35.                  (cons 11 v11)
  36.                  (cons 39 0.0)
  37.                  (cons 62 256)
  38.                  (cons 210 (list 0.0 0.0 1.0))
  39.            )
  40.   )
  41. )

  42. ;;;中点jw-mid-p
  43. (defun jw-mid-p        (a b)
  44.   (mapcar
  45.     '(lambda (a b) (/ (+ a b) 2))
  46.     a
  47.     b
  48.   )
  49. )

  50. ;;;中点表jw-mid-plst
  51. (defun jw-mid-plst (E DIS / ANG13 ANG24 DIS1 DIS2 P1 P2 P3 P4 PLST)
  52.   (setq plst (jw-get-plst e))
  53.   (setq        p1 (mid-p (nth 0 plst) (nth 1 plst))
  54.         p2 (mid-p (nth 1 plst) (nth 2 plst))
  55.         p3 (mid-p (nth 2 plst) (nth 3 plst))
  56.         p4 (mid-p (nth 3 plst) (nth 0 plst))
  57.   )
  58.   (setq        ang13 (angle p1 p3)
  59.         ang24 (angle p2 p4)
  60.   )
  61.   (setq        dis1 dis
  62.         dis2 dis
  63.   )
  64.   (setq        p1 (polar p1 (+ ang13 pi) dis1)
  65.         p2 (polar p2 (+ ang24 pi) dis2)
  66.         p3 (polar p3 ang13 dis1)
  67.         p4 (polar p4 ang24 dis2)
  68.   )
  69.   (setq plst (list p1 p2 p3 p4))
  70. )


  71. ;;;主程序:tt画矩形中心线carrot1983.2007-12-12
  72. (defun c:tt (/ ELST SS D E I PLST)
  73.   (if (setq ss (ssget '((0 . "*POLYLINE"))))
  74.     (progn
  75.       (setq elst (ss->elst ss))
  76.       (if (setq d (getdist "\n指定伸出矩形外长度<100>"))
  77.         d
  78.         (setq d 100)
  79.       )
  80.       (foreach e elst
  81.         (setq plst (jw-mid-plst e d))
  82.         (jw-make-line (nth 0 plst) (nth 2 plst))
  83.         (jw-make-line (nth 1 plst) (nth 3 plst))
  84.       )
  85.     )
  86.     (alert "\n请重新选择!")
  87.   )
  88.   (princ)
  89. )

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

使用道具 举报

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

使用道具 举报

发表于 2007-12-19 09:01:10 | 显示全部楼层
最初由 lvbaoqi 发布
[B]绘制出矩形中心线干什么用啊,为什么要绘制出矩形中心线 [/B]

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 16:22 , Processed in 0.277072 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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