明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1928|回复: 6

[提问] 提取圆弧圆心坐标和半径

[复制链接]
发表于 2019-7-30 15:55:53 | 显示全部楼层 |阅读模式
我用Visual LISP编写了提取多段圆弧(有些圆弧根据需要会重复点选)的圆心坐标和半径的程序,在AutoCAD2010与AutoCAD2013版本中均可正确运行,但在中望CAD2018中无法运行,只能提取出第一段圆弧的信息。程序如下:
(defun c:ccr (/ fc sa i sa_name sa_data 10_list 40_list x y r)
  (setvar "cmdecho" 0)                         ;抑制AutoCAD普通命令的提示
  (command "undo" "be")
  (command "units" "2" "4" "" "" "" "")   ;设置绘图的长度和角度单位
  (setq fc (open "d:/模型/圆弧圆心坐标和半径.txt" "w"))
  (princ "\n请按顺序点选圆弧:")
  (setq sa (ssget ":D"))                         ;取得一个选择集
  (setq i 0)                                                 ;序号的初值为0
  (repeat (sslength sa)                         ;计算选择个数,确定循环次数
    (setq sa_name (ssname sa i))                 ;返回指定的选择集中由序号指定的那个图元名
    (setq sa_data (entget sa_name))         ;得到这个对象的图元表
    (setq 10_list (assoc 10 sa_data))         ;取出圆心坐标所在表
    (setq 40_list (assoc 40 sa_data))         ;取出圆半径所在表
    (setq x (rtos (nth 1 10_list)))                 ;取出圆心x坐标
    (setq y (rtos (nth 2 10_list)))                 ;取出圆心y坐标
    (setq r (rtos (cdr 40_list)))                 ;取出圆弧半径
    (princ x fc)
    (princ "\t" fc)
    (princ y fc)
    (princ "\t" fc)
    (princ r fc)
    (princ "\n" fc)
    (setq i (1+ i))
  )
  (close fc)
  (princ "\n完成!")
  (command "undo" "e")
  (princ)
)
(princ "\n提示:输入 ccr 命令来运行本程序!")
(princ)

注:运行前需在d盘建立“模型”文件夹。
我如果将第3、4行注释掉,则在中望CAD中可点选取得不同段圆弧的信息,但是不能重复选择同一段圆弧。我也分别提取了AutoCAD与中望CAD加载程序前后的所有系统变量,进行比较。但是由于我是初学者,所以还是没解决问题。
希望各位前辈帮忙看看,感激不尽!


 楼主| 发表于 2019-7-30 15:57:35 | 显示全部楼层
笑脸是冒号和D,好像是重复选择集的意思。
发表于 2019-7-30 18:53:26 | 显示全部楼层
  1. (mapcar '(lambda(x) (list (dxf-get x 10)(dxf-get x 40)))(ss2en (ssget)))
 楼主| 发表于 2019-7-31 15:14:17 | 显示全部楼层

首先十分感谢您的回复。但是我用这句程序无法运行,另外这里面ss2en的意思我没弄明白,您可以说明一下吗?

点评

意思是选择集转图元名表  发表于 2019-7-31 15:53
发表于 2019-7-31 16:13:57 | 显示全部楼层
  1. (defun ss2en (ss / i xna)
  2.   (setq i -1)
  3.   (while (setq xna (ssname ss (setq i (1+ i))))
  4.     (setq lst (cons xna lst))
  5.   )
  6.   lst
  7. )
  8. (defun dxf-get (en code)
  9.   (cdr (assoc code (entget en)))
  10. )

 楼主| 发表于 2019-7-31 16:46:14 | 显示全部楼层

嗯嗯,了解了,谢谢。但是我在运行程序时提示  错误: no function definition: SS2EN,这是因为我CAD装的不全还是什么原因呢?另外从提示来看,它应该没有计入重复选择的圆弧(对于有的圆弧我需要重复选择提取其信息)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 15:30 , Processed in 0.171317 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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