求lisp程序?非常谢谢!!!
写个绘制长槽孔(腰孔)的lisp命令:要求根据给定槽宽、指定开始点、中心线(不一定为直线段)、结束点绘出图形。
;;; 来源本论坛
(defun c:ctk( / ang ang1 md md1 os pot pot1 pot10 pot11 pot2 pot3 pot4 pot5 pot6 pot7 pot8 pot9)
(setq os (getvar "osmode"))
(setvar "osmode" os)
(setq pot (getpoint "\n请输入插入点<退出>:"))
(setq pot1 (getpoint pot "\n请输入插入点<退出>:"))
(setq md1 (getreal "\n请输入直径:"))
(setvar "osmode" 0)
(setq md (/ md1 2))
(setq ang (/ pi 2))
(setq ang1 (angle pot pot1))
(setq pot2 (polar pot (+ ang1 ang) md))
(setq pot3 (polar pot (- ang1 ang) md))
(setq pot4 (polar pot1 (+ ang1 ang) md))
(setq pot5 (polar pot1 (- ang1 ang) md))
(setq pot6 (polar pot (+ ang1 ang) (* md 1.2)))
(setq pot7 (polar pot (- ang1 ang) (* md 1.2)))
(setq pot8 (polar pot1 (+ ang1 ang) (* md 1.2)))
(setq pot9 (polar pot1 (- ang1 ang) (* md 1.2)))
(setq pot10 (polar pot (+ ang1 pi) (* md 1.2)))
(setq pot11 (polar pot1 ang1 (* md 1.2)))
(vl-cmdf "pline" pot3 pot5 "A" "CE" POT1 POT4 "L" POT2 "A" "CE" POT POT3 "" )
;;;(command "arc" "c" pot pot2 pot3)
;;;
;;;(command "arc" "c" pot1 pot5 pot4)
;;;
;;;(command "line" pot2 pot4 "")
;;;
;;;(command "line" pot3 pot5 "")
(command "layer" "n" "1z" "c" "3" "1z" "l" "center" "1z" "")
(command "layer" "s" "1z" "")
(command "line" pot6 pot7 "")
(command "line" pot8 pot9 "")
(command "line" pot10 pot11 "")
(command "layer" "s" "0" "")
(setvar "osmode" os)
(princ)
)
非常感谢vlisp2012 ,真是相当热情,但这个程序只能做出直线的,并不是我想要程式。应该要用到offset,要求的效果是这样的: ;;曲线键槽 by langjs
(defun c:s (/ h name obj pt1 pt2 pt3 pt4 pt7 r r2 snap)
(vl-load-com)
(setq snap (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(if (null hbak)
(setq hbak 30.0)
)
(setq name (car (entsel "\n 指定中心线:")))
(if (setq h (getreal (strcat "\n键槽宽度:<" (rtos hbak 2 2) ">")))
(setq hbak h)
)
(setq h (* 0.5 hbak)
obj (vlax-ename->vla-object name)
pt1 (vlax-curve-getStartPoint obj)
pt2 (vlax-curve-getEndPoint obj)
r (angle (vlax-curve-getPointAtDist obj 0.1) pt1)
pt3 (polar pt1 (+ r (* 0.5 pi)) h)
pt4 (polar pt1 (- r (* 0.5 pi)) h)
r2 (angle (vlax-curve-getPointAtDist obj (- (vlax-curve-getDistAtPoint obj pt2) 0.1)) pt2)
pt7 (polar pt2 (- r2 (* 0.5 pi)) h)
)
(command "offset" h name pt3 name pt4 "")
(command "arc" "c" pt1 (osnap pt4 "_end") "a" 180)
(command "arc" "c" pt2 (osnap pt7 "_end") "a" 180)
(setvar "osmode" snap)
(princ)
)
页:
[1]