以下是修改线段长度的源码,
麻烦帮我加个initget的交互输入,像这样当输入T时,源码部分
- (defun c:tt()
- (setq os (getvar "osmode"))
- (setvar "osmode" 0)
- (princ "\n请选择对象:")
- (setq ss(ssget '((0 . "line,arc"))))
- (setq d (getreal "\n请输入每边变化值: "))
- (setq len(sslength ss))
- (setq i 0)
- (if (/= NIL ss)
- (repeat len
- (setq en1(ssname ss i))
- (setq e1 (entget en1))
- (setq TS (cdr(assoc 0 e1)))
- (cond
- ((= TS "LINE") ;直线
- (setq pt1 (cdr (assoc 10 e1)))
- (setq ptt1 (cdr (assoc 11 e1)))
- (setq px1 (car pt1)
- py1 (cadr pt1)
- z0 (list px1 py1))
- (setq pxx1 (car ptt1)
- pyy1 (cadr ptt1)
- z2 (list pxx1 pyy1))
- (setq zx1 (/ (+ px1 pxx1) 2.0)
- zy1 (/ (+ py1 pyy1) 2.0)
- z1 (list zx1 zy1))
- (setq zc (distance pt1 ptt1)) ;;;;;;;;;;;直线总长
- (if (> (- d) (/ zc 2.0)) (exit))
- (setq jd (angle z0 z2))
- (setq b0 (polar z0 (+ pi jd) d))
- (setq bn (polar z2 jd d ))
- (setq e1 (subst (cons 10 b0) (assoc 10 e1) e1))
- (setq e1 (subst (cons 11 bn) (assoc 11 e1) e1))
- (entmod e1)
- )
- ((= TS "ARC") ;圆弧
- (setq o (cdr (assoc 10 e1))
- r (cdr (assoc 40 e1))
- p0 (cdr (assoc 50 e1))
- pn (cdr (assoc 51 e1))
- hd0 (- pn p0)
- zdhd (+ p0 (/ hd0 2.0)))
- (if (>= d (* (/ (abs (/ hd0 2.0)) pi) pi r)) (exit))
- (setq ds (atof (angtos hd0 0 4))
- zc (* 2 pi r (/ ds 360))) ;;;;;;;;;;;圆弧总长
- (setq xds (/ (* d 360) (* 2 pi r)))
- (setq xhd (* pi (/ xds 180)))
- (if (>= (- d) (/ zc 2.0)) (exit))
- (setq e1 (subst (cons 50 (- p0 xhd)) (assoc 50 e1) e1))
- (setq e1 (subst (cons 51 (+ pn xhd)) (assoc 51 e1) e1))
- (entmod e1)
- )
- )
- (setq i (+ i 1))
- )
- )
- (setvar "osmode" os)
- (princ)
- )
|