如果pline没有圆弧,这应该可以工作
- (defun c:cgpline (/ dst lst mdp mdx mdy ss x y en pt)
- (if
- (setq ss (ssget ":E:S:L" '((0 . "LWPOLYLINE"))))
- (progn
- (setq lst (mapcar 'cdr
- (vl-remove-if
- '(lambda (x) (/= (car x) 10))
- (setq en (entget (ssname ss 0)))
- )
- )
- dst (mapcar 'distance lst (cdr lst))
- mdp (mapcar '(lambda (x y)
- (mapcar '(lambda (a b) (* 0.5 (+ a b))) x y)
- )
- lst
- (cdr lst)
- )
- mdx (mapcar 'car mdp)
- mdy (mapcar 'cadr mdp)
- x (/ (apply '+ (mapcar '* mdx dst)) (apply '+ dst))
- y (/ (apply '+ (mapcar '* mdy dst)) (apply '+ dst))
- pt (trans (list x
- y
- (cond ((cdr (assoc 38 en)))
- (0.0)
- )
- )
- (trans '(0. 0. 1.) (cdr (assoc 210 en)) 0 T)
- 0
- )
- )
- (entmake (list '(0 . "POINT") (cons 10 pt)))
- )
- )
- (princ)
- )
|