不用command,用纯lisp实现:
 - (defun C:cxz1 (/ ANG CL CODE DSA ELIST ENT13 ENT24 KU L1 L2 LOOP OLD_CMDECHO PLWIDTH PT1 PT2 PT3 PT4 X ZP1 ZP2 ZX)
- (setq OLD_CMDECHO (getvar "CMDECHO"))
- (setq CL (getvar "clayer"))
- (setq plwidth (getvar "PLINEWID"))
- (setvar "CMDECHO" 0)
- (setvar "EDGEMODE" 1)
- (setvar "PLINEWID" 30)
- ;;; (command "-layer" "m" "fjgj" "C" "1" "" "")
- (if (not (tblsearch "layer" "fjgj"))
- (entmakex '((0 . "LAYER")
- (100 . "AcDbSymbolTableRecord")
- (100 . "AcDbLayerTableRecord")
- (2 . "fjgj")
- (70 . 0)
- (62 . 1)
- )
- )
- )
- (setvar "clayer" "fjgj")
- (setq L1 (getpoint))
- (setq L2 (getpoint L1))
- (setq KU (angle L1 L2))
- (setq PT1 (polar L1 (+ KU (* 0.5 pi)) 75))
- (setq PT2 (polar L1 (+ KU (* 1.5 pi)) 75))
- (setq PT3 (polar L2 (+ KU (* 0.5 pi)) 75))
- (setq PT4 (polar L2 (+ KU (* 1.5 pi)) 75))
- ;;; (command "line" "non" L1 "non" L2 "")
- ;;; (setq ZX (entlast))
- ;;; (command "line" "non" PT1 "non" PT3 "")
- ;;; (setq ENT13 (entlast))
- ;;; (command "line" "non" PT2 "non" PT4 "")
- ;;; (setq ENT24 (entlast))
- (setq zx (entmakex (list '(0 . "LINE") (cons 10 l1) (cons 11 l2))))
- (setq ENT13 (entmakex (list '(0 . "LINE") (cons 10 pt1) (cons 11 pt3))))
- (setq ENT24 (entmakex (list '(0 . "LINE") (cons 10 pt2) (cons 11 pt4))))
- (setq loop T)
- (prompt "\n 偏移(A)/<退出>:")
- (while (not (member (setq code (grread T 8)) '((2 32) (2 13))))
- (if (equal code '(2 97) 0.1)
- (progn
- (setq zP1 (cdr (assoc 10 (entget ZX))))
- (setq zP2 (cdr (assoc 10 (entget ENT13))))
- (setq dsa (distance zP1 zP2))
- (setq ang (angle zP1 zP2))
- ;;; (command "line" zP1 zP2 "") 这个创建两点间直线的语句我注释掉了,如果不注释的话,这个是可执行的,真能达到效果,我安一次A就能造出一条直线,按一次造一次。说明我前面写的都没有问题,就后面那句command错了
- ;;; (command "move" ZX ENT13 ENT24 "" zP1 zP2)
- ;;;;;这句话我真的不知道哪错了呀,我就想把这三条直线,以zP1为基点,一块儿平移到zP2
- (mapcar '(lambda (x)
- (setq elist (entget x))
- (setq elist (subst (cons 10 (polar (cdr (assoc 10 elist)) ang dsa))
- (assoc 10 elist)
- elist
- )
- )
- (setq elist (subst (cons 11 (polar (cdr (assoc 11 elist)) ang dsa))
- (assoc 11 elist)
- elist
- )
- )
- (entmod elist)
- )
- (list ZX ENT13 ENT24)
- )
- )
- )
- )
- (setvar "clayer" CL)
- (setvar "CMDECHO" OLD_CMDECHO)
- (setvar "PLINEWID" plwidth)
- (princ)
- )
|