找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5427|回复: 41

[几何] 准确获取封闭多段线的顶点数量

[复制链接]

已领礼包: 202个

财富等级: 日进斗金

发表于 2020-6-20 18:09:23 | 显示全部楼层 |阅读模式
函数发布
函数名称: get:polyline:number
调用格式: (get:polyline:number e)
参数说明: e---封闭多段线图元
返回值: 顶点数量
函数简介: xdrx-polyline-compress函数有时对重复的顶点不能消除,因此设计此函数
函数来源: 原创
函数作者: dyjwyqz5221
适用版本: ACAD 2013+ XDRX API 
最后更新时间: 2020-06-20
备注: -
演示图片:

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 dyjwyqz5221 于 2020-6-23 07:44 编辑

XDSoft修改了下函数xdrx-polyline-compress
2020.06.23更新的API
(xdrx-polyline-compress poly [mode])
mode --  1/2/4 位组合
已经实现全面消除重复段、重复点了,能准确得到顶点数了。
在此,十分感谢各位的支持和帮助!感谢XDSoft辛勤的付出!!!
                          ------dyjwyqz5221感言

[Actionscript3] 纯文本查看 复制代码
(defun get:polyline:number(e / inx inxs p p- p+ lst)
        (xdrx-setvar "tolequalvector" 1.0)
        (xdrx_curve_setclosed e)
        (xdrx-polyline-compress e)
        (repeat 2
                (setq inx (xdrx-polyline-numverts e))
                (while (>= (setq inx (1- inx)) 0)
                        (setq inxs (xdrx-getpropertyvalue e "-index+" inx)
                                p (xdrx-polyline-getpointat e inx)
                                p- (xdrx-polyline-getpointat e (car inxs))
                                p+ (xdrx-polyline-getpointat e (cadr inxs))
                                lst 
                                (list
                                        (list p- p)
                                        (list p p+)
                                        (list p- p+)
                                );;;list
                        );;;setq
                        (if (or (vl-some '(lambda(x) (equal (car x) (cadr x) 1e-1)) lst)
                                (xdrx-vector-isparallel (mapcar '- p p-) (mapcar '- p p+))
                                );;;or
                                (xdrx-polyline-removevertexat e inx)
                        );;;if
                );;;while
        );;;
        (xdrx-polyline-numverts e)
);;;defun


;;;用xdrx-polyline-compress函数测试

(defun c:tt1(/ e lst1 n pt)
        (setq e (car(entsel)))
        (xdrx_curve_setclosed e)
        (while (not (equal lst1 '(0 0 0) 1e-3))
                (setq lst1 (xdrx-polyline-compress e t t))
        );;;while
        (setq n (xdrx-polyline-numverts e))
        (setq pt (car (xdrx_entity_getstretchpoint e))
                pt (mapcar '+ pt '(0. 10000. 0.))
        );;;setq
        (xdrx_entity_setproperty
                (XD::Text:Make
                                (list pt)
                                (xdrx-prompt "顶点数为:" n t)
                                "yqz-style"
                                10000.
                                0.7
                                0.
                                "MC"
                );;;xd
                "color" 4
        )
        (princ)
);;;defun

;;;用get:polyline:number 函数测试

(defun c:tt2(/ e n)
        (setq e (car(entsel)))
        (setq n (get:polyline:number e))
        (xdrx_entity_setproperty
                (XD::Text:Make
                                (list (xdrx-polyline-centroid e))
                                (xdrx-prompt "顶点数为:" n t)
                                "yqz-style"
                                10000.
                                0.7
                                0.
                                "MC"
                );;;xd
                "color" 2
        )
        (princ)
);;;defun
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-6-20 18:11:28 | 显示全部楼层
试下 xdrx-points-compress
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-20 18:38:50 | 显示全部楼层
什么情况下,xdrx-polyline-compress 不能清除? 举个具体的例子

多用下容差变量 (xdrx-setvar "tolEqualPoint" xxxx)  (xdrx-document-setprec xxxx 0.1)

点评

之前有个图存在这种情况找不到了。这是我自己绘制的一个lwpolyline多段线,可能不符合绘图的规律。 属于极限测试类型的。用了你们的方法都不能完全清除重复点。  详情 回复 发表于 2020-6-21 20:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-20 18:45:59 | 显示全部楼层
命令: (xdrx-getpropertyvalue (entlast) "numverts")
10

命令: (length (xdrx-points-compress (xdrx-getpropertyvalue (entlast) "vertices")))
4

命令: (xdrx-polyline-compress (entlast))
(6 0 0)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-6-20 20:14:31 | 显示全部楼层
明天测试下。并且将测试图发上
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 914个

财富等级: 财运亨通

发表于 2020-6-21 07:38:17 | 显示全部楼层
很实用的插件,谢谢分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

发表于 2020-6-21 08:04:23 | 显示全部楼层
做一个热心并受欢迎的人
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-6-21 20:19:20 | 显示全部楼层
newer 发表于 2020-6-20 18:38
什么情况下,xdrx-polyline-compress 不能清除? 举个具体的例子

多用下容差变量 (xdrx-setvar "tolEqua ...

之前有个图存在这种情况找不到了。这是我自己绘制的一个lwpolyline多段线,可能不符合绘图的规律。
属于极限测试类型的。用了你们的方法都不能完全清除重复点。

测试图_t3.rar

18.94 KB, 下载次数: 4, 下载积分: D豆 -1 , 活跃度 1

点评

试下 2020.06.22更新的API  详情 回复 发表于 2020-6-22 02:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-6-22 02:42:15 | 显示全部楼层
dyjwyqz5221 发表于 2020-6-21 20:19
之前有个图存在这种情况找不到了。这是我自己绘制的一个lwpolyline多段线,可能不符合绘图的规律。
属于 ...

试下 2020.06.22更新的API
(xdrx-polyline-compress poly [mode])
mode --  1/2/4 位组合

点评

复杂点的图,测试完毕后,图形不一样了。 见附图。 左侧为原图,右侧为用(xdrx-polyline-compress (entlast) 7)处理过的图(未处理前两个图完全相同)。  详情 回复 发表于 2020-6-22 16:47
测试好了。没问题。 其中的1、2、4各代表什么?  详情 回复 发表于 2020-6-22 12:17
谢谢,好的,我测试一下。有你们的支持,一些问题就简单多了,这个网站会越来越火的。我以后有空会多发些东西上来,希望对网站的人脉提升有所贡献。  详情 回复 发表于 2020-6-22 09:25

评分

参与人数 1D豆 +10 收起 理由
dyjwyqz5221 + 10 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

发表于 2020-6-22 07:44:46 | 显示全部楼层
做一个热心并受欢迎的人
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-6-22 09:25:46 | 显示全部楼层
XDSoft 发表于 2020-6-22 02:42
试下 2020.06.22更新的API
(xdrx-polyline-compress poly [mode])
mode --  1/2/4 位组合

谢谢,好的,我测试一下。有你们的支持,一些问题就简单多了,这个网站会越来越火的。我以后有空会多发些东西上来,希望对网站的人脉提升有所贡献。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-6-22 12:17:23 | 显示全部楼层
XDSoft 发表于 2020-6-22 02:42
试下 2020.06.22更新的API
(xdrx-polyline-compress poly [mode])
mode --  1/2/4 位组合

测试好了。没问题。
其中的1、2、4各代表什么?

点评

4是给你干这个的 等下版本API更新 [attachimg]101269[/attachimg]  详情 回复 发表于 2020-6-22 13:31
只消除重点, 可以允许一个线方向多个顶点,用 (xdrx-polyline-compress (entlast) 2)  详情 回复 发表于 2020-6-22 13:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-22 13:06:41 | 显示全部楼层
dyjwyqz5221 发表于 2020-6-22 12:17
测试好了。没问题。
其中的1、2、4各代表什么?

只消除重点, 可以允许一个线方向多个顶点,用
(xdrx-polyline-compress (entlast) 2)

点评

2是干这个的,下版本API更新 [attachimg]101270[/attachimg] 1是合并一个方向上 共线的顶点  详情 回复 发表于 2020-6-22 13:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-22 13:31:42 | 显示全部楼层
dyjwyqz5221 发表于 2020-6-22 12:17
测试好了。没问题。
其中的1、2、4各代表什么?

4是给你干这个的,就是删除掉过终点后还有顶点的
等下版本API更新

搜狗截图20200622133100.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-6-22 13:40:00 | 显示全部楼层
newer 发表于 2020-6-22 13:06
只消除重点, 可以允许一个线方向多个顶点,用
(xdrx-polyline-compress (entlast) 2)

2是干这个的,下版本API更新

搜狗截图20200622133900.jpg


1是合并一个方向上 共线的顶点

评分

参与人数 1D豆 +5 收起 理由
dyjwyqz5221 + 5 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 01:58 , Processed in 0.442660 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表