找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 812|回复: 2

[编程申请]:圆,弧,椭圆及矩形中心线程序修改申请!

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2007-12-12 11:20:34 | 显示全部楼层 |阅读模式

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

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

×
找到一个可批量画圆,圆弧,椭圆及矩形中心线的程序,感觉写的很简练.自己改了一下,原程序只能将中心线延长2mm,现改成延长10%,但也同时存在一个问题,就是画椭圆中心线和矩形中心线时如果长短轴或长短边比比较大时长中心线太长,能否改成先求出短中心线延伸长度,再将这个长度加上长边及长轴画中心线,这样会更好看些.另外想再加个画两条直线的中心线不知如何加!还请高人指点指点!!!
[PHP]
;; 根据选择对像画中心线
(defun c:rcen()
        (command "_undo" "be")
        (setq sel-set (ssget))
        (setq oldecho (getvar "cmdecho"))
        (setq oldsnap (getvar "osmode"))
        (setq oldlayer (getvar "clayer"))
            (if (= nil (tblsearch"layer" "3"))
                 (command "-layer" "n" "3" "c" "1" "3" "lt" "center2" "3" "")
            )
        (setvar "clayer" "3")
        (setvar "osmode" 0)
        (setq i 0)
        (while (< i (sslength sel-set))
                (setq ent (ssname sel-set i))
                (setq ent-list (entget ent))
                (setq ent-type-str (cdr (assoc 0 ent-list)))
                (if (= ent-type-str "CIRCLE")
                        (progn
                                (setq p-cir-cen (cdr (assoc 10 ent-list)))
                                (setq radius (cdr (assoc 40 ent-list)))
                                (setq p-right-mid (polar p-cir-cen 0 (* radius 1.2)))
                                (setq p-upper (polar p-cir-cen (* 0.5 pi) (* radius 1.2)))
                                (setq p-left-mid (polar p-cir-cen pi (* radius 1.2)))
                                (setq p-down (polar p-cir-cen (* -0.5 pi) (* radius 1.2)))
                                (command "_line" p-left-mid p-right-mid "")
                                (command "_line" p-down p-upper "")
                                )
                        )
                (if (= ent-type-str "ARC")
                        (progn
                                (setq p-arc-cen (cdr (assoc 10 ent-list)))
                                (setq radius (cdr (assoc 40 ent-list)))
                                (setq p-right-mid (polar p-arc-cen 0 (* radius 1.2)))
                                (setq p-upper (polar p-arc-cen (* 0.5 pi) (* radius 1.2)))
                                (setq p-left-mid (polar p-arc-cen pi (* radius 1.2)))
                                (setq p-down (polar p-arc-cen (* -0.5 pi) (* radius 1.2)))
                                (command "_line" p-left-mid p-right-mid "")
                                (command "_line" p-down p-upper "")
                                )
                        )
                (if (= ent-type-str "ELLIPSE")
                        (progn
                                (setq p-el-cen (cdr (assoc 10 ent-list)))
                                (setq half-long-axis-len (distance (list 0 0) (cdr (assoc 11 ent-list))))
                                (setq half-short-axis-len (* (cdr (assoc 40 ent-list)) half-long-axis-len))
                                (setq rot-angle (angle (list 0 0) (cdr (assoc 11 ent-list))))
                                (setq p-right-mid (polar p-el-cen rot-angle (* half-long-axis-len 1.2)))
                                (setq p-upper (polar p-el-cen (+ (* 0.5 pi) rot-angle) (* half-short-axis-len 1.2)))
                                (setq p-left-mid (polar p-el-cen (+ pi rot-angle) (* half-long-axis-len 1.2)))
                                (setq p-down (polar p-el-cen (+ (* 1.5 pi) rot-angle) (* half-short-axis-len 1.2)))
                                (command "_line" p-left-mid p-right-mid "")
                                (command "_line" p-down p-upper "")
                                )
                        )
                (if (and (= ent-type-str "LWPOLYLINE") (= (cdr (assoc 90 ent-list)) 4) (= (cdr (assoc 70 ent-list)) 1))
                        (progn
                                (setq p-down-left (cdr (nth 14 ent-list)))
                                (setq p-down-right (cdr (nth 18 ent-list)))
                                (setq p-upper-right (cdr (nth 22 ent-list)))
                                (setq p-upper-left (cdr (nth 26 ent-list)))
                                (setq rot-ang (angle p-down-left p-down-right))
                                (setq p-mid (polar p-down-left (angle p-down-left p-upper-right) (* 0.5 (distance p-down-left p-upper-right))))
                                (setq p-right-mid (polar p-mid rot-ang (+ (* 0.5 (distance p-down-left p-down-right)) (* 0.1 (distance p-down-left p-down-right)))))
                                (setq p-upper (polar p-mid (+ (* 0.5 pi) rot-ang) (+ (* 0.5 (distance p-down-right p-upper-right)) (* 0.1 (distance p-down-right p-upper-right)))))
                                (setq p-left-mid (polar p-mid (+ pi rot-ang) (+ (* 0.5 (distance p-down-left p-down-right)) (* 0.1 (distance p-down-left p-down-right)))))
                                (setq p-down (polar p-mid (+ (* 1.5 pi) rot-ang) (+ (* 0.5 (distance p-down-right p-upper-right)) (* 0.1 (distance p-down-right p-upper-right)))))
                                (command "_line" p-left-mid p-right-mid "")
                                (command "_line" p-down p-upper "")
                                )
                        )
                (setq i (1+ i))
                )
        (setvar "cmdecho" oldecho)
        (setvar "osmode" oldsnap)
        (setvar "clayer" oldlayer)
        (command "_undo" "e")
        (princ)
        )
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-12-13 08:52:54 | 显示全部楼层

