大家好,
我发现这段代码在内部偏移了一条多段线。这似乎表明,通过将符号从-改为+可以从内部切换到外部。
我已经花了几个小时尝试不同的事情,但无法让它发挥作用。
我试图将其集成到一个更大的lisp中,该lisp将偏移多段线outisde,然后在该多段线上拾取一个点,并将该点与原始多段线一起馈送到Extrim中,以切断围栏外的所有内容。
有人能帮忙把它搬到外面去吗?
此外,代码不会在任何地方声明“选择对象”。这显然不是香草Lisp程序。是否可以解释所选对象在代码中的位置?
提前谢谢。
- ;;;Eugeni Elpanov
- ;;; Arguments
- ;;; lw - ename or vla object of polyline
- ;;; Return
- ;;; t - clockwise
- ;;; nil - counter-clockwise
- (defun lib:pline_clockwise ( lw / LST MAXP MINP)
- (if (= (type lw) 'ENAME)
- (setq lw (vlax-ename->vla-object lw)))
- (vla-GetBoundingBox lw 'MinP 'MaxP)
- (setq
- minp(vlax-safearray->list minp)
- MaxP(vlax-safearray->list MaxP)
- lst(mapcar(function(lambda(x)
- (vlax-curve-getParamAtPoint lw
- (vlax-curve-getClosestPointTo lw x))))
- (list minp(list(car minp)(cadr MaxP))
- MaxP(list(car MaxP)(cadr minp)))))
- (if(or
- (<=(car lst)(cadr lst)(caddr lst)(cadddr lst))
- (<=(cadr lst)(caddr lst)(cadddr lst)(car lst))
- (<=(caddr lst)(cadddr lst)(car lst)(cadr lst))
- (<=(cadddr lst)(car lst)(cadr lst)(caddr lst))) t nil))
- (defun C:OFF40 ( )
- (vl-load-com)
- (if
- (and
- (setq en (car(entsel)))
- (wcmatch (cdr(assoc 0 (entget en))) "*POLYLINE")
- (or (initget 7) t)
- (setq d (getdist "\nOffset distanse: "))
- (setq en (vlax-ename->vla-object en))
- (vlax-write-enabled-p en)
- (vlax-method-applicable-p en 'Offset)
- (if (lib:pline_clockwise en)
- d
- (setq d (- 0 d)) ;_ Plus or minus To change a sign
- )
- (setq i 1)
- (repeat 40
- (vl-catch-all-apply
- '(lambda()
- (vla-offset en (* i d))
- (setq i (1+ i))
- )
- )
- )
- )
- (princ " Offset OK")
- (princ "Not a polyline or on locket layer")
- )
- (princ)
- )
我在这里找到了代码:
http://forums.augi.com/showthread.php?83935-创建列表多段线顶点
这是输出:
LWPOLYLINE3DC1AcDbEntity0Model0AcDbPolyline310.00.00.0(166.615 343.075)0.00
它给了coord,但还有一大堆我不想要的东西。我怎样才能隔离它? |