本帖最后由 作者 于 2007-9-20 8:18:19 编辑
2。就是把斜线变成横平竖直的线。 (defun c:xyline () (setq new-line (entget (car (entsel "\nSelect a line: ")))) (setq p1 (cdr (assoc 10 new-line)) p2 (cdr (assoc 11 new-line)) ) (setq p01 (list (max (nth 0 p1) (nth 0 p2)) (min (nth 1 p1) (nth 1 p2)) ) p02 (list (min (nth 0 p1) (nth 0 p2)) (min (nth 1 p1) (nth 1 p2)) ) ) (if (> (* (- (nth 0 p1) (nth 0 p2)) (- (nth 1 p1) (nth 1 p2))) 0 ) (command "line" p1 p01 p2 "") (command "line" p1 p02 p2 "") ) ) 还有下面这个: (defun c:x_y (/ new-line p1 p2 dtan p0 d01 sp ep key dx dy) (setq new-line (entget (car (entsel "\nSelect a line: ")))) (setq p1 (cdr (assoc 10 new-line)) p2 (cdr (assoc 11 new-line)) ) (setq p0 (getpoint "\nSelect rotate center:")) (setq sp () ep () ) (if (< (- (distance p0 p1) (distance p0 p2)) 0) (setq sp p1 key p2 ) (setq sp p2 key p1 ) ) (setq dx (* (/ (- (nth 0 key) (nth 0 sp)) (abs (- (nth 0 key) (nth 0 sp))) ) (distance p1 p2) ) dy (* (/ (- (nth 1 key) (nth 1 sp)) (abs (- (nth 1 key) (nth 1 sp))) ) (distance p1 p2) ) ) (if (< (/ (abs (- (nth 1 p1) (nth 1 p2))) (abs (- (nth 0 p1) (nth 0 p2))) ) 1 ) (setq ep (list (+ (nth 0 sp) dx) (nth 1 sp))) (setq ep (list (nth 0 sp) (+ (nth 1 sp) dy))) ) (command "line" sp ep "") (command "erase" (cdr (assoc -1 new-line)) "") ) 选择旋转中心时,靠近旋转端就可以了,不必是直线端点. 如果不删除原来的直线,把最后一句(command "erase" (cdr (assoc -1 new-line)) "")删除就可以了. |