Re: [编程申请]:圆,弧,椭圆及矩形中心线程序修改申请!

最初由 fengjunchina 发布
[B]找到一个可批量画圆,圆弧,椭圆及矩形中心线的程序,感觉写的很简练.自己改了一下,原程序只能将中心线延长2mm,现改成延长10%,但也同时存在一个问题,就是画椭圆中心线和矩形中心线时如果长短轴或长短边比比较大时长中心... [/B]

[PHP]
    (if (= ent-type-str "ELLIPSE")
      (progn
        (setq p-el-cen (cdr (assoc 10 ent-list)))
        (setq half-long-axis-len (distance (list 0 0) (cdr (assoc 11
                                                                  ent-list
                                                           )
                                                      )
                                 )
        )
        (setq half-short-axis-len (* (cdr (assoc 40 ent-list))
                                     half-long-axis-len
                                  )
        )
        (setq rot-angle (angle (list 0 0) (cdr (assoc 11 ent-list))))
        (setq adddist (* half-short-axis-len 0.2))
        (setq p-right-mid (polar p-el-cen rot-angle (+ half-long-axis-len
                                                       adddist
                                                    )
                          )
        )
        (setq p-upper (polar p-el-cen (+ (* 0.5 pi) rot-angle) (+ half-short-axis-len
                                                                  adddist
                                                               )
                      )
        )
        (setq p-left-mid (polar p-el-cen (+ pi rot-angle) (+ half-long-axis-len
                                                             adddist
                                                          )
                         )
        )
        (setq p-down (polar p-el-cen (+ (* 1.5 pi) rot-angle) (+ half-short-axis-len
                                                                 adddist
                                                              )
                     )
        )
        (command "_line" p-left-mid p-right-mid "")
        (command "_line" p-down p-upper "")
      )
    )
    (if (and
          (= ent-type-str "LWPOLYLINE")
          (= (cdr (assoc 90 ent-list)) 4)
          (= (cdr (assoc 70 ent-list)) 1)
        )
      (progn
        (setq p-down-left (cdr (nth 14 ent-list)))
        (setq p-down-right (cdr (nth 18 ent-list)))
        (setq p-upper-right (cdr (nth 22 ent-list)))
        (setq p-upper-left (cdr (nth 26 ent-list)))
        (setq rot-ang (angle p-down-left p-down-right))
        (setq p-mid (polar p-down-left (angle p-down-left p-upper-right)
                           (* 0.5 (distance p-down-left p-upper-right))
                    )
        )
        (setq adddist (* 0.2 (min
                               (distance p-down-left p-down-right)
                               (distance p-down-left p-upper-left)
                             )
                      )
        )
        (setq p-right-mid (polar p-mid rot-ang (+ (* 0.5 (distance p-down-left p-down-right))
                                                  adddist
                                               )
                          )
        )
        (setq p-upper (polar p-mid (+ (* 0.5 pi) rot-ang) (+ (* 0.5
                                                                (distance p-down-right p-upper-right)
                                                             ) adddist
                                                          )
                      )
        )
        (setq p-left-mid (polar p-mid (+ pi rot-ang) (+ (* 0.5
                                                           (distance p-down-left p-down-right)
                                                        ) adddist
                                                     )
                         )
        )
        (setq p-down (polar p-mid (+ (* 1.5 pi) rot-ang) (+ (* 0.5
                                                               (distance p-down-right p-upper-right)
                                                            ) adddist
                                                         )
                     )
        )
        (command "_line" p-left-mid p-right-mid "")
        (command "_line" p-down p-upper "")
      )[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2007-12-13 09:26:51 | 显示全部楼层
感谢二楼大大.已经解决中心线一边长一边短的问题.不知大大有时间再搞搞加个绘制两条直线中心线的程序.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 10:37 , Processed in 0.403132 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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