明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10739|回复: 18

如何用lisp获取选择圆弧的起,始点,中点,圆心,角度

  [复制链接]
发表于 2009-3-13 10:58:00 | 显示全部楼层 |阅读模式

如何用lisp获取选择圆弧的起,始点,中点,圆心,角度

请高手赐招, 谢谢!!

shine_ks@sohu.com 急切期待!!

发表于 2019-10-8 08:09:49 | 显示全部楼层
留个记号。以后会用到。
发表于 2018-6-12 18:52:23 | 显示全部楼层
谢谢 版主 收藏起来了
发表于 2020-8-6 17:40:04 | 显示全部楼层

无私奉献,值得学习
 楼主| 发表于 2009-3-17 13:13:00 | 显示全部楼层
高手在哪里?
发表于 2009-3-22 09:58:00 | 显示全部楼层
  1. ;一个比较传统的求法
  2. (defun c:test()
  3.    (if (setq ent (car (entsel "\n请选择圆弧:")))
  4.        (if (= (cdr (assoc 0 (setq db (entget ent)))) "ARC")
  5.            (progn
  6.                (setq pc (cdr (assoc 10 db)) ;圆心
  7.        r  (cdr (assoc 40 db)) ;半径
  8.        a0 (cdr (assoc 50 db))
  9.        a1 (cdr (assoc 51 db))
  10.        ps (polar pc a0 r);起点
  11.        pe (polar pc a1 r);止点
  12.        pd (mapcar '* '(0.5 0.5) (mapcar '+ ps pe))
  13.        pm (polar pc (angle pc pd) r);中点
  14.        an (- a1 a0);圆心角
  15.         )
  16.         (if (< an 0) (setq an (+ an (* 2.0 pi))))
  17.         (princ (strcat "\n圆心=" (rtos (car pc) 2 3) "," (rtos (cadr pc) 2 3)))
  18.         (princ (strcat "\n起点=" (rtos (car ps) 2 3) "," (rtos (cadr ps) 2 3)))
  19.         (princ (strcat "\n止点=" (rtos (car pe) 2 3) "," (rtos (cadr pe) 2 3)))
  20.         (princ (strcat "\n中点=" (rtos (car pm) 2 3) "," (rtos (cadr pm) 2 3)))
  21.         (princ (strcat "\n圆心角=" (angtos an 1 6) ))
  22.            )
  23.            (alert "所选取的不是圆弧!")
  24.        )
  25.    )
  26. )
 楼主| 发表于 2009-3-25 16:39:00 | 显示全部楼层

终于见到有人回贴了,非常感谢!!

不过我加载试用了,发现除了角度是正确的,获取的圆弧起,始点,中点,圆心坐标值都不对啊~~

还请高手赐招!!

发表于 2009-3-26 08:12:00 | 显示全部楼层
既然如此,把你的dwg文件发上来以验证程序的提取结果。如果角度是正确的,那就有一种可能,圆弧被平移或旋转过,起、止点,中点,圆心坐标值肯定与标注值不一致。
发表于 2009-3-26 08:26:00 | 显示全部楼层

 楼主| 发表于 2009-3-26 16:39:00 | 显示全部楼层

我在坐标0点处画了任意一个圆弧, 获取值为:

圆心=-41.741,-451.203
起点=-41.741,-553.958
止点=61.014,-451.203
中点=30.918,-523.862
圆心角=90d0'0.00""\n圆心角=90d0'0.00\""

发现只有圆心角是对的,请赐教~~~谢谢!!

本帖子中包含更多资源

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

x
发表于 2009-3-27 08:34:00 | 显示全部楼层
因为在当前视口中定义了一个名为“未命名”的坐标系,其原点坐标为:X=-47.7047,Y=-451.2029,Z=0,这与世界坐标系的原点(X=0,Y=0,Z=0)不相重合,也就是说你那个坐标0点是由世界坐标原点X方向向左移动了47.7047,Y方向向下移动了451.2029,故此提取的坐标不能达到你预期的结果。关于“未命名”坐标系原点的数值,可在命令行中键入“ucsman”,并单击“详细信息(T)”就能看到,如下图:

file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image002.jpg

相应的程序改为如下:
  1. ;一个比较传统的求法
  2. (defun c:test()
  3.     (if (setq ent (car (entsel "\n请选择圆弧:")))
  4.         (if (= (cdr (assoc 0 (setq db (entget ent)))) "ARC")
  5.             (progn
  6.                 (setq pc (cdr (assoc 10 db)) ;圆心
  7.                       r  (cdr (assoc 40 db)) ;半径
  8.                       a0 (cdr (assoc 50 db))
  9.                       a1 (cdr (assoc 51 db))
  10.                       ps (polar pc a0 r);起点
  11.                       pe (polar pc a1 r);止点
  12.                       pd (mapcar '* '(0.5 0.5) (mapcar '+ ps pe))
  13.                       pm (polar pc (angle pc pd) r);中点
  14.                       an (- a1 a0);圆心角
  15.         
  16.                 )
  17.                 (if (< an 0) (setq an (+ an (* 2.0 pi))))
  18.          (if (not (equal '(0 0 0) (setq org (getvar "ucsorg"))))
  19.       (setq pc (mapcar '- pc org)
  20.      ps (mapcar '- ps org)
  21.      pe (mapcar '- pe org)
  22.      pm (mapcar '- pm org)
  23.       )
  24.   )
  25.                 (princ (strcat "\n圆心=" (rtos (car pc) 2 3) "," (rtos (cadr pc) 2 3)))
  26.                 (princ (strcat "\n起点=" (rtos (car ps) 2 3) "," (rtos (cadr ps) 2 3)))
  27.                 (princ (strcat "\n止点=" (rtos (car pe) 2 3) "," (rtos (cadr pe) 2 3)))
  28.                 (princ (strcat "\n中点=" (rtos (car pm) 2 3) "," (rtos (cadr pm) 2 3)))
  29.                 (princ (strcat "\n圆心角=" (angtos an 1 6) ))
  30.             )
  31.             (alert "所选取的不是圆弧!")
  32.         )
  33.     )
  34.     (princ)
  35. )

 楼主| 发表于 2009-3-27 17:57:00 | 显示全部楼层

现在好了,非常感谢yshf!!

另外请教一下,获取圆弧周长的语法怎样写呀?

还有就是,我在做设计的时候经常会花许多时间做零件加工注解,

后来我写一个简单的程序,能够叫出注解图块,可以节省我很多时间.可是觉得不够好,

在修改注解内容的时候仍然需要输入,我希望能够双击注解图块可以出现对话框(附图),这样可以选择性修改,应该更方便些.

由于能力有限,所以在论坛上发贴求对话框的执行程序,可是一直无人回贴.

不知yshf可否帮忙,毕竟需要投入精力去写,所以我可以考虑付费.当然需要先谈好价钱的.呵呵~~

谢谢!!

我的QQ330646545

本帖子中包含更多资源

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

x
 楼主| 发表于 2009-3-27 18:25:00 | 显示全部楼层

附上我的小程序,很俗气的程序~~呵呵~~

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-25 10:07 , Processed in 0.212205 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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