试试吧。用trans首要理解当前需要trans的是wcs还是 ucs的点,或者ocs dcs
(getpoint)是UCS,vlax-curve-getclosestpointto 得到的是 wcs
command执行 ucs getdist 需要usc点,
多调试就知道了,
 - ;;;*************************************
- ;;; No.2 绘制垂线(任意曲线之垂线) 函数
- ;;; ---- By Ayunger Studio
- ;;;*************************************
- (defun C:tt(/ xEntPick entName pickPt entData startPt endPt p1 p2 tempPT angofLine lenPerLine tanAngle)
- (while (not (and (setq xEntPick (entsel "\n选择曲线: ")))))
- (setq entName (car xEntPick))
- (setq pickPt (cadr xEntPick))
- (setq entData (entget entName))
- (redraw entName 3)
- (grdraw pickPt pickPt -1 1)
- (setq startPt (getpoint (strcat "\n指定垂足点<默认拾取点>: " )))
- (if (null startPt) (setq startPt pickPt))
- (setq startPt (vlax-curve-getClosestPointTo entName (trans startPt 1 0) nil))
- (setq lenPerLine (getdist (trans startPt 0 1) "\n指定垂线长: "))
- (setq tanAngle (angle (trans '(0.0 0.0 0.0) 0 1)(trans (vlax-curve-getFirstDeriv entName
- (vlax-curve-getparamatpoint entName
- (vlax-curve-getclosestpointto entName startPt))) 0 1)))
- (setq p1 (polar (trans startPt 0 1) (+ tanAngle (* PI 0.5)) lenPerLine))
- (setq p2 (polar (trans startPt 0 1) (- tanAngle (* PI 0.5)) lenPerLine))
- (ayOSMode nil);关闭捕捉.
- (vl-cmdf "_.Line" P1 P2 "")
- (redraw entName 4)
- (princ)
- );end_defun
- ;;;**************************
- ;;; No.0 对象捕捉开关 函数
- ;;;**************************
- (defun ayOSMode (isOpenSnap)
- (if isOpenSnap
- (setvar "osmode" (rem (getvar "osmode") 703));打开捕捉.
- (setvar "osmode" (+ (rem (getvar "osmode") 703) 703));关闭捕捉.
- );end_if
- );end_defun
|