试试这个:-
- (DEFUN C:TEST (/ A B C D)
- (VL-LOAD-COM)
- (WHILE (/= (SETQ A (getstring "\nSpecify Name of New Layer :")) "")
- (SETQ B (CAR (ENTSEL "\nSelect Line to Offset :")))
- (INITGET 1)
- (SETQ C (GETDIST "\nSpecify Offset Distance :"))
- (SETQ D (GETPOINT "\nSpecify Point on Side to Offset :"))
- (VLA-ADD (VLA-GET-LAYERS
- (VLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT))
- )
- A
- )
- (VLA-OFFSET
- (VLAX-ENAME->VLA-OBJECT B)
- (POINTSIDE B D)
- )
- (VLA-PUT-LAYER (VLAX-ENAME->VLA-OBJECT (ENTLAST)) A)
- )
- (PRINC)
- )
- (DEFUN POINTSIDE (OBJ PNT / P1 PA P2)
- (SETQ P1 (VLAX-CURVE-GETCLOSESTPOINTTO OBJ (TRANS PNT 1 0))
- PA (VLAX-CURVE-GETPARAMATPOINT OBJ P1)
- )
- (IF (EQUAL '(0.0 0.0 0.0)
- (VLAX-CURVE-GETSECONDDERIV OBJ PA)
- 1e-8
- )
- (SETQ P1 (VLAX-CURVE-GETPOINTATPARAM OBJ (FIX PA))
- P2 (VLAX-CURVE-GETPOINTATPARAM OBJ (1+ (FIX PA)))
- )
- (SETQ P2 (MAPCAR '+ P1 (VLAX-CURVE-GETFIRSTDERIV OBJ PA)))
- )
- (IF (MINUSP (SIN (- (ANGLE P1 PNT) (ANGLE P2 PNT))))
- (SETQ C (- C))
- (SETQ C (+ C))
- )
- )
|