(defun C:HF (/ old cmdold lyold osold wsz a select) (setq old *error*) (defun *error* (msg) (if (or (/= msg "Function cancelled") (= msg "quit / exit abort")) (princ) (princ (strcat "\nError: " msg)) ) (setq *error* old) (if lyold (setvar "clayer" lyold)) (if osold (setvar "osmode" osold)) (if cmdold (setvar "cmdecho" cmdold)) (setq old nil lyold nil osold nil cmdold nil) (princ) ) ;保存系统变量 (setq osold (getvar "osmode")) (setq cmdold (getvar "cmdecho")) (setq lyold (getvar "clayer")) (prompt "\nWELD.lsp Version 3.00") (setvar "CMDECHO" 0) ;默认值设置 (if (= wsz nil) (setq wsz 4.0)) (princ (strcat "\nWelding size <" (rtos wsz 2 2) ">: ")) (setq a (getdist)) (if (= a nil) (setq a wsz)) (setq wsz a) (initget "Sideweld Planweld") (setq select (getkword "\nSideweld/: ")) (if (= select "Sideweld") (weld_sect) (weld_plan) ) ;恢复系统变量 (setvar "CMDECHO" cmdold) (setvar "osmode" osold) (setvar "clayer" lyold) (princ) ) ;;; 侧面焊接程序 (defun weld_sect (/ ipt weld-lay) (setvar "blipmode" 1) (setq ipt (getpoint "\nInsertion point: ")) (setq weld-lay (tblsearch "layer" "welding")) (if (= weld-lay nil) (command ".layer" "M" "welding" "c" "4" "" "") (setvar "clayer" "welding") ) (command ".insert" "welds" ipt wsz "" pause) (command ".explode" (entlast)) (command ".chprop" "p" "" "la" "welding" "") ) ;;; 平面焊接程序 (defun weld_plan (/ pt1 pt2 pt3 pt4 weld-l weld-n weld-ang) (if (= (tblsearch "layer" "welding") nil) (command ".layer" "M" "welding" "c" "1" "" "") (setvar "clayer" "welding") ) (setvar "blipmode" 1) (command "ucs" "w") (princ "\nPick points in clockwise rotation.") (setq pt1 (getpoint "\nFirst point :") pt2 (getpoint pt1 "\nSecond point :") weld-l (distance pt1 pt2) weld-n (fix (/ weld-l wsz)) weld-ang (angle pt1 pt2) pt3 pt1 ) (setvar "osmode" 0) (command ".pline" pt1 "a") (repeat (- weld-n 2) (command "ce" (setq pt4 (polar pt3 weld-ang wsz)) "a" "-120") (command "d" pt3 pt4) (setq pt3 pt4) ) (command "ce" (setq pt4 (polar pt3 weld-ang wsz)) "a" "-180" "") (command "ucs" "p") ) (princ "\nReady to welding\n") (princ)