简单改了下。
 - (DEFUN C:tt(/ ceco pw a1 b p1 p2 xp1 xp2)
- (SETVAR "cmdecho" 0)
- ;(setq a "xzh");
- (if (= nil a)
- (alert "必须先指定手孔型号,通过“杆路管道”菜单“人手孔…”项设置。")
- );endif
- (setq a1 a)
- (while a1
- (if (or(= a "xzh")(= a "nxzh")(= a "ndanye")(= a "danye"))(setvar "plinewid" 0.6)) ;end if
- (SETQ ceco (GETVAR "cecolor")) ;获取系统变量
- (SETQ pw (GETVAR "plinewid")) ;获取原PLINE线宽
- (SETQ osmo (GETVAR "osmode")) ;获取系统捕捉模式
- (if (= pw 0.6)(command "cecolor" "90"))
- ;;; (IF (= r1 nil) ;r1为保存比例默认值的变量
- ;;; (SETQ r0 (GETREAL "\n输入比例,1:")) ;如果r1为空,输入图形比例
- ;;; (SETQ r0 (GETREAL (STRCAT "\n输入比例 1:<"(RTOS r1 2 0) ">"))) ;如果r1不为空,显示默认值
- ;;; );endif
- ;;; (IF (= nil r0) ;如果用户按回车
- ;;; (setq r0 r1) ;将上次r1保存的r0值还原
- ;;; (setq r1 r0) ;否则,用r1将r0的值保存起来
- ;;; );endif
- (or r1 (setq r1 1));r1如果r1 nil 设=1
- (if (setq r0 (GETREAL (STRCAT "\n输入比例 :<"(RTOS r1 2 0) ">"))) (setq r1 r0));如果输入r0不为nil则使用r1=r0
- (SETQ r (/ r1 1000)) ;计算实际绘图比例
- (SETQ b 0) ;
- (setvar "osmode"64)
- (setq p1 (getpoint "\n指定起始手孔:")) ;
- (while p1
- (WHILE (/= b nil) ;当输入弧度为空时,退出程序
- (SETVAR "osmode" 0)
- (SETQ b (GETANGLE "\n输入角度(按回车退出):" p1))
- (IF (/= b nil) ;如果弧度不为空
- (PROGN
- (SETQ ang (ATOI (ANGTOS b))) ;将弧角度转换为角度
- (SETQ d0 50)
- (WHILE (/= d0 nil) ;当输入距离为0时,退出循环,继续询问角度
- (SETQ d0 (GETREAL "\n输入距离(按回车输入角度):")) ;
- (IF (AND (/= d0 nil) (> d0 0)) ;当距离不为0时
- (PROGN
- (SETQ d (/ d0 r)) ;计算实际插入点R
- (SETQ p2 ( POLAR p1 b d)) ;计算第二手孔插入点
- (COMMAND "insert" a p2 "" "" "") ;插入手孔
- (SETQ xp1( POLAR p1 (ANGLE p1 p2) 2.6)) ;计算管道起点
- (command "ROTATE" (entlast) "" p2 xp1)
- (SETQ xp2( POLAR p2 (ANGLE p2 p1) 2.7)) ;计算管道终点
- (COMMAND "pline" xp1 xp2 "") ;画管道
- ;========================
- (SETQ dis (DISTANCE P1 P2)) ;计算管道中点
- (SETQ pm (POLAR p1 b (/ dis 2))) ;pm为管道中点
- (SETQ tang (REM ang 360)) ;计算标注文字方向(角度)
- (IF (< tang 0 ) ;如果角度是负值
- (SETQ tang ( + 360 tang)) ;转化为正值
- );endif
- (SETQ ta (ANGTOF (RTOS tang))) ;将方向角度转换为弧度
- (IF (AND (> tang 105) (< tang 285)) ;如果标注方向在105 -- 285度之间
- (PROGN ;转换到-90 -- 90度之间
- (SETQ tang (- tang 180))
- (SETQ ta (ANGTOF (RTOS tang)))
- );end of progn
- );endif
- (SETQ pd (POLAR pm (+ 1.5707963 ta) 2.2)) ;计算文字插入点
- (SETQ int_d (ATOI (RTOS d0 2 1)))
- (IF (EQUAL (* d0 10) (* int_d 10))
- (SETQ txt (RTOS d0 2 0)) ;将距离转换为字符串
- (SETQ txt (RTOS d0 2 1))
- );endif
- (COMMAND "text" "J" "M" pd "2" tang txt) ;以中点对齐方式标注距离
- ;=========================
- (SETQ p1 p2) ;将P2点坐标赋予P1,将第二手孔坐标作为下次循环的第一手孔坐标
- );end of progn
- (IF (AND (/= nil d0) (<= d0 0))
- (PROMPT "\n错误!输入的距离小于0,重新输入。")
- );endif
- );endif
- );end while
- );end of progn
- );endif
- );end while
- (SETQ P1 NIL)
- );end while P1
- (SETQ R0 NIL)
- (SETVAR "cecolor" ceco ) ;恢复系统变量
- (SETVAR "plinewid" pw ) ;恢复原PLINE线宽
- (SETVAR "osmode" osmo ) ;恢复系统捕捉模式
- (PROMPT "\n结束管道绘制。")
- (setq a1 nil)
- );end while a
- )
|