autolisp多段线处理函数集
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(if (vlax-curve-isClosed obj) (fix (1- (vlax-curve-getendParam obj))) (fix (vlax-curve-getendParam obj))
) )
;;164.13 [功能] 曲线中点
;;示例 (HH:GetMidpointCurve (car (entsel))) (defun HH:GetMidpointCurve (curve / d)
;;164.1 [功能] 曲线是否封闭 ;;164.2 [功能]使多段线封闭 ;;164.3 [功能] 多段线端点列表 ;;164.4 [功能] 矩形中点坐标 ;;164.5 [功能] 参数param处的切线方向的角度 ;;164.6 [功能] 参数param处的法线方向的角度 ;;164.7 [功能] 曲线一点的切线方向的角度 ;;164.8 [功能] 曲线一点的法线方向的角度 ;;164.9 [功能] 去除多段线重点 ;;164.10 [功能] 判断点是否在曲线上 ;;164.11 [功能] 曲线长度 ;;164.12 [功能] 多段线子段数量 ;;164.13 [功能] 曲线中点 ;;164.14 [功能] 曲线一点的参数param ;;164.15 [功能] 参数param处的坐标 ;;164.16 [功能] 多段线第n子段的起点坐标 ;;164.17 [功能] 多段线第n子段的终点坐标 ;;164.18 [功能] 多段线所点击子段的两端点列表
(setq pl1 (cddddr pl)) (mapcar '(lambda (X Y) (/ (+ X Y) 2.0))
(list (car pl) (cadr pl)) (list (car pl1) (cadr pl1)) ) )
;;164.5 [功能] 参数param处的切线方向的角度
;;示例(HH:ParamFirstAngle (car (entsel)) 1)
(foreach e (entget en)
(if
(and (member e newdata) (= 10 (car e)))
nil
(setq newdata (cons e newdata))
)
)
(entmod (reverse newdata)) )
;;164.10 [功能] 判断点是否在曲线上 ;;示例(HH:PtOnCurve (getpoint) (car (entsel))) (defun HH:PtOnCurve (pt curve)
;;示例 (HH:GetSegEndPt (car (entsel)) 0) (defun HH:GetSegEndPt (curve n)
(vlax-curve-getPointAtParam curve (1+ (fix n))) )
;;164.18 [功能] 多段线所点击子段的两端点列表
;;164.16 [功能] 多段线第n子段的起点坐标
;;示例 (HH:GetSegStratPt (car (entsel)) 0)
(defun HH:GetSegStratPt
(curve n)
(vlax-curve-getPointAtParam curve (fix n))
) ;;164.17 [功能] 多段线第n子段的终点坐标
(angle pt (mapcar '+ pt (vlax-curve-getSecondDeriv obj param)))
)
;;164.9 [功能] 去除多段线重点 By 自贡黄明儒
;;示例(HH:Remove (car (entsel)))
(defun HH:Remove (en / NEWDATA)
;;注1 (vlax-curve-getFirstDeriv obj param) 函数计算的值是曲线上在参数值为param点处的切线方向
;;注2 param起始值为0 (defun HH:ParamFirstAngle (obj param)
(setq pt (vlax-curve-getpointatparam obj param)) (angle pt (mapcar '+ pt (vlax-curve-getFirstDeriv obj param))) )
;;164.43 [功能] 点在封闭多段线内返回T;线上0;外nil
;;164.44 [功能] 多段线弧段全改为直线段
;;164.45 [功能] 沿多段线取点,弧处按角度加密取点
;;164.46 [功能] 多段线自相交 by st788796[code="lisp]
wenku.baidu.com
;;164.1 [功能] 曲线是否封闭 By 自贡黄明儒
)
;;164.4 [功能] 矩形中点坐标 By 自贡黄明儒
;;示例(HH:RectangCen (car (entsel)))
(defun HH:RectangCen (en / PL X Y) (setq pl (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en))) (setq pl (mapcar 'cdr pl)) (mapcar '(lambda (X Y) (/ (+ X Y) 2.0)) (car pl) (caddr pl))
)
;;示例(HH:RectangCen1 (car (entsel)))
(defun HH:RectangCen1 (en / OBJ PL PL1 X Y) (setq obj (vlax-ename->vla-object en)) (setq pl (vlax-safearray->list (vlax-variant-value (vla-get-coordinates obj))))
;;164.8 [功能] 曲线一点的法线方向的角度
;;示例(HH:PtSecondAngle (car (entsel)) (getpoint))
(defun HH:PtSecondAngle
(obj pt)
(setq param (vlax-curve-getParamAtPoint obj pt))
;(equal (vlax-get-property obj 'closed) :vlax-false)
) )
;;164.3 [功能] 多段线端点列表 By 自贡黄明儒
;;示例(HH:PtLists (car (entsel)))
(defun HH:PtLists (en) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en)) )
;;164.19 [功能] 多段线所点击点最近的一个顶点 ;;164.20 [功能] 多段线所点击子段param(索引) ;;164.21 [功能] 多段线所点击子段的起点坐标 ;;164.22 [功能] 多段线所点击子段的终点坐标 ;;164.23 [功能] 多段线所击点离起点近 ;;164.24 [功能] 多段线所点击子段否是直线(返回nil是弧) ;;164.25 [功能] 求多段线上的弧段(圆或圆弧也有效)的圆心 by caoyin ;;164.26 [功能] 求多段线上的弧段(圆或圆弧也有效)的圆心 ;;164.27 [功能] 判断多段线是否有圆弧(凸度/=0)的子段 ;;164.28 [功能] 判断多段线是否有圆弧(凸度/=0)的子段 ;;164.29 [功能] 连接线、弧成多段线 ;;164.30 [功能] 构造矩形 by highflybird ;;164.31 [功能] 点表生成多段线 ;;164.32 [功能] 3D多段线 ;;164.33 [功能] 多段线反向(起点反成终点) byzml84 ;;164.34 [功能] 多段线删除顶点 ;;164.35 [功能] 多段线增加顶点 ;;164.36 [功能] 多段线修改顶点
(vlax-curve-getParamAtPoint obj pt) )
;;164.15 [功能] 参数param处的坐标
;;(HH:ParamTopt (car (entsel)) 0) (defun HH:ParamTopt (obj param)
(vlax-curve-getPointAtParam obj param) )
;;164.37 [功能] 多段线拷贝子段
;;164.38 [功能] 修改多段线子段
;;164.39 [功能] 修改多段线子段为直线
;;164.40 [功能] 点在封闭多段线内返回T,其余nil By 狂刀
;;164.41 [功能] 点在封闭多段线内返回T,其余nil By SmcTools
;;164.42 [功能] 判断点在封闭曲线内外,自交曲线不适用 By Gu_xl
;;示例(HH:isClosed (car (entsel)))
(defun HH:isClosed (obj) (vlax-curve-isClosed obj)
)
;;164.2 [功能]使多段线封闭
(defun HH:MakeClosed (en / OBJ)
(cond
((equal (type en) 'ENAME) (setq obj (vlax-ename->vla-object en)))
(equal pt (vlax-curve-getClosestPointTo curve pt) 0.00001) )
;;164.11 [功能] 曲线长度 ;;直线、圆弧、圆、多段线、优化多段线、样条曲线等图元 ;;示例 (HH:GetCurveLength (car (entsel))) (defun HH:GetCurveLength (curve)
(vlax-curve-getDistAtParam curve (vlax-curve-getEndParam curve)) )
;;164.12 [功能] 多段线子段数量 ;;相当于组码90 ;;示例 (HH:GetCurveNum (car (entsel))) (defun HH:GetCurveNum (obj)
((equal (type en) 'ENAME) (setq obj en))
(T (exit))
)
;;(if (equal (vlax-get obj 'Closed) 0) (vlax-put obj 'Closed -1))
(if (not (vlax-curve-isclosed obj)) (vla-put-closed obj :vlax-true)
(setq d (/ (vlax-curve-getDistAtParam curve (vlax-curve-getEndParam curve)) 2)) (vlax-curve-getPointAtDist curve d) )
;;164.14 [功能] 曲线一点的参数param
;;(HH:PtToParam (car (entsel)) (getpoint)) (defun HH:PtToParam (obj pt)
;;164.6 [功能] 参数param处的法线方向的角度
;;示例(HH:ParamSecondAngle (car (entsel)) 1)
;;注:param处是直线,则返回0.0 (defun HH:ParamSecondAngle (obj param)
(setq pt (vlax-curve-getpointatparam obj param)) (angle pt (mapcar '+ pt (vlax-curve-getSecondDeriv obj param))) )
;;164.7 [功能] 曲线一点的切线方向的角度
;;示例(HH:PtFirstAngle (car (entsel)) (getpoint)) (defun HH:PtFirstAngle (obj pt)
(setq param (vlax-curve-getParamAtPoint obj pt)) (angle pt (mapcar '+ pt (vlax-curve-getFirstDeriv obj param))) )
) )
;;164.13 [功能] 曲线中点
;;示例 (HH:GetMidpointCurve (car (entsel))) (defun HH:GetMidpointCurve (curve / d)
;;164.1 [功能] 曲线是否封闭 ;;164.2 [功能]使多段线封闭 ;;164.3 [功能] 多段线端点列表 ;;164.4 [功能] 矩形中点坐标 ;;164.5 [功能] 参数param处的切线方向的角度 ;;164.6 [功能] 参数param处的法线方向的角度 ;;164.7 [功能] 曲线一点的切线方向的角度 ;;164.8 [功能] 曲线一点的法线方向的角度 ;;164.9 [功能] 去除多段线重点 ;;164.10 [功能] 判断点是否在曲线上 ;;164.11 [功能] 曲线长度 ;;164.12 [功能] 多段线子段数量 ;;164.13 [功能] 曲线中点 ;;164.14 [功能] 曲线一点的参数param ;;164.15 [功能] 参数param处的坐标 ;;164.16 [功能] 多段线第n子段的起点坐标 ;;164.17 [功能] 多段线第n子段的终点坐标 ;;164.18 [功能] 多段线所点击子段的两端点列表
(setq pl1 (cddddr pl)) (mapcar '(lambda (X Y) (/ (+ X Y) 2.0))
(list (car pl) (cadr pl)) (list (car pl1) (cadr pl1)) ) )
;;164.5 [功能] 参数param处的切线方向的角度
;;示例(HH:ParamFirstAngle (car (entsel)) 1)
(foreach e (entget en)
(if
(and (member e newdata) (= 10 (car e)))
nil
(setq newdata (cons e newdata))
)
)
(entmod (reverse newdata)) )
;;164.10 [功能] 判断点是否在曲线上 ;;示例(HH:PtOnCurve (getpoint) (car (entsel))) (defun HH:PtOnCurve (pt curve)
;;示例 (HH:GetSegEndPt (car (entsel)) 0) (defun HH:GetSegEndPt (curve n)
(vlax-curve-getPointAtParam curve (1+ (fix n))) )
;;164.18 [功能] 多段线所点击子段的两端点列表
;;164.16 [功能] 多段线第n子段的起点坐标
;;示例 (HH:GetSegStratPt (car (entsel)) 0)
(defun HH:GetSegStratPt
(curve n)
(vlax-curve-getPointAtParam curve (fix n))
) ;;164.17 [功能] 多段线第n子段的终点坐标
(angle pt (mapcar '+ pt (vlax-curve-getSecondDeriv obj param)))
)
;;164.9 [功能] 去除多段线重点 By 自贡黄明儒
;;示例(HH:Remove (car (entsel)))
(defun HH:Remove (en / NEWDATA)
;;注1 (vlax-curve-getFirstDeriv obj param) 函数计算的值是曲线上在参数值为param点处的切线方向
;;注2 param起始值为0 (defun HH:ParamFirstAngle (obj param)
(setq pt (vlax-curve-getpointatparam obj param)) (angle pt (mapcar '+ pt (vlax-curve-getFirstDeriv obj param))) )
;;164.43 [功能] 点在封闭多段线内返回T;线上0;外nil
;;164.44 [功能] 多段线弧段全改为直线段
;;164.45 [功能] 沿多段线取点,弧处按角度加密取点
;;164.46 [功能] 多段线自相交 by st788796[code="lisp]
wenku.baidu.com
;;164.1 [功能] 曲线是否封闭 By 自贡黄明儒
)
;;164.4 [功能] 矩形中点坐标 By 自贡黄明儒
;;示例(HH:RectangCen (car (entsel)))
(defun HH:RectangCen (en / PL X Y) (setq pl (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en))) (setq pl (mapcar 'cdr pl)) (mapcar '(lambda (X Y) (/ (+ X Y) 2.0)) (car pl) (caddr pl))
)
;;示例(HH:RectangCen1 (car (entsel)))
(defun HH:RectangCen1 (en / OBJ PL PL1 X Y) (setq obj (vlax-ename->vla-object en)) (setq pl (vlax-safearray->list (vlax-variant-value (vla-get-coordinates obj))))
;;164.8 [功能] 曲线一点的法线方向的角度
;;示例(HH:PtSecondAngle (car (entsel)) (getpoint))
(defun HH:PtSecondAngle
(obj pt)
(setq param (vlax-curve-getParamAtPoint obj pt))
;(equal (vlax-get-property obj 'closed) :vlax-false)
) )
;;164.3 [功能] 多段线端点列表 By 自贡黄明儒
;;示例(HH:PtLists (car (entsel)))
(defun HH:PtLists (en) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en)) )
;;164.19 [功能] 多段线所点击点最近的一个顶点 ;;164.20 [功能] 多段线所点击子段param(索引) ;;164.21 [功能] 多段线所点击子段的起点坐标 ;;164.22 [功能] 多段线所点击子段的终点坐标 ;;164.23 [功能] 多段线所击点离起点近 ;;164.24 [功能] 多段线所点击子段否是直线(返回nil是弧) ;;164.25 [功能] 求多段线上的弧段(圆或圆弧也有效)的圆心 by caoyin ;;164.26 [功能] 求多段线上的弧段(圆或圆弧也有效)的圆心 ;;164.27 [功能] 判断多段线是否有圆弧(凸度/=0)的子段 ;;164.28 [功能] 判断多段线是否有圆弧(凸度/=0)的子段 ;;164.29 [功能] 连接线、弧成多段线 ;;164.30 [功能] 构造矩形 by highflybird ;;164.31 [功能] 点表生成多段线 ;;164.32 [功能] 3D多段线 ;;164.33 [功能] 多段线反向(起点反成终点) byzml84 ;;164.34 [功能] 多段线删除顶点 ;;164.35 [功能] 多段线增加顶点 ;;164.36 [功能] 多段线修改顶点
(vlax-curve-getParamAtPoint obj pt) )
;;164.15 [功能] 参数param处的坐标
;;(HH:ParamTopt (car (entsel)) 0) (defun HH:ParamTopt (obj param)
(vlax-curve-getPointAtParam obj param) )
;;164.37 [功能] 多段线拷贝子段
;;164.38 [功能] 修改多段线子段
;;164.39 [功能] 修改多段线子段为直线
;;164.40 [功能] 点在封闭多段线内返回T,其余nil By 狂刀
;;164.41 [功能] 点在封闭多段线内返回T,其余nil By SmcTools
;;164.42 [功能] 判断点在封闭曲线内外,自交曲线不适用 By Gu_xl
;;示例(HH:isClosed (car (entsel)))
(defun HH:isClosed (obj) (vlax-curve-isClosed obj)
)
;;164.2 [功能]使多段线封闭
(defun HH:MakeClosed (en / OBJ)
(cond
((equal (type en) 'ENAME) (setq obj (vlax-ename->vla-object en)))
(equal pt (vlax-curve-getClosestPointTo curve pt) 0.00001) )
;;164.11 [功能] 曲线长度 ;;直线、圆弧、圆、多段线、优化多段线、样条曲线等图元 ;;示例 (HH:GetCurveLength (car (entsel))) (defun HH:GetCurveLength (curve)
(vlax-curve-getDistAtParam curve (vlax-curve-getEndParam curve)) )
;;164.12 [功能] 多段线子段数量 ;;相当于组码90 ;;示例 (HH:GetCurveNum (car (entsel))) (defun HH:GetCurveNum (obj)
((equal (type en) 'ENAME) (setq obj en))
(T (exit))
)
;;(if (equal (vlax-get obj 'Closed) 0) (vlax-put obj 'Closed -1))
(if (not (vlax-curve-isclosed obj)) (vla-put-closed obj :vlax-true)
(setq d (/ (vlax-curve-getDistAtParam curve (vlax-curve-getEndParam curve)) 2)) (vlax-curve-getPointAtDist curve d) )
;;164.14 [功能] 曲线一点的参数param
;;(HH:PtToParam (car (entsel)) (getpoint)) (defun HH:PtToParam (obj pt)
;;164.6 [功能] 参数param处的法线方向的角度
;;示例(HH:ParamSecondAngle (car (entsel)) 1)
;;注:param处是直线,则返回0.0 (defun HH:ParamSecondAngle (obj param)
(setq pt (vlax-curve-getpointatparam obj param)) (angle pt (mapcar '+ pt (vlax-curve-getSecondDeriv obj param))) )
;;164.7 [功能] 曲线一点的切线方向的角度
;;示例(HH:PtFirstAngle (car (entsel)) (getpoint)) (defun HH:PtFirstAngle (obj pt)
(setq param (vlax-curve-getParamAtPoint obj pt)) (angle pt (mapcar '+ pt (vlax-curve-getFirstDeriv obj param))) )