小弟初学lisp,会只找出两条线中线的办法,求高手帮忙搞定批量生成程序,感激不尽。
以下是生成中线的部分代码和测试图

- (defun c:tt()
- (setq ssL (ssget '((0 . "LINE"))))
- ;;下面取出两条线的坐标
- ;;;此处加入判断是否选择了两根梁线
- ;;;下面取得两条梁线的四个端点
- (if (= (sslength SSL) 2)
- (progn
- (setq pt1 (cdr (assoc 10 (entget (ssname ssL 0))))
- pt2 (cdr (assoc 11 (entget (ssname ssL 0))))
- pt3 (cdr (assoc 10 (entget (ssname ssL 1))))
- pt4 (cdr (assoc 11 (entget (ssname ssL 1))))
- ang1 (/ (* (vla-get-angle(vlax-ename->vla-object(ssname ssL 0))) 180) pi) ;;;直线1的角度
- ang2 (/ (* (vla-get-angle(vlax-ename->vla-object(ssname ssL 1))) 180) pi) ;;;直线2的角度
- )
- )
- ;;;增加错误函数
- );end if
- ;;;m1,m2为两条直线中心线的两端点
- (setq m1 (list (/ (+ (car pt1) (car pt3)) 2) (/ (+ (cadr pt1) (cadr pt3)) 2)))
- (setq m2 (list (/ (+ (car pt2) (car pt4)) 2) (/ (+ (cadr pt2) (cadr pt4)) 2)))
- (if (and
- (= (rtos (car m1) 2 4) (rtos (car m2) 2 4))
- (= (rtos (cadr m1) 2 4) (rtos (cadr m2) 2 4))
- (= (rtos (last m1) 2 4) (rtos (last m2) 2 4))
- )
- (progn
- (setq pt10 pt1)
- (setq pt1 pt2)
- (setq pt2 pt10)
- (setq m1 (list (/ (+ (car pt1) (car pt3)) 2) (/ (+ (cadr pt1) (cadr pt3)) 2)))
- (setq m2 (list (/ (+ (car pt2) (car pt4)) 2) (/ (+ (cadr pt2) (cadr pt4)) 2)))
- )
- )
- )
|