像这样的?
- (vl-load-com)
- (defun c:ProjectCurve (/ crv l1 l2 div pt1 pt2 pt3 n l1s l1e ang l2s l2e)
- (if (and (setq crv (entsel "\nPick curve: "))
- (setq crv (car crv))
- (setq l1 (entsel "\nPick furthest projection line: "))
- (setq l1 (entget (car l1)))
- (setq l1s (cdr (assoc 10 l1)))
- (setq l1e (cdr (assoc 11 l1)))
- (setq ang (+ (angle l1s l1e) (/ pi 2.0)))
- (setq l2 (entsel "\nPick nearest projection line: "))
- (setq l2 (entget (car l2)))
- (setq l2s (cdr (assoc 10 l2)))
- (setq l2e (cdr (assoc 11 l2)))
- (setq div (getdist "\nSelect maximum curvature arc length per projection line: "))
- )
- (progn
- (setq n (vlax-curve-getDistAtParam crv (vlax-curve-getEndParam crv))
- div (/ n (1+ (fix (/ n div))))
- )
- (while (> n 0.0)
- (setq pt1 (vlax-curve-getPointAtDist crv n)
- pt2 (inters l1s l1e pt1 (polar pt1 ang 1000.0) nil)
- pt3 (inters l2s l2e pt1 (polar pt1 ang 1000.0) nil)
- )
- (entmake (list '(0 . "LINE")
- (cons 8 (getvar 'CLayer))
- (cons 410 (getvar 'CTab))
- (cons 10 pt2)
- (cons 11 pt3)
- )
- )
- (setq n (- n div))
- )
- )
- )
- (princ)
- )
没有足够的错误检查,但至少它可以工作。即使“工作”在pl弧上,但对于那些应该有一些不同的编程,使其在段端点上也工作。 |