试试这个:
- (defun c:dimcurve (/ vLst oVar cEnt sDis pt cnt pt2 pt3)
- (setq vLst (list "PDMODE" "OSMODE" "CMDECHO")
- oVar (mapcar 'getvar vLst))
- (mapcar 'setvar vLst (list 3 0 0))
- (if (and (setq cEnt (car (entsel "\nSelect Curve > ")))
- (member (cdadr (entget cEnt)) '("LINE" "POLYLINE" "LWPOLYLINE" "SPLINE" "ARC" "CIRCLE" "ELLIPSE"))
- (not (initget 7))
- (setq sDis (getreal "\nSpecify Spacing > ")))
- (progn
- (command "_ucs" "_w")
- (setq cnt 0)
- (while (>= (distance (setq pt (vlax-curve-GetPointAtDist cEnt (* sDis cnt))) (vlax-curve-GetEndPoint cEnt)) sDis)
- (command "_point" pt)
- (setq pt2 (polar pt (+ (/ pi 2) (angle '(0 0 0) (vlax-curve-getFirstDeriv cEnt (vlax-curve-GetParamAtPoint cEnt pt)))) 5.0))
- (command "_dimaligned" pt (setq pt3 (vlax-curve-GetPointAtDist cEnt (* sDis (setq cnt (1+ cnt))))) pt2)
- (command "_point" pt3))
- (command "_ucs" "_P"))
- (princ "\n<!> Nothing Selected <!>"))
- (mapcar 'setvar vLst oVar)
- (princ))
由于您所做工作的性质,DimAligned的精度仅通过在更直的直线上使用较小的增量来提高。 |