[讨论]关于倒角命令调用的限制!
<p>;;;=========================================<br/>;;功能:对系统提供的 圆角 命令的改进 (框选) <br/>;;日期:zml84 于 2007-08-14 21:10 <br/>(defun C:FF (/ *ERROR* *MYERR* CMD_OLD OS_OLD *OLDERR*<br/> TEST0 TEST TMP TMP2 INT PT1 PT2<br/> SS A B<br/> )<br/> (princ "\n★★超级圆角★★")<br/> ;;============================<br/> (defun *MYERR* (MSG)<br/> (setvar "CMDECHO" CMD_OLD)<br/> (setvar "OSMODE" OS_OLD)<br/> (setq *ERROR* *OLDERR*)<br/> (if (= MSG "完美退出。谢谢使用。")<br/> (princ (strcat "\n>>>" MSG))<br/> (princ "\n>>>虽然中途退出了,对象捕捉已经被恢复。")<br/> )<br/> (princ)<br/> )<br/> (setq *OLDERR* *ERROR*<br/> *ERROR* *MYERR*<br/> OS_OLD (getvar "OSMODE")<br/> CMD_OLD (getvar "CMDECHO")<br/> )<br/> ;;==============================<br/> ;;1、系统变量设置<br/> (setvar "OSMODE" 0)<br/> (setvar "CMDECHO" 0)<br/> ;;显示选项当前值<br/> (princ<br/> (strcat<br/> "\n当前设置: 模式 = "<br/> (nth (getvar "TRIMMODE") '("不修剪" "修剪"))<br/> ",半径 = "<br/> (rtos (getvar "FILLETRAD") 2 4)<br/> )<br/> )<br/> ;;2、循环连续执行<br/> (setq TEST0 t)<br/> (while TEST0<br/> ;;初始化<br/> (setq A NIL<br/> B NIL<br/> )<br/> ;;2.1、选择对象1<br/> (princ "\n选择对象或 [多段线(P)/半径(R)/修剪(T)]: ")<br/> (setq TEST t)<br/> (while TEST<br/> (setq TMP (grread t 4 2))<br/> (cond<br/> ;;按下键盘键<br/> ((= (car TMP) 2)<br/> (setq INT (cadr TMP))<br/> (cond<br/> ;;回车或者空格键,则退出<br/> ((or (= INT 13)<br/> (= INT 32)<br/> )<br/> (setq TEST NIL<br/> TEST0 NIL<br/> )<br/> )<br/> ;;P选项<br/> ((or (= (ascii "P") INT)<br/> (= (ascii "p") INT)<br/> )<br/> (if (and (setq SS (entsel " >>选择二维多段线: "))<br/> (= (cdr (assoc 0 (entget (car SS))))<br/> "LWPOLYLINE"<br/> )<br/> )<br/> (command "_.fillet" "P" SS)<br/> )<br/> )<br/> ;;R选项<br/> ((or (= (ascii "R") INT)<br/> (= (ascii "r") INT)<br/> )<br/> (princ (strcat "\n>>指定圆角半径 <"<br/> (rtos (getvar "FILLETRAD") 2 2)<br/> ">: "<br/> )<br/> )<br/> (if (setq TMP2 (getdist))<br/> (setvar "FILLETRAD" TMP2)<br/> )<br/> )<br/> ;;T选项<br/> ((or (= (ascii "T") INT)<br/> (= (ascii "t") INT)<br/> )<br/> (initget "T N")<br/> (setq TMP2<br/> (getkword<br/> (strcat<br/> "\n>>输入修剪模式选项 [修剪(T)/不修剪(N)] <"<br/> (nth (getvar "TRIMMODE")<br/> '("不修剪" "修剪")<br/> )<br/> ">: "<br/> )<br/> )<br/> )<br/> (if (= TMP2 "T")<br/> (setvar "TRIMMODE" 1)<br/> (if (= TMP2 "N")<br/> (setvar "TRIMMODE" 0)<br/> )<br/> )<br/> )<br/> )<br/> (princ "\n选择对象或 [多段线(P)/半径(R)/修剪(T)]: ")<br/> )<br/> ;;击鼠标右键<br/> ((= (car TMP) 12)<br/> (setq TEST NIL<br/> TEST0 NIL<br/> )<br/> )<br/> ;;击左键<br/> ((= (car TMP) 3)<br/> (setq PT1 (cadr TMP))<br/> (if (setq SS (ssget PT1))<br/> (setq A (list (ssname SS 0) PT1)<br/> TEST NIL<br/> )<br/> (if (and<br/> (setq PT2 (getcorner PT1 " >>>第二点:"))<br/> (setq SS (ssget "c" PT1 PT2))<br/> )<br/> (progn<br/> (setq A (list (ssname SS 0) (MID PT1 PT2))<br/> TEST NIL<br/> )<br/> (if (>= (sslength SS) 2)<br/> (setq B (list (ssname SS 1)<br/> (MID PT1 PT2)<br/> )<br/> )<br/> )<br/> )<br/> (princ<br/> "\n选择对象或 [多段线(P)/半径(R)/修剪(T)]: "<br/> )<br/> )<br/> )<br/> )<br/> ) ;_ 结束 cond<br/> ) ;_ 结束 while<br/> (if (and A<br/> (not (redraw (car A) 3))<br/> (= B NIL)<br/> )<br/> (progn<br/> ;;2.2、选择对象2<br/> (princ "\n选择对象:")<br/> (setq TEST t)<br/> (while TEST<br/> (setq TMP (grread t 4 2))<br/> ;;(if (setq PT1 (getpoint "\n选择对象:"))<br/> (cond<br/> ;;击左键<br/> ((= (car TMP) 3)<br/> (setq PT1 (cadr TMP))<br/> (if (setq SS (ssget PT1))<br/> (setq B (list (ssname SS 0) PT1)<br/> TEST NIL<br/> )<br/> (if (and<br/> (setq<br/> PT2 (getcorner PT1<br/> " >>>第二点:"<br/> )<br/> )<br/> (setq SS (ssget "c" PT1 PT2))<br/> )<br/> (setq B (list (ssname SS 0)<br/> (MID PT1 PT2)<br/> )<br/> TEST NIL<br/> )<br/> (princ "\n选择对象:")<br/> )<br/> )<br/> )<br/> ;;击右键<br/> ((= (car TMP) 12)<br/> (setq TEST NIL)<br/> )<br/> ) ;_结束 cond<br/> )<br/> )<br/> ) ;_结束 if<br/> ;;圆角操作<br/> (if (and A B)<br/> (command "_.fillet" A B)<br/> )<br/> (if A<br/> (redraw (car A) 4)<br/> )<br/> )<br/> ;;3、恢复系统变量设置<br/> ;;============<br/> (*ERROR* "完美退出。谢谢使用。")<br/> ;;============<br/> (princ)<br/>) ;_结束 defun<br/>;;;=========================================</p><p>由ZML84同志编写的超级圆角LISP,实现框选圆角,可对单个PL线,REC矩形,PL线与L线,L线实现圆角。程序编排十分完美!但与CAD本身命令相比!无法对两条PL线圆角! 经高手鉴定,此原因是:(command "_fillet" (entsel "\n第一个对象:")(entsel "\n第二个对象:")只能选择一条PL线,无法选择第二条PL线! 难道真存在CAD限制吗?</p> <p>(command "_fillet" (getpoint) (getpoint))</p><p>你哪儿请的高手?</p> <p>呵呵! 我只是看这个程序做的不错! 但是确实无法对PLINE线与PLINE线之间倒角!并且还不能右键输入!</p><p>必须FF加空格输入!如果可以修正这两个缺点!那这个程序确实比CAD本身的命令要好用很多!</p><p>请高手试着修正下下!</p>
页:
[1]