找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1502|回复: 19

[已解决] 使用函数(xdrx_curve->polyline ss)出现的问题

[复制链接]

已领礼包: 202个

财富等级: 日进斗金

发表于 2018-5-11 14:36:53 | 显示全部楼层 |阅读模式
悬赏20D豆已解决
line线变复线时,出现了奇怪的连接,望高手给予解答。我用的api是2018.4.25的版本。 A4V7~XG42$YVU4JH(8V[6YJ.png

最佳答案

查看完整内容

帮你修改下 1、不用创建层,xdrx_setpropertyvalue 或者 xdrx_entity_setlayer 层不存在,自动创建。 2、设置层和设置颜色,可以放到 xdrx_setpropertyvalue 一起,速度更快。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2018-5-24 13:13:51 | 显示全部楼层
用内部选择集进行直线长度的过滤,成功解决了此问题,变复线都没问题了。还是谢谢大家。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2018-5-24 13:32:46 | 显示全部楼层

(defun c:bfx ( / e e1 ss ss1 ss2  oldlay )
        (xdrx_setvar "CMDECHO" 0)
        (xdrx_setvar "osmode" 0)
        (setq oldlay(getvar "clayer"));;;获取当前的图层
        (_CreateLayer "0-详图闭合线框")               
          (if (progn
                (prompt "\r选取要变复线的LINE或非封闭复线<退出>:")
                (setq ss (ssget '((-4 . "<OR")
                                        (0 . "LINE")
                                        (-4 . "<and")
                                                (0 . "*POLYLINE")
                                                (39 . 0.0)
                                                (70 . 0)
                                        (-4 . "and>")
                                (-4 . "OR>")                                       
                                )
                        )
                );;;setq
            );;;progn
                (progn
                        (xdrx_begin)
                        (setq ss1(ssadd))
                        (setq ss2(ssadd))
                              ;;;以下用内部选择集进行过滤,解决了图元顺序的问题,变复线很成功。
                        (xdrx_setsstodb ss 0)
                        (while (setq e (xdrx_getentdata 0))
                                (if (>= (xdrx_getpropertyvalue e "length") 250.0)
                                        (ssadd e ss1)
                                );;;if
                        );;;while
                        (if (> (sslength ss1) 0)
                                (progn
                                            (xdrx_curve->polyline ss1)
                                          (xdrx_setsstodb ss1 0)
                                          (while (setq e1 (xdrx_getentdata 0))
                                                (if (xdrx_getpropertyvalue e1 "isclosed")
                                                        (ssadd e1 ss2)
                                                );;;if
                                          );;;while
                                        (xdrx_entity_setLayer ss2 "0-详图闭合线框");;;;改变选择集ss1到"0-详图闭合线框"上。
                                        (xdrx_entity_setColor ss2 6);;;;改变选择集实体颜色。6---颜色号,紫色;
                                            (prompt (strcat "\n选择了 " (itoa (sslength ss1)) " 个实体,转换成了 "
                                                                                (itoa (sslength ss2)) " 个封闭复线.\n")
                                        );;;prompt
                                );;progn
                                (prompt "\n未选择到长度>=375.0的直线或非封闭复线!\n")
                        );;;if        
                );;;progn
                (prompt "\n未选择到直线或非封闭复线!\n")                                                                  
        );;;if
        (setvar "clayer" oldlay) ;;;;;图层回到原先的图层        
        (xdrx_end)
        (xdrx_setvar "CMDECHO" 1)
        (xdrx_setvar "osmode" 1)
        (princ)
);;;defun

点评

帮你修改下 1、不用创建层,xdrx_setpropertyvalue 或者 xdrx_entity_setlayer 层不存在,自动创建。 2、设置层和设置颜色,可以放到 xdrx_setpropertyvalue 一起,速度更快。  详情 回复 发表于 2018-5-24 13:57
(xdrx_setvar "CMDECHO" 0) (xdrx_setvar "osmode" 0) 去掉,改成: (xdrx_sysvar_push '("osmode" 0 "cmdecho" 0)) 最后的 (xdrx_setvar "CMDECHO" 1) (xdrx_setvar "osmode" 1) 去掉 改成: (x  详情 回复 发表于 2018-5-24 13:44
这个代码,可以简化下 (prompt (strcat "\n选择了 " (itoa (sslength ss1)) " 个实体,转换成了 " (itoa (sslength ss2)) " 个封闭复线.\n  详情 回复 发表于 2018-5-24 13:41
这个代码做什么的,楼主? 最好配上个动图。  详情 回复 发表于 2018-5-24 13:38

评分

参与人数 1D豆 +5 收起 理由
newer + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-5-11 14:36:54 | 显示全部楼层
本帖最后由 newer 于 2018-5-24 14:53 编辑
dyjwyqz5221 发表于 2018-5-24 13:32
(defun c:bfx ( / e e1 ss ss1 ss2  oldlay )
        (xdrx_setvar "CMDECHO" 0)
        (xdrx_setva ...

帮你修改下
1、不用创建层,xdrx_setpropertyvalue 或者 xdrx_entity_setlayer 层不存在,自动创建。
2、设置层和设置颜色,可以放到 xdrx_setpropertyvalue 一起,速度更快。

  1. (defun c:bfx (/ e e1 ss ss1 ss2 oldlay)
  2.   (if (and (xdrx_initssget "\r选取要变复线的LINE或非封闭复线<退出>:")
  3.            (setq ss (xdrx_ssget
  4.                       '((-4 . "<OR")
  5.                         (0 . "LINE")
  6.                         (-4 . "<and")
  7.                         (0 . "*POLYLINE")
  8.                         (39 . 0.0)
  9.                         (70 . 0)
  10.                         (-4 . "and>")
  11.                         (-4 . "OR>")
  12.                        )
  13.                     )
  14.            )
  15.       )
  16.     (progn (xdrx_begin)
  17.            (xdrx_sysvar_push '("osmode" 0 "cmdecho" 0))
  18.            (setq ss1 (ssadd))
  19.            (setq ss2 (ssadd))
  20.            (xdrx_setsstodb ss 0)
  21.            (while (setq e (xdrx_getentdata 0))
  22.              (if (>= (xdrx_getpropertyvalue e "length") 250.0)
  23.                (ssadd e ss1)
  24.              )
  25.            )
  26.            (if (> (sslength ss1) 0)
  27.              (progn (xdrx_curve->polyline ss1)
  28.                     (xdrx_setsstodb ss1 0)
  29.                     (while (setq e1 (xdrx_getentdata 0))
  30.                       (if (xdrx_getpropertyvalue e1 "isclosed")
  31.                         (ssadd e1 ss2)
  32.                       )
  33.                     )
  34.                     (xdrx_entity_setproperty ss2 "layer" "0-详图闭合线框" "color" 6)
  35.                     (xdrx_prompt "\n选择了 " (sslength ss1) " 个实体,转换成了 "(sslength ss2) " 个封闭复线.\n")
  36.              )
  37.              (xdrx_prompt "\n未选择到长度>=375.0的直线或非封闭复线!\n")
  38.            )
  39.            (xdrx_sysvar_pop)
  40.            (xdrx_end)
  41.     )
  42.     (xdrx_prompt "\n未选择到直线或非封闭复线!\n")
  43.   )
  44.   (princ)
  45. )


评分

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

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-5-11 14:41:22 | 显示全部楼层
本帖最后由 newer 于 2018-5-11 14:43 编辑

1、所有的讨论基于最新版本的API,所以,你先升级到API到目前的2018.0508版本。2、请把 DWG图压缩传上来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2018-5-11 15:02:05 | 显示全部楼层
XDRX API 有个精度控制,确定那些点是挨着的,如果精度控制过大,就有可能造成距离很远的也被认为是一个点

精度控制的函数是

(xdrx_document_setprec 点精度  向量精度)

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2018-5-11 15:14:38 | 显示全部楼层
使用2018.5.8的api结果一样。 顺便将我编制的变复线lsp命令拷贝进去了,帮忙测试下,看看问题出在哪里了,多谢!!!

变复线.rar

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

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2018-5-11 15:19:41 | 显示全部楼层
精度修改了,结果一样。测试中感觉与选择集里图元的顺序有关系,我的变复线命令里,对直线的长度做了过滤。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2018-5-11 15:32:25 | 显示全部楼层
dyjwyqz5221 发表于 2018-5-11 15:19
精度修改了,结果一样。测试中感觉与选择集里图元的顺序有关系,我的变复线命令里,对直线的长度做了过滤。

确实跟选择集顺序有关,xdrx_curve->polyline最可靠的是给实体名,你明确告诉函数哪两个是相挨着的。
你图中这种,建议你换个函数

(xdrx_setvar "boundaryextendlength" 10.0) ;; 10.0你根据线间隙,自己设置。
(xdrx_geom_searchoutline (ssget '((0 . "*LINE,ARC,ELLIPSE,CIRCLE"))))

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2018-5-11 15:52:11 | 显示全部楼层
应该不是精度的问题,是我将直线选择集对长度小于500的进行了过滤(去掉长度小于500的图元),重新形成选择集的问题。其他图变复线都没问题,只有这个图有问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 315个

财富等级: 日进斗金

发表于 2018-5-11 15:53:34 | 显示全部楼层
这个用ET的flatten 执行过就不会出玩这种情况了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2018-5-11 15:53:48 | 显示全部楼层
如对选择集未进行过滤,虽然得不到自己想要的结果,但是却不出现线段连接错误的问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2018-5-11 16:14:45 | 显示全部楼层
dyjwyqz5221 发表于 2018-5-11 15:53
如对选择集未进行过滤,虽然得不到自己想要的结果,但是却不出现线段连接错误的问题。

关键是你中间有个竖短线,多上它,会有很多组合,你选择集去掉它,在生成试试。给选择集做参数,有很多未知可能,哪些在一起,哪些不在一起,所以,你给的选择集要处理到确实能连到一起的。
最准确的是 (xdrx_curve->polyline e1 e2 .....en)


你这样的图,最好用 (xdrx_geom_searchregions (ssget)) 和 (xdrx_geom_searchoutline (ssget))

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2018-5-11 16:42:31 | 显示全部楼层
好的,我试试,谢谢大家的帮助。我们是审图中心的,图纸是其他设计单位出的,情况很多,所以难免会出现异常的情况,很难做到全覆盖。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-5-24 13:38:21 | 显示全部楼层
dyjwyqz5221 发表于 2018-5-24 13:32
(defun c:bfx ( / e e1 ss ss1 ss2  oldlay )
        (xdrx_setvar "CMDECHO" 0)
        (xdrx_setva ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 23:15 , Processed in 0.454349 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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