(defun c:ctd(/ oldOsm oldDia pt1 pt2 *error*)
(defun *error* (msg)
(setvar "CMDECHO" 1)(setvar "OSMODE" oldOsm)
(princ "\nCTD command aborted by user... ")
(princ)
); end of *error*
(if(not ctd:diameter)(setq ctd:diameter 1000.0))
(setq oldOsm(getvar "OSMODE")
oldDia ctd:diameter
ctd:diameter(getdist(strcat "\nDiameter <" (rtos ctd:diameter) ">: ")))
(if(null ctd:diameter)(setq ctd:diameter oldDia))
(setvar "OSMODE" 768)
(if
(and
(setq pt1(getpoint "\nSpecify first tangent point: "))
(setq pt2(getpoint "\nSpecify second tangent point: "))
); end and
(progn
(setvar "CMDECHO" 0)(setvar "OSMODE" 0)
(vl-cmdf "_.circle" "_ttr" pt1 pt2 (/ ctd:diameter 2.0))
(setvar "OSMODE" oldOsm)(setvar "CMDECHO" 1)
); end progn
); end if
(princ)
); end of c:ctd
下一个是谁? 很好的一个ASMI-我考虑将点输入与命令调用分开以避免错误-但我无法解决如何捕捉它。。。。显然768成功了
此外,是否需要使用setenv设置默认值?
768等于“u tan”+“u nea”
我认为是的,但“DIAM”是一个太常见的名称,其他用户(或您)可以在其他程序中重复它。例如,使用“CTD_直径”或类似名称。 好的,阿斯米,谢谢你的解释。非常感谢。 我想是这样吧?
5 您使用“最近的对象捕捉”的想法与其他人使用的想法相同。谢谢大卫。
嗯,正如往常一样,ASMI的代码工作得很神奇。谢谢还有更多。我敢打赌!
当然,李的代码也起作用了。
给我一些时间使用代码并向您报告。 很好,托茨基,谢谢你的夸奖。
希望你一切顺利。 下面是到目前为止这个LISP的发展。
我的问题是:是否可以强制Autocad始终显示切线自动捕捉标记?
您可以在OSMODE变量值中包含256,但最近的标记比所有其他标记具有优先级。
您可以使用INITGET函数限制零和负用户输入。它适用于(initget…)之后的第一个(get…函数)只有
(defun c:ctd(/oldOsm oldDia pt1 pt2*error*)(defun*error*(msg)(setvar“CMDECHO”1)(setvar“OSMODE”oldOsm)(警报“ctd命令正在中止…\n\n单击“确定”或按ENTER继续。”)(princ“\nCTD命令被用户中止…”(普林斯));结束*错误*(if(非ctd:直径)(setq ctd:直径10.0))(initget 6)(setq oldOsm(getvar“OSMODE”)oldDia ctd:直径ctd:直径(getdist(strcat”\n直径:)(if(null ctd:直径)(setq ctd:直径oldDia));;;(如果( 我已经用initget 6对您的代码进行了初始测试,这解决了用户输入小于或等于零的问题。
自动捕捉标记的问题仍然存在。我想我只能接受这个了。
女士们,先生们,请出示圆直径谭谭命令。
Cadtutor版本1!
页:
1
[2]