lisp pl线线段数_lisp将多条线条合并成一条多段线

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

(defun c:pljoin(/ #os1 ss i en ent

ss1 xlist ent_pt_list pt_list l_pt

l_pt_list pti l l_pt pt_s

xlist2 n m sort_list ptj

pt_e pt_x pt_y j

)

(setvar "cmdecho" 0)

(setq #os1 (getvar "osmode"))

(setvar "osmode" 0)

(command "undo" "be")

(princ "请选取需要合并的样条曲线或多段线集合:")

(setq ss (ssget '((0 . "spline,lwpolyline,polyline"))))

(setqi 0

ss1 (ssadd)

);获取曲线转换为多段线并生成新选择集ss1

(repeat (sslength ss)

(setq en (ssname ss i))

(setq ent (entget en))

(cond

((= (cdr (assoc 0 ent)) "SPLINE")

(command "pedit" en "y" "" "")

(ssadd (entlast) ss1)

)

((= (cdr (assoc 0 ent)) "POLYLINE")

(command "pedit" en "d" "")

(ssadd (entlast) ss1)

)

(t (ssadd en ss1))

)

(setq i (1+ i))

)

(setqi 0

xlist '()

);生成所有点集xlist、多段线始末点集ptlist

(setq pt_list '())

(repeat (sslength ss1)

(setq en (ssname ss1 i))

(setq ent (entget en))

(setq ent_pt_list

(mapcar

'(lambda (x) (cdr x))

(vl-remove-if-not '(lambda (x) (= (car x) 10)) ent)

)

)

(setq xlist (append ent_pt_list xlist))

(setq pt_list (cons (car xlist) pt_list))

(setq pt_list (cons (last xlist) pt_list))

(setq i (1+ i))

)

(setqi 0

l_pt_list '()

);计算曲线的起点pt_s

(repeat (length pt_list)

(setq l_pt '())

(setq pti (nth i pt_list))

(setq l (apply '+ (mapcar '(lambda (x) (distance x pti)) xlist)))

(setq l_pt (cons pti l_pt))

(setq l_pt (cons l l_pt))

(setq l_pt_list (cons l_pt l_pt_list))

(setq i (1+ i))

)

(setqpt_s

(cadr

(assoc (apply 'max (mapcar '(lambda (x) (car x)) l_pt_list))

l_pt_list

)

)

)

(setqi 0

xlist2 '()

);对点集xlist进行排序生产xlist2

(if (> (length xlist) 30)

(setq m 30)

(setq m (length xlist))

)

(setq n (/ (length xlist) m))

(setqpti pt_s

sort_list xlist

)

(while sort_list

(setq

sort_list(vl-sort sort_list

'(lambda (e1 e2)

(< (distance pti e1) (distance pti e2))

)

)

)

(setq pt_x 0

pt_y 0

j 0

ptj t

)

(while (and (setq ptj (nth j sort_list)) (< j n))

(setq pt_e ptj)

(setq pt_x (+ pt_x (car ptj)))

(setq pt_y (+ pt_y (cadr ptj)))

(setq j (1+ j))

)

(setq xlist2 (cons (list (/ pt_x j) (/ pt_y j)) xlist2))

(setq sort_list (cdr (member ptj sort_list)))

(setq pti (car sort_list))

(setq i (1+ i))

)

(setq xlist2 (cons pt_e xlist2))

(setq xlist2 (cons pt_s (reverse xlist2)))

(command "pline" (car xlist2) "w" 0 "") ;生成多段线

(foreach i xlist2 (command i))

(command "")

(command "pedit" (entlast) "s" "")

(command "erase" ss1 "")

(command "undo" "e")

(setvar "osmode" #os1)

(princ)

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
名称 描述 PL_3d? 如果多段线的检查是3D或不 PL_AddPoint 加入一个新的多段线点之前指定的顶点量VxNum PL_Arced? 如果检查多段线有至少一个弧段 PL_ArcPl2LinearPl 重建更换指定的距离直线段只有所有弧段的多段线列表。 PL_BoundPoly 创建直线多段线和/或圆周围的边界多边形 PL_BreakX 在这一点上打断多段线 PL_DelPoint 从多段线删除点 PL_DividedPoints 返回除以给定的多段线(无论是在“实体”的形式或列表的形式)所获得的点 PL_DrawLeaders 沿线各段多段线绘制的领袖,从而呈现出多段线的流动方向。 PL_DrawLeaders2 沿线各段多段线绘制两端箭头。 PL_facelist 返回从一个多面对象的面部定义列表 PL_Fitted? 检查是否有多段线在选集中 PL_FlipArcedPolyline 翻转(反转)的圆弧(2D)多段线使用特殊技巧 PL_Get2dPolyElev 找到一个二维多段线的标高 PL_GetBulgeLst 返回凸出圆弧多段线列表 PL_GetMiddlePoint 查找行的中间点,多段线,圆弧或样条线对象 PL_GetSlope @点 在某一时间点的斜率的曲线对象 PL_GetVxEntl 返回完整的实体,包括多段线顶点实体的实体列表的列表, PL_GetWidths 返回一个列表的开始和结束段多段线宽度 PL_MapMask 创建出多段线和/或圆形的不透明的面具,变区实体。 PL_MeasuredPoints 返回通过测量给定的多段线(无论是在“实体”的形式或列表的形式)获得的分 PL_Mesh? 如果一个多段线对象的检查是一个三维网格对象或否 PL_mk_pl 给个列表,绘制多段线或LWPOLYLINE的entmake功能 PL_mk_pl_feed 给个列表,绘制多段线或LWPOLYLINE的,使用命令行坐标传输; PL_NewPoint 在指定的顶点更新多段线PL_Open? 判断多段线的检查是打开“或”不 PL_plist 返回一个LWPOLYLINE或多段线点表 PL_PlJoin 连接选择集中多段线线段PL_plpick 多段线挑毛,挑个毛,看里面。 PL_PolyFace? 检查多段线对象是否是一个多面网格 PL_ReconstructPoly 重建炸开的多段线对象 PL_SeekMain 寻求从顶点名主要实体名称 PL_Spl2Pl_Int 转换到一个正常的多段线样条或ELLISPE对象的插值方法 PL_Splined? 检查是否拟合多段线 PL_SplitPoly 拟合多条多段线PL_SplPl2Pl 拟合多段线转换到正常的多段线 PL_UpdateLine 更新与两个新端点的线对象。保持所有行属性,包括句柄 PL_UpdatePoly 更新一个新的顶点列表的多段线实体。保留所有多段线特性:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值