找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1031|回复: 3

[求助] [求助]:如何消除多义线重复的顶点?

[复制链接]
发表于 2002-8-5 12:22:36 | 显示全部楼层 |阅读模式

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

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

×
我用xdrx_GetPolyVtx取多义线的顶点表,用于构造ssget集。但是由于存在重复点,构造常失败。。如何消除这种重复顶点。?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-8-5 18:09:39 | 显示全部楼层

Re: [求助]:如何消除多义线重复的顶点?

最初由 matichen 发布
[B]我用xdrx_GetPolyVtx取多义线的顶点表,用于构造ssget集。但是由于存在重复点,构造常失败。。如何消除这种重复顶点。? [/B]


首先你要判断出哪些是重复的,然后就好办了,XDRX_API提供了

284. xdrx_polyline_removeVertexAt

功能:移去一个顶点

调用格式:(xdrx_polyline_removeVertexAt <LWPOLYLINE实体名> <index索引值>)     
          (xdrx_polyline_removeVertexAt  <index索引值>)   
         
返回值:成功T 失败NIL

说明:移去一个定点,意味着该顶点后的曲线段也移去。

判断是否有重复顶点,使用XDRX_API也是很方便的,XDRX_API提供了ObjectARX 库关于POLYLINE实体的所用函数。


  1. [FONT=courier new]
  2. 268. xdrx_polyline_numVerts

  3. 功能:获得LWPOLYLINE的顶点数

  4. 调用格式: (xdrx_polyline_numVerts <LWPOLYLINE对象名>)
  5.            (xdrx_polyline_numVerts)
  6.            
  7. 返回值:成功返回整数,否 NIL

  8. 说明:不给参数,使用当前系统对象栈顶的对象。

  9. 269. xdrx_polyline_segtype

  10. 功能:返回POLYLINE上的顶点下面曲线段的类型

  11. 调用格式:(xdrx_polyline_segtype <LWPOLYLINE对象名> <顶点位置>)
  12.           (xdrx_polyline_segtype <顶点位置>)

  13. 返回值:字符串

  14. 说明:顶点类型- "kLine" ,"kPoint","Kempty","kArc"

  15. 270. xdrx_polyline_getArcSegAt

  16. 功能:获得一个弧段顶点的弧数据

  17. 调用格式:(xdrx_polyline_getArcSegAt <LWPOLYLINE对象名> <顶点位置>)
  18.           (xdrx_polyline_getArcSegAt <顶点位置>)
  19.          
  20. 返回值:  (圆心 半径 起始角 终止角)

  21. 例子:Command: (xdrx_polyline_getarcsegat 2) ;;计算对象堆栈顶的LWPOLYLINE对象
  22.                ((42260.6 17638.3 0.0) 5260.35 6.09389 1.66863)        


  23. 271. xdrx_polyline_getLineSegAt

  24. 功能:获得一个直线段顶点的直线段数据

  25. 调用格式:(xdrx_polyline_getLineSegAt <LWPOLYLINE对象名> <顶点位置>)
  26.           (xdrx_polyline_getLineSegAt <顶点位置>)
  27.          
  28. 返回值:  (起点 终点)

  29. 例子 Command: (xdrx_polyline_getlinesegat (car (entsel)) 1)
  30.      Select object: ((45221.1 5134.88 0.0) (47427.0 16648.4 0.0))
  31.      
  32. 272. xdrx_polyline_getPointgAt

  33. 功能:获得指定顶点位置的点

  34. 调用格式:(xdrx_polyline_getPointgAt <LWPOLYLINE实体名> <顶点索引位置>)
  35.           (xdrx_polyline_getPointgAt <顶点索引位置>)   
  36.          
  37. 返回值:点

  38. 273. xdrx_polyline_getWidthsAt

  39. 功能:获得顶点索引位置后曲线段的起始宽度,终止宽度。

  40. 调用格式:(xdrx_polyline_getWidthsAt <LWPOLYLINE实体名> <顶点索引位置>
  41.           (xdrx_polyline_getWidthsAt <顶点索引位置>   
  42.          
  43. 返回值:(起始宽度 终止宽度)

  44. 274. xdrx_polyline_getBulgeAt

  45. 功能:获得指定索引位置弧段的凸度值。

  46. 调用格式:(xdrx_polyline_getBulgeAt <LWPOLYLINE实体名> <顶点索引位置>)
  47.           (xdrx_polyline_getBulgeAt <顶点索引位置>)
  48.          
  49. 返回值:实数

  50. 275. xdrx_polyline_onSegAt

  51. 功能:判断一个点是否在以指定的顶点索引开始的曲线段上,若是,返回该点的参数值。

  52. 调用格式:(xdrx_polyline_onSegAt <LWPOLYLINE实体名> <顶点索引值> <测试点>)
  53.           (xdrx_polyline_onSegAt <顶点索引值> <测试点>)
  54.          
  55. 返回值:若在,实数(该点处的曲线参数值),否NIL

  56. 276. xdrx_polyline_elevation

  57. 功能:获得POLYLINE的ELEV

  58. 调用格式:(xdrx_polyline_elevation <LWPOLYLINE实体名>)
  59.           (xdrx_polyline_elevation)  ;;对象栈顶
  60.          
  61. 返回值:实数

  62. 277. xdrx_polyline_getConstantWidth

  63. 功能:获得LWPOLYLINE的等宽度

  64. 调用格式:(xdrx_polyline_elevation <LWPOLYLINE实体名>)
  65.           (xdrx_polyline_elevation)  ;;对象栈顶
  66.          
  67. 返回值:实数

  68. 278. xdrx_polyline_hasPlinegen

  69. 功能:测试LWPOLYLINE实体是否是PLINEGEN      

  70. 调用格斯:(xdrx_polyline_hasPlinegen <LWPOLYLINE实体名>)
  71.           (xdrx_polyline_hasPlinegen)  ;;对象栈顶
  72.          
  73. 返回值:布尔值T或者NIL

  74. 说明:如果LWPOLYLINE有PLINEGEN返回T,否NIL
  75.       PLINEGEN是一个属性,引起线型生成是穿过整条POLYLINE,还是在每个单独的段起点终点闭合。
  76.       
  77. 279. xdrx_polyline_hasWidth

  78. 功能:测试POLYLINE是否有宽度。

  79. 调用格式:(xdrx_polyline_hasWidth <LWPOLYLINE实体名>)
  80.           (xdrx_polyline_hasWidth)  ;;对象栈顶
  81.          
  82. 返回值:布尔值,有宽度T 否NIL

  83. 280. xdrx_polyline_hasBulges

  84. 功能:测试POLYLINE是否包含弧段

  85. 调用格式:(xdrx_polyline_hasBulges <LWPOLYLINE实体名>)
  86.           (xdrx_polyline_hasBulges)  ;;对象栈顶
  87.          
  88. 返回值:布尔值,有弧段T 否NIL

  89. 281. xdrx_polyline_isOnlyLines

  90. 功能:测试POLYLINE是否仅仅由直线段组成

  91. 调用格式:(xdrx_polyline_isOnlyLines <LWPOLYLINE实体名>)
  92.           (xdrx_polyline_isOnlyLines)  ;;对象栈顶
  93.          
  94. 返回值:布尔值,是T 否NIL

  95. 282. xdrx_polyline_thickness

  96. 功能:获得POLYLINE的thickness

  97. 调用格式:(xdrx_polyline_thickness <LWPOLYLINE实体名>)
  98.           (xdrx_polyline_thickness)  ;;对象栈顶
  99.          
  100. 返回值:实数

  101. 283. xdrx_polyline_addVertexAt

  102. 功能:在指定索引位置处增加一个顶点

  103. 调用格式:(xdrx_polyline_addVertexat <LWPOLYLINE实体名> <index索引值> <点> [bulge值] [起始宽度][结束宽度])
  104.           (xdrx_polyline_addVertexat <index索引值> <点> [bulge值] [起始宽度][结束宽度])
  105.          
  106. 返回值:成功T, 否 NIL

  107. 说明:参数 [bulge值] [起始宽度][结束宽度]都为可选项,默认值都为0 ,后面的可选项若要设置必须前面的可选项也设置,但
  108.       该可选项后面的若要默认值,可以省略。
  109.       [bulge值]--实数,若加弧段给BULGE值。0退化为直线
  110.       [起始宽度],[结束宽度]--实数值或者整数值。
  111.       
  112. 284. xdrx_polyline_removeVertexAt

  113. 功能:移去一个顶点

  114. 调用格式:(xdrx_polyline_removeVertexAt <LWPOLYLINE实体名> <index索引值>)     
  115.           (xdrx_polyline_removeVertexAt  <index索引值>)   
  116.          
  117. 返回值:成功T 失败NIL

  118. 说明:移去一个定点,意味着该顶点后的曲线段也移去。

  119. 285. xdrx_polyline_setBulgeAt

  120. 功能:在指定的索引位置,设置BULGE值,即若该索引后的段是直线,则变成弧。
  121.       若是弧,则改变到新的BULGE         
  122.       
  123. 调用格式:(xdrx_polyline_setBulgeAt <lwpolyline实体名> <index索引> <bulge值>)
  124.           (xdrx_polyline_setBulgeAt <index索引> <bulge值>)

  125. 返回值:成功T,失败NIL

  126. 说明:参数bulge值为实数。

  127. 286. xdrx_polyline_setConstantWidth

  128. 功能:设置POLYLINE的等宽值

  129. 调用格式:(xdrx_polyline_setConstantWidth <lwpolyline实体名> <宽度值>)
  130.           (xdrx_polyline_setConstantWidth  <宽度值>)

  131. 返回值:成功T ,失败NIL

  132. 说明:参数<宽度值>为实数或者整数

  133. 287. xdrx_polyline_setElevation

  134. 功能:设置POLYLINE的ELEV

  135. 调用格式:(xdrx_polyline_setElevation <lwpolyline实体名> <ELEV值>)
  136.           (xdrx_polyline_setElevation <ELEV值>)
  137.          
  138. 返回值:成功T ,否NIL

  139. 288. xdrx_polyline_setNormal

  140. 功能:设置POLYLINE的拉伸矢量

  141. 调用格式:(xdrx_polyline_setNormal <lwpolyline实体名> <向量>)
  142.           (xdrx_polyline_setNormal <向量>)

  143. 返回值:成功T 否NIL

  144. 说明:<向量>以点的形式输入,如:(0 0 1)

  145. 289. xdrx_polyline_setPlinegen

  146. 功能:设置POLYLINE线型的PLINEGEN属性

  147. 调用格式:(xdrx_polyline_setPlinegen <lwpolyline实体名> [plinegen flag])
  148.           (xdrx_polyline_setPlinegen  [plinegen flag])

  149. 返回值:成功T,否NIL

  150. 说明:[plinegen flag]=T,线性穿过整条曲线,不给参数,线性在每个顶点起始,结束闭合线型。

  151. 290. xdrx_polyline_setPointAt

  152. 功能:修改指定索引处的顶点到新的顶点(不增加新顶点)

  153. 调用格式:(xdrx_polyline_setPointAt <lwpolyline实体名> <indexs索引> <新顶点>)
  154.           (xdrx_polyline_setPointAt <indexs索引> <新顶点>)

  155. 返回值:成功T 失败返回NIL

  156. 291. xdrx_polyline_setThickness

  157. 功能:设置POLYLINE的THICKNESS

  158. 调用格式:(xdrx_polyline_setThickness  <lwpolyline实体名> <thickness值>)   
  159.           (xdrx_polyline_setThickness  <thickness值>)
  160.          
  161. 返回值:成功T 失败NIL

  162. 292. xdrx_polyline_setWidthsAt

  163. 功能:修改指定索引值处下面段的起始、结束宽度

  164. 调用格式:(xdrx_polyline_setWidthsAt <lwpolyline实体名> <index索引> <起始宽度><结束宽度>)
  165.           (xdrx_polyline_setWidthsAt <index索引> <起始宽度><结束宽度>)
  166.          
  167. 返回值:成功T 失败NIL

  168. 说明:<起始宽度><结束宽度>:实数或者整数

  169. 293. xdrx_polyline_ConvertFrom

  170. 功能:从2DPOLYLINE(R13老多义线)转换得到LWPOLYLINE

  171. 调用格式:(xdrx_polyline_ConvertFrom <2dpolyline实体>)

  172. 返回值:成功T 失败返回NIL

  173. 说明:转换后,删除原来老POLY,用新LWPOLY代替
  174. [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-8-5 20:45:40 | 显示全部楼层
看晕菜了。。。还是不太明白啊,就是不知如何判断重复点。能帮忙写段lisp去掉重复点吗, 我才学几天lisp,懂得太少,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-8-5 23:24:42 | 显示全部楼层
最初由 matichen 发布
[B]看晕菜了。。。还是不太明白啊,就是不知如何判断重复点。能帮忙写段lisp去掉重复点吗, 我才学几天lisp,懂得太少, [/B]


你用上面的API函数,循环处理每个顶点,判断前后两个点间的距离是否小于一个你认为是重合的数,如果小于(说明重合),那么用xdrx_polyline_removeVertexAt函数删除顶点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 05:03 , Processed in 0.192003 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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