- ;; tt(多段线圆弧圆心点集)
- ;; 方法1
- ;; 复制多段线,炸开过滤ARC,取圆心组表ptn,删除新实体,返回ptn
- ;; 优点:适于polyline和lwpolyline实体
- ;; 问题:伪源码太多,程序啰嗦
- (defun xyp-PlineCerter (s1 / s0 s2 ss ptn)
- (setq s0 (entlast)
- s2 (xyp-copy s1)
- )
- (xyp-explodeqf s2)
- (setq ss (xyp-SSelEntnext s0)
- ptn (vl-remove-if-not '(lambda (x) (xyp-etype x "arc"))(xyp-Ss2List ss))
- ptn (mapcar '(lambda (x) (xyp-DXF 10 x)) ptn)
- )
- (xyp-erase ss)
- ptn
- )
- ;; 方法2
- ;; 直接过滤有凸点的点,利用osnap函数直接取圆心坐标
- ;; xyp-LwpCerter 多段线圆弧圆心点集 (xyp-LwpCerter ename)
- ;; 优点:代码精简
- ;; 问题:只适于lwpolyline实体
- (defun xyp-LwpCerter (s1 / lst a b ptn)
- (setq lst (vl-remove-if-not '(lambda (x) (member (car x) '(10 42)))(entget s1)))
- (while (and (setq a (car lst)) (setq b (cadr lst)))
- (setq lst (cddr lst))
- (if (/= (cdr b) 0)(setq ptn (cons (osnap (cdr a) "cen") ptn)))
- )
- (reverse ptn)
- )
- (defun c:tt ()
- (if (and (setq s1 (car (entsel "\n选择多段线: ")))
- (setq ptn (xyp-LwpCerter s1))
- )
- (progn
- (xyp-Pline ptn nil)
- (mapcar '(lambda (x) (xyp-Cross x 10 0)) ptn)
- )
- )
- (princ)
- )
|