;; xkwt(虾壳弯头) (defun c:xkwt () (cmdla0) (setvar "AUTOSNAP" 47) ;打开极轴 (setvar "osmode" 15359) ;恢复对象捕捉 (defun aaa () (xyp-Dcl-Gettile '("k1" "k2" "k3")) (cond ((= k3 "1") (mode_tile "po1" 1) (mode_tile "po2" 1) ) ((= k3 "0") (mode_tile "po1" 0) (mode_tile "po2" 0) (ap01) ) ) ) (xyp-initSet '(k1 k2 k3 k4 dw r v n bz) '("1" "0" "0" "0" 1000.0 1000.0 45.0 3 "0") ) (setq Ilst '((nil nil ":column{") (nil nil ":row{") ("k0" nil "imagebutton" "-2" "34" "AIONIC" "(XYP-ABOUTME)") (nil nil "spacer_1;") (nil nil ":column{label=\"绘图数据\";") ("dw" "虾壳弯管外径" "real" "8") ("r" "虾接弯曲半径" "real" "8") ("v" "虾接弯角角度" "real" "8") ("n" "虾接切分数量" "int" "8") ("pick" "(原点绘图)/拾取>>" "button" "(aaa)") ("bz" "标注" "bool") (nil nil "}") (nil nil "}") (nil nil ":boxed_radio_row{label=\"位置\";") ("k1" "左上" "radio" "(aaa)") ("k2" "右上" "radio" "(aaa)") ("k3" "右下" "radio" "(aaa)") ("k4" "左下" "radio" "(aaa)") (nil nil "}") (nil nil "}") (nil nil "user" "(aaa)") ) ) (if (= (xyp-Dcl-Init Ilst "【绘制虾壳弯头程序:M6】" t) 1) (cal_draw) ) (cmdla1) ) (defun aaa () (cond ((= k1 "1") (xyp-show-sld "k0" "htfx0")) ((= k2 "1") (xyp-show-sld "k0" "htfx90")) ((= k3 "1") (xyp-show-sld "k0" "htfx180")) ((= k4 "1") (xyp-show-sld "k0" "htfx270")) ) ) ;; 标注尺寸 (defun bzcc () (command "_dimaligned" PT1 PT3 d1 "_dimaligned" PT4 PT2 d2) ) ;; 变化坐标 (defun xgzbx1 () (command "_ucs" "y" "180") ) (defun xgzbx2 () (command "_ucs" "z" "180") ) (defun xgzbx3 () (command "_ucs" "x" "180") ) ;; 数据处理模块 (defun cal_draw () (setq Y1 0 ;为变量x1赋初值 X1 0 ;为变量y1赋初值 pt1 (list X1 Y1) ;将坐标X1,Y1赋给PT1点 pt2 (list Y1 X1) ;将坐标Y1,X1赋给PT2点 A (- R (/ DW 2)) B (+ R (/ DW 2)) Y (* (/ (/ V (* (- N 1) 2)) 180) PI) X1 A X2 B Y1 0 Y2 0  T1 (list X1 Y1) ;将坐标X1,Y1赋给PT1点  T2 (list X2 Y2) ;将坐标X2,Y2赋给PT2点 TT 1 ) (setvar "osmode" 0) ;关闭对象捕捉 (if (= k2 "1") (xgzbx1) ) (if (= k3 "1") (xgzbx2) ) (if (= k4 "1") (xgzbx3) ) (command ".pline" PT1 PT2 "") ;用多义线连接点PT1,PT2 (setq A (/ A (cos Y)) B (/ B (cos Y)) ) (while (< TT (* (- N 1) 2)) ;如果TT<(N-1)*2,就执行以下程序 (setq X3 (* (cos (* Y TT)) A) y3 (* (sin (* Y TT)) A) X4 (* (cos (* Y TT)) B) y4 (* (sin (* Y TT)) B) pt3 (list X3 Y3) ;将坐标X3,Y3赋给PT3点 pt4 (list X4 Y4) ;将坐标X4,Y4赋给PT4点 XC1 (/ (+ X1 X2) 2) ;计算点C1的X坐标值 XC2 (/ (+ X3 X4) 2) ;计算坐C2的X坐标值 YC1 (/ (+ Y1 Y2) 2) ;计算坐C1的Y坐标值 YC2 (/ (+ Y3 Y4) 2) ;计算坐C2的Y坐标值 C1 (list XC1 YC1) ;将坐标XC1,YC1赋给C1点 C2 (list XC2 YC2) ) ;将坐标XC2,YC2赋给C2点 (command ".pline" PT1 PT3 PT4 PT2 "") ;用多义线连接点PT1,PT3,PT4,PT2 (setq Xd1 (- (/ (+ X1 X3) 2) 20) ;计算点d1的X坐标值 Xd2 (+ (/ (+ X2 X4) 2) 20) ;计算坐d2的X坐标值 Yd1 (- (/ (+ Y1 Y3) 2) 20) ;计算坐d1的Y坐标值 Yd2 (+ (/ (+ Y2 Y4) 2) 20) ;计算坐d2的Y坐标值 d1 (list Xd1 Yd1) ;将坐标Xd1,Yd1赋给d1点 d2 (list Xd2 Yd2) ) ;将坐标Xd2,Yd2赋给d2点 (command ".line" C1 C2 "") ;用多义线连接点C1,C2 ;标注PT1到PT3的距离,标注PT4到PT2的距离 (if (= bz "1") (bzcc) ) (setq X1 X3 X2 X4 Y1 Y3 Y2 Y4 PT1 PT3 PT2 PT4 TT (+ TT 2) ) ) (setq A (- R (/ DW 2)) B (+ R (/ DW 2)) X3 (* (cos (* (/ V 180) PI)) A) y3 (* (sin (* (/ V 180) PI)) A) X4 (* (cos (* (/ V 180) PI)) B) y4 (* (sin (* (/ V 180) PI)) B) pt3 (list X3 Y3) ;将坐标X3,Y3赋给PT3点 pt4 (list X4 Y4) ;将坐标X4,Y4赋给PT4点 XC1 (/ (+ X1 X2) 2) ;计算点C1的X坐标值 XC2 (/ (+ X3 X4) 2) ;计算坐C2的X坐标值 YC1 (/ (+ Y1 Y2) 2) ;计算坐C1的Y坐标值 YC2 (/ (+ Y3 Y4) 2) ;计算坐C2的Y坐标值 C1 (list XC1 YC1) ;将坐标XC1,YC1赋给C1点 C2 (list XC2 YC2) ) ;将坐标XC2,YC2赋给C2点 (command ".Pline" PT1 PT3 PT4 PT2 "" ".line" C1 C2 "") ;用直线连接点PT1,PT3,PT4,PT2,C1,C2 (setq Xd1 (- (/ (+ X1 X3) 2) 20) ;计算点d1的X坐标值 Xd2 (+ (/ (+ X2 X4) 2) 20) ;计算坐d2的X坐标值 Yd1 (- (/ (+ Y1 Y3) 2) 20) ;计算坐d1的Y坐标值 Yd2 (+ (/ (+ Y2 Y4) 2) 20) ;计算坐d2的Y坐标值 d1 (list Xd1 Yd1) ;将坐标Xd1,Yd1赋给d1点 d2 (list Xd2 Yd2) ) ;将坐标Xd2,Yd2赋给d2点 (if (= bz 1.0) (bzcc) ) ;如果bz值为1.0,执行bzcc ) ;; 主程序模块 (defun C:hjwt () (setvar "DYNmode" 0) ;关闭动态输入 (setvar "cmdecho" 0) ;关闭命令行回现功能 (setq ;给变量赋初值 DW 1000 R 1000 V 45 N 3 x 0 y 0 z 0 ) (setq id (load_dialog "hjwt")) ;加载 DCL 文件 (new_dialog "hjwt" id) (dlg) (if (= what 1) (progn (setq pt_base (list x y z)) (command ".ucs" "o" pt_base) ;显示对话框并接受用户输入 (cal_draw) (PROMPT "\n本次绘图成功!") ) ) (if (= what 2) (progn (initget 1) (setq pt_base (getpoint "\n选取绘图点位置:") x (car pt_base) y (cadr pt_base) z (caddr pt_base) ) (new_dialog "hjwt" id) (dlg) (setq pt_base (list x y z)) (command ".ucs" "o" pt_base) (if (= what 1) (progn (cal_draw) (PROMPT "\n本次绘图成功!") ) ) ) ) (unload_dialog id) ;卸载该对话框 (if (= what 0) (PROMPT "\n您已取消了本次操作!") ) (setvar "AUTOSNAP" 47) ;打开极轴 (setvar "osmode" 15359) ;恢复对象捕捉 (command ".ucs" "w") (princ) ) |