 - (vl-load-com)
- ;;;=================================================================*
- ;;;功能:计算曲线对象上指定x值的坐标 *
- ;;;参数:EN -----线条对象图元名称。 *
- ;;; X -----预查找点位的x值。 *
- ;;;返回:如果成功,返回坐标值;否则返回nil *
- ;;;思路:使用二分法 *
- ;;;注意:线对象如果有多点符合条件,函数只返回一个。 *
- (defun zl-en-getpoint-atx (en x / fun01 DIST_TMP LEN OBJ X)
- ;;定义函数(变量为曲线上距起点的长度)
- (defun fun01 (dist_tmp)
- (- x
- (car (vlax-curve-getPointAtDist obj dist_tmp))
- )
- )
- ;;转换对象类型
- (setq obj (vlax-ename->vla-object en))
- ;;总长度
- (setq len (vlax-curve-getDistAtParam
- obj
- (vlax-curve-getEndParam obj)
- )
- )
- ;;如果找到,则返回坐标
- (if (setq dist_tmp (zl-sf-eff 'fun01 0.0 len 1e-4))
- (vlax-curve-getPointAtDist obj dist_tmp)
- )
- )
- ;;;=================================================================*
- ;|;;
- ;;;测试
- (defun c:tt ()
- (if (and (setq ss (entsel "\n点取多段线: "))
- (setq pt (getpoint "\n点取查询的x位置: "))
- (setq pt1 (zl-en-getpoint-atx (car ss) (car pt)))
- )
- (progn
- (command "_.line" "non" pt "non" pt1 "")
- )
- )
- )
- ;;|;
- ;;;=================================================================*
- ;|;;
- (DEFUN XTP1 (S1 S2 X / ZH1 Y Z)
- (SETQ ZH1 (VLA-ADDLINE
- (VLA-GET-MODELSPACE
- (VLA-GET-ACTIVEDOCUMENT
- (VLAX-GET-ACAD-OBJECT)
- )
- )
- (VLAX-3D-POINT (TRANS (LIST X 0 0) 1 0))
- (VLAX-3D-POINT (TRANS (LIST X 1 0) 1 0))
- )
- )
- (SETQ Y (XTZ S1 ZH1)
- Z (XTZ S2 ZH1)
- )
- (VLA-DELETE ZH1)
- (- Y Z)
- )
- (DEFUN XTZ (S1 S2 / SD1 SDZ)
- (SETQ SD1 (VLAX-VARIANT-VALUE
- (VLA-INTERSECTWITH
- S1
- S2
- ACEXTENDOTHERENTITY
- )
- )
- )
- (IF (>= (VLAX-SAFEARRAY-GET-U-BOUND SD1 1) 2)
- (PROGN
- (SETQ SDZ (LIST (VLAX-SAFEARRAY-GET-ELEMENT SD1 0)
- (VLAX-SAFEARRAY-GET-ELEMENT SD1 1)
- (VLAX-SAFEARRAY-GET-ELEMENT SD1 2)
- )
- )
- (CADR (TRANS SDZ 0 1))
- )
- )
- )
- ;;|;
|