找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 658|回复: 14

[LISP程序]:求圆中心线绘制程序!

[复制链接]
发表于 2003-11-29 10:37:18 | 显示全部楼层 |阅读模式

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

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

×
请高手编写一个圆或圆弧中心线绘制程序,点击圆弧即画出过圆心十字中心线。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-11-30 06:09:39 | 显示全部楼层
请参考下面程序, 可画圆,圆弧及椭圆的中心线.

  1. (defun c:test ()
  2.   (setq ent (entsel "\Nselect Ent(Arc,Circle,Ellipse): "))
  3.   (setq entd (entget (car ent)))
  4.   (setq pc (cdr (assoc 10 entd)))
  5.   (setq d 0.1)
  6.   (cond
  7.     ((= (cdr (assoc 0 entd)) "ARC")
  8.       (setq rad (cdr (assoc 40 entd))
  9.                p1 (polar pc (cdr (assoc 50 entd))(+ rad d))
  10.              p2 (polar pc (angle p1 pc)(+ rad d))))     
  11.     ((= (cdr (assoc 0 entd)) "CIRCLE")
  12.       (setq rad (cdr (assoc 40 entd))
  13.               p1 (polar pc 0 (+ rad d))
  14.              p2 (polar pc pi (+ rad d))))     
  15.     ((= (cdr (assoc 0 entd)) "ELLIPSE")
  16.       (setq px (cdr (assoc 11 entd))
  17.             px (list (+ (car pc)(car px))(+ (cadr pc)(cadr px)) 0)
  18.            rad (distance pc px))
  19.     (setq p1 (polar pc (angle pc px)(+ rad d))
  20.             p2 (polar pc (angle px pc)(+ rad d))
  21.           rad1 (* (cdr (assoc 40 entd)) rad)
  22.             ri (/ (+ rad1 d)(+ rad d))))
  23.   );c
  24.   (if p2 (vl-cmdf "line" p1 p2 ""))
  25.   (setq lline (entlast))
  26.   (vl-cmdf "copy" (entlast) "" pc pc "" "rotate" (entlast) "" pc 90 "")
  27.   (if (= (cdr (assoc 0 entd)) "ELLIPSE")(vl-cmdf "scale" lline "" pc ri ""))
  28. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2003-11-30 12:42:50 | 显示全部楼层
最初由 陌生人 发布
[B]标注里面有 标注圆心
dimcenter [/B]


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

使用道具 举报

已领礼包: 8644个

财富等级: 富甲天下

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

使用道具 举报

发表于 2003-11-30 13:48:38 | 显示全部楼层
最初由 lsjjm 发布
[B]

原问问的是中心线, 不是圆心! [/B]

"圆或圆弧中心线绘制程序,点击圆弧即画出过圆心十字中心线。"
呵呵.还是请楼主确认一下了. cad那个是在圆心标注十字中心线啊?!

看看测试效果
好像test标注圆弧有点问题啊.那个十字交点怎么看也和中心线搭不上边.呵呵
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-1 12:02:15 | 显示全部楼层
最初由 lsjjm 发布
[B]请参考下面程序, 可画圆,圆弧及椭圆的中心线.
[code]
(defun c:test ()
  (setq ent (entsel "\Nselect Ent(Arc,Circle,Ellipse): "))
  (setq entd (entget (car ent)))
  (setq pc (cdr (assoc 10 entd)))
... [/B]


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

使用道具 举报

发表于 2003-12-1 13:00:43 | 显示全部楼层
7楼:这是以前编的一个画矩形中心线的程序, 可能有些繁琐, 但能用, 试试看:
(defun c:test ()
  (setq a (car (entsel)))
  (setq pts (massoc 10 (entget a)))
  (setq pc (inters (car pts)(nth 2 pts)(cadr pts)(last pts)))
  (setq w (distance (car pts)(cadr pts))
        h (distance (car pts)(last pts)))
  (vl-cmdf "line" (polar pc 0 (+ (/ w 2) 0.1))(polar pc pi (+ (/ w 2) 0.1)) "")
  (vl-cmdf "line" (polar pc (/ pi 2)(+ (/ h 2) 0.1))(polar pc (* 1.5 pi)(+ (/ h 2) 0.1)) "")
)
(defun massoc (key alist / nlist)
  (foreach x alist
    (if (eq key (car x))
      (setq nlist (cons (cdr x) nlist))
    )
  )
  (reverse nlist)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2003-12-2 03:09:55 | 显示全部楼层
最初由 陌生人 发布
[B](setq pts (massoc 10 (entget a)))
多了个m这样你以前能用么? [/B]


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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2003-12-2 13:32:48 | 显示全部楼层
你的中心线需要超出圆周多少?
  我帮你做了,就这点不能确定,是用VBA做的。
如果有需要请与我联系:gzy@mjtd.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-2 23:35:43 | 显示全部楼层
晓东工具中连接线段是用lisp编的吗,这段可以个源程序吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-12-4 09:06:51 | 显示全部楼层
最初由 coolzhb 发布
[B]挺好用的,但矩形在平面图内有角度时,中心线就不对了,还得完善一下! [/B]



(vl-cmdf "line" (polar pc 0 (+ (/ w 2) 0.1))(polar pc pi (+ (/ w 2) 0.1)) "")
(vl-cmdf "line" (polar pc (/ pi 2)(+ (/ h 2) 0.1))(polar pc (* 1.5 pi)(+ (/ h 2) 0.1)) "")
改为
  (setq ang (angle (car pts)(cadr pts)))
  (vl-cmdf "line" (polar pc ang (+ (/ w 2) 0.1))
                         (polar pc (- ang pi)(+ (/ w 2) 0.1)) "")
  (vl-cmdf "line" (polar pc (+ ang (/ pi 2))(+ (/ h 2) 0.1))
                         (polar pc (- ang (/ pi 2))(+ (/ h 2) 0.1)) "") 即可.
原程序简化后:
(defun c:test ( / pts)
  (setq a (car (entsel)))
  (foreach i (entget a)(if (= 10 (car i))(setq pts (append pts (list (cdr i))))))
  (setq pc (inters (car pts)(caddr pts)(cadr pts)(last pts)))
  (setq w (distance (car pts)(cadr pts))
           h (distance (car pts)(last pts))
       ang (angle (car pts)(cadr pts)))
  (vl-cmdf "line" (polar pc ang (+ (/ w 2) 0.1))
                         (polar pc (- ang pi)(+ (/ w 2) 0.1)) "")
  (vl-cmdf "line" (polar pc (+ ang (/ pi 2))(+ (/ h 2) 0.1))
                         (polar pc (- ang (/ pi 2))(+ (/ h 2) 0.1)) "")
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-21 02:18 , Processed in 0.276474 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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