本帖最后由 作者 于 2007-8-31 18:49:36 编辑
 - (defun c:test(/ lin lst pt1 pt2 vec mid)
- (if (and (setq lin (car (entsel "\n请选择直线段:")))
- (setq lst (entget lin))
- (= (cdr (assoc 0 lst)) "LINE")
- )
- (progn
- (setq pt1 (cdr (assoc 10 lst)))
- (setq pt2 (cdr (assoc 11 lst)))
- (setq vec (mapcar '- pt2 pt1))
- (setq mid (polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2)))
- (entmake
- (list
- '(0 . "XLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbXline")
- (cons 10 mid)
- (cons 11 vec)
- )
- )
- )
- )
- )
如果要批量转: - (defun c:test(/ i sel ent lst pt1 pt2 vec mid)
- (setq i 0)
- (prompt "\n请选择直线段:")
- (if (setq sel (ssget '((0 . "LINE"))))
- (repeat (sslength sel)
- (setq ent (ssname sel i))
- (setq lst (entget ent))
- (setq pt1 (cdr (assoc 10 lst)))
- (setq pt2 (cdr (assoc 11 lst)))
- (setq vec (mapcar '- pt2 pt1))
- (setq mid (polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2)))
- (setq i (1+ i))
- (entdel ent)
- (entmake
- (list
- '(0 . "XLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbXline")
- (cons 10 mid)
- (cons 11 vec)
- )
- )
- )
- )
- (princ)
- )
|