明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1769|回复: 2

如何使用lisp完成下面的设想?

[复制链接]
发表于 2005-4-19 22:28:00 | 显示全部楼层 |阅读模式
请指教,我想做如下一个程序,可以实现这样的功能,比如说最简单的批量绘制圆: 首先选择圆半径,然后选择圆心,就自动画了,使用一个while就可以画无数个,但是如果想换个半径的时候,就需要重新使用这个命令了,我想可不可以再选择圆心的时候可以使用一个字母,调用更改半径的命令? 我这样实现的功能,但是总觉得不满意,那位有更好的办法实现这个功能? (defun c:yuan (/ i j pt r )
(setvar "cmdecho" 0)
(setq i 1)
(while (= i 1)
(setq r (getdist "\n请选择半径长度: "))
(if (/= r nil)
(progn
(setq j 1)
(while (= j 1)
(setq pt (getpoint "\n请选择圆心: "))
(if pt
(command "circle" pt r)
(setq j 0)
)
)
)
(setq i 0)
)
)
(princ)
)
发表于 2005-4-19 23:57:00 | 显示全部楼层
  1. ;| mcir = 灵活定半径画圆---------------by 无痕.2005.4
  2. |;
  3. (defun c:mcir (/ p)  
  4.    (if (not *ms)
  5.        (setq *ms (vla-get-ModelSpace(vla-get-activedocument(vlax-get-acad-object))))
  6.    )
  7.    (while (not *rad)(setq *rad (getdist "\n输入半径:"))) ;;强制初始化半径.
  8.    (while (or(not(mapcar 'princ (list "\n当前半径=" *rad)))
  9.          (initget 128)         (setq p (getpoint "\n R 两点定半径 / 直接输入半径值 / 点取圆心 / <退出>:"))
  10.    )
  11.          (cond
  12.              ((listp p) (vla-addcircle *ms (vlax-3d-point p) *rad))
  13.              ((= "R" (strcase p))(setq *rad (getdist "\n输入半径:")))
  14.              ((> (distof p) 0)(setq *rad (distof p)))
  15.          )
  16.    )(princ)
  17. )
 楼主| 发表于 2005-4-20 23:31:00 | 显示全部楼层
多谢!研究研究先!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 07:24 , Processed in 0.164201 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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