大家好,
我创建了一个lisp来偏移一条线,
用给定值扩展线,
然后闭合两条线之间的间隙。
现在,当我的多段线为V形时,绝对长度会延长/缩短。
如何修改此代码,使DeltaX为我的值,并计算扩展长度?
例子:
我得到了一条^形的多段线,0,0,12,0(2x 45度)。
我希望这条线向DeltaX方向延伸1米。
现在我的代码扩展了1米,所以detalX的变化只是。。。0,7071.
- (defun C:OffsetJoinCopy ( / offsetobject )
- (setvar "cmdecho" 0)
- (command "UNDO" "BEGIN")
- (if (= offsetdepthvalue nil)(setq offsetdepthvalue 0.0))
- (if (= offsetwidthvalue nil)(setq offsetwidthvalue 0.0))
- (setq newoffsetdepthvalue (getreal (strcat "Specify offset depth <" (rtos offsetdepthvalue 2) ">: ")))
- (cond
- ((= newoffsetdepthvalue nil)
- (setq offsetdepthvalue offsetdepthvalue)
- )
- (t
- (setq offsetdepthvalue newoffsetdepthvalue)
- )
- )
- (setq newoffsetwidthvalue (getreal (strcat "Specify offset width <" (rtos offsetwidthvalue 2) ">: ")))
- (cond
- ((= newoffsetwidthvalue nil)
- (setq offsetdepthvalue offsetwidthvalue)
- )
- (t
- (setq offsetwidthvalue newoffsetwidthvalue)
- )
- )
- (setq offsetobject (entsel "\nSelect object to offset: "))
- (cond
- ((and (/= offsetdepthvalue 0)(/= offsetwidthvalue 0)(/= offsetobject nil))
- (setvar "peditaccept" 1)
- (command "_COPY" offsetobject "" "" "")
- (setq topline (entlast))
- (setq currentlength (vlax-curve-getdistatparam (entlast) (vlax-curve-getendparam (entlast))))
- [color="red"](setq newlength (+ currentlength (* 2 offsetwidthvalue)))[/color]
- (setq extendlength (/ (- newlength currentlength) 2))
- (setq StrtPnt (vlax-curve-getStartPoint (entlast)))
- (setq EnfPoint (vlax-curve-getEndPoint (entlast)))
- (vl-cmdf "_.lengthen" "Delta" extendlength StrtPnt EnfPoint "")
- (command "_COPY" (entlast) "" "" "")
- (command "_MOVE" (entlast) "" "0,0" (strcat "0,-" (rtos offsetdepthvalue)))
- (setq xy1 (strcat (rtos (car (cdr (assoc 10 (entget (entlast)))))) "," (rtos (car (cdr (cdr (assoc 10 (entget (entlast)))))))))
- (setq xy2 (strcat (rtos (car (cdr (assoc 10 (entget topline))))) "," (rtos (car (cdr (cdr (assoc 10 (entget topline))))))))
- (setq xy3 (strcat (rtos (car (cdr (assoc 10 (reverse (entget (entlast))))))) "," (rtos (car (cdr (cdr (assoc 10 (reverse (entget (entlast))))))))))
- (setq xy4 (strcat (rtos (car (cdr (assoc 10 (reverse (entget topline)))))) "," (rtos (car (cdr (cdr (assoc 10 (reverse (entget topline)))))))))
- (command "_PLINE" xy1 xy2 "")
- (command "_PLINE" xy3 xy4 "")
- (setvar "peditaccept" 0)
- )
- (t
- (princ "*Cancel*")
- )
- )
- (command "UNDO" "END")
- (setvar "cmdecho" 1)
- (princ)
- )
|