找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1271|回复: 10

编程申请__配合对象性质作出反应

[复制链接]
发表于 2002-1-21 12:19:43 | 显示全部楼层 |阅读模式

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

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

×
1.可否写出一个[独立的程序]能复制出nested blocks中对象(如expresstools中的ncopy)

2.可否写出程序,只要单一点选对象,即可配合对象性质作出反应,
  对象为line,使用dimlinear......如下列程序所示,但对nested blocks中对象则不会处理,其中点选"LWPOLYLINE" "POLYLINE"更难于分解所点选物为line or arc

  1.   (DEFUN C:WW (/ AAPT)
  2.   (while (null AAPT)
  3.     (setq AAPT (entsel))
  4.   )
  5.   (setq A1 (car AAPT))
  6.   (setq Q%Q (cdr (assoc 0 (entget A1))))
  7.   (cond
  8.     ((or (= Q%Q "LINE") (= Q%Q "MLINE"))
  9.      (command "_.DIMLINEAR" "" AAPT)
  10.     )
  11.     ((= Q%Q "CIRCLE") (command "_.DIMDIAMETER" AAPT))
  12.     ((= Q%Q "ARC") (command "_.DIMRADIUS" AAPT))
  13.     ((= Q%Q "DIMENSION") (command "_.DIMTEDIT" A1))
  14.     ((= Q%Q "LEADER")
  15.      (setq P340 (cdr (assoc 340 (entget A1))))
  16.      (setq P340ENTGET10 (cdr (assoc 10 (entget P340))))
  17.      (command "_.move" P340ENTGET10 "")
  18.     )
  19.     ((= Q%Q "MTEXT") (command "_.DDEDIT" AAPT))
  20.     ((= Q%Q "TEXT") (command "_.DDEDIT" AAPT))
  21.     ((= Q%Q "HATCH")
  22.      (initdia 1)
  23.      (command "_.HATCHEDIT" AAPT)
  24.      (initdia 0)
  25.     )
  26.     ;((= Q%Q "ATTDEF") (command "_.DDEDIT" AAPT))
  27.     ;((= Q%Q "ATTRIB") (command "_.DDATTE" AAPT))
  28.     ;((= Q%Q "SPLINE") (command "_.SPLINEDIT" AAPT))
  29.     ((= Q%Q "TOLERANCE") (command "_.DDEDIT" AAPT))
  30.   )
  31. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-1-21 12:44:17 | 显示全部楼层

  1. 点选"LWPOLYLINE" "POLYLINE"更难于分解所点选物为line or arc

复制代码



这句话如何理解? 选POLYLINE,LWPOLINE 怎么判断是LINE或者ARC ?

是指鼠标点取的那“一段”吗?对于一个整体的POLYLINE,如是这个分析,那你要判断LINE或者ARC有什么用途?进行什么操作?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 23个

财富等级: 恭喜发财

发表于 2002-1-21 23:05:46 | 显示全部楼层

回复: 编程申请__配合对象性质作出反应

最初发表由 LUCAS
[B]1.可否写出一个[独立的程序]能复制出nested blocks中对象(如expresstools中的ncopy)

2.可否写出程序,只要单一点选对象,即可配合对象性质作出反应,
  对象为line,使用dimlinear......如下列程序所示,但对nested blocks中对象则不会处理,其中点选"LWPOLYLINE" "POLYLINE"更难于分解所点选物为line or arc

  1.   (DEFUN C:WW (/ AAPT)
  2.   (while (null AAPT)
  3.     (setq AAPT (entsel))
  4.   )
  5.   (setq A1 (car AAPT))
  6.   (setq Q%Q (cdr (assoc 0 (entget A1))))
  7.   (cond
  8.     ((or (= Q%Q "LINE") (= Q%Q "MLINE"))
  9.      (command "_.DIMLINEAR" "" AAPT)
  10.     )
  11.     ((= Q%Q "CIRCLE") (command "_.DIMDIAMETER" AAPT))
  12.     ((= Q%Q "ARC") (command "_.DIMRADIUS" AAPT))
  13.     ((= Q%Q "DIMENSION") (command "_.DIMTEDIT" A1))
  14.     ((= Q%Q "LEADER")
  15.      (setq P340 (cdr (assoc 340 (entget A1))))
  16.      (setq P340ENTGET10 (cdr (assoc 10 (entget P340))))
  17.      (command "_.move" P340ENTGET10 "")
  18.     )
  19.     ((= Q%Q "MTEXT") (command "_.DDEDIT" AAPT))
  20.     ((= Q%Q "TEXT") (command "_.DDEDIT" AAPT))
  21.     ((= Q%Q "HATCH")
  22.      (initdia 1)
  23.      (command "_.HATCHEDIT" AAPT)
  24.      (initdia 0)
  25.     )
  26.     ;((= Q%Q "ATTDEF") (command "_.DDEDIT" AAPT))
  27.     ;((= Q%Q "ATTRIB") (command "_.DDATTE" AAPT))
  28.     ;((= Q%Q "SPLINE") (command "_.SPLINEDIT" AAPT))
  29.     ((= Q%Q "TOLERANCE") (command "_.DDEDIT" AAPT))
  30.   )
  31. )
[/B]



问题是每个人在点选对象后要做什么是不同的啊,就算是一个同对象,我这时候想Copy它,过会儿我又要Mirror它...,故而专门去这样写一个程序可能不是个好方法,还是要熟练掌握AutoCAD的基本功能和尽可能多的技巧,再辅助以一些高效程序,就....
总之,从A到B有好几种选择,关键是我们能很清楚的知道,哪一种是"最佳"的.
:b
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-1-22 00:46:30 | 显示全部楼层
思路有点意思。

可以考虑写一个edit命令,
对不同的物体调用不同的edit命令。
如,点中hatch, 用hatchedit
点中pline, 用pedit
点中attribute, 用ddatte
不过,这种功能好像acad2002双击包含进去了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-1-22 08:06:59 | 显示全部楼层
就是鼠标点取"LWPOLYLINE" "POLYLINE"的那“一段”,
当解出是line时,用指令dimlinear
         arc时,用指令dimradius

这是一个多用途指令,如前所述程序,它能简化指令操作,把标注尺寸、修改文字、修改剖面线、修改几何公差、修改引线、修改属性……..还有…..,但我对点选"LWPOLYLINE" "POLYLINE"的那一段不会解出, 对nested block(蜂巢式区块)中对象更是不清楚如何解出点选物

更深一层想在点选"DIMENSION"对象的不同部份时,也可作出不同反应,
点选文字部份用指令"_.DDEDIT"
点选非文字部份(标注线及箭头)用指令"_.DIMTEDIT"

以上是单一点选功能构想
望高手指导
1.从nested block(蜂巢式区块)中复制对象
2.点选"LWPOLYLINE" "POLYLINE"的那一段解出

PS:这种功能有部份mdt6.0及acadm2000双击包含进去了,但没有构想中单一点选那么好用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-1-22 10:27:21 | 显示全部楼层
最初发表由 LUCAS
[B]就是鼠标点取"LWPOLYLINE" "POLYLINE"的那“一段”,
当解出是line时,用指令dimlinear
         arc时,用指令dimradius

这是一个多用途指令,如前所述程序,它能简化指令操作,把标注尺寸、修改文字、修改剖面线、修改几何公差、修改引线、修改属性……..还有…..,但我对点选"LWPOLYLINE" "POLYLINE"的那一段不会解出, 对nested block(蜂巢式区块)中对象更是不清楚如何解出点选物

更深一层想在点选"DIMENSION"对象的不同部份时,也可作出不同反应,
点选文字部份用指令"_.DDEDIT"
点选非文字部份(标注线及箭头)用指令"_.DIMTEDIT"

以上是单一点选功能构想
望高手指导
1.从nested block(蜂巢式区块)中复制对象
2.点选"LWPOLYLINE" "POLYLINE"的那一段解出

PS:这种功能有部份mdt6.0及acadm2000双击包含进去了,但没有构想中单一点选那么好用 [/B]


xdrx_api已经有现成的函数了:


269. xdrx_polyline_segtype

功能:返回POLYLINE上的一个指定点下面曲线段的类型

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

返回值:字符串

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

270. xdrx_polyline_getArcSegAt

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

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

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


271. xdrx_polyline_getLineSegAt

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

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

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

使用道具 举报

 楼主| 发表于 2002-1-22 12:59:42 | 显示全部楼层
(xdrx_polyline_segtype (car (entsel)) <顶点位置>)  
功能:返回POLYLINE指定顶点下面曲线段的类型


如何用程序求得我点选的位置落在那个<顶点位置>

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-1-22 13:03:51 | 显示全部楼层
最初发表由 LUCAS
[B](xdrx_polyline_segtype (car (entsel)) <顶点位置>)  
功能:返回POLYLINE指定顶点下面曲线段的类型


如何用程序求得我点选的位置落在那个<顶点位置>

:6 [/B]


我把所有的XDRX_API关于POLYLINE的函数给你吧,你可以用下面的函数组合来实现你的功能,希望写好后,能给大家贴到论坛来,谢谢。

思路是:根据顶点数目循环(可以用xdrx_polyline_numVerts得到),调用xdrx_polyline_segType,xdrx_polyline_onSegAt
来判断(cadr entsel)的点下面的弧段类型。

需要注意的是:若你用entsel函数,(cadr entsel)后的点要调用osnap函数的 near,保证点在曲线上,或者调用xdrx_entsel代替entsel,xdrx_entsel可以过滤,也可以保证得到的点在曲线最近点。还有个方法,就是若你用entsel,那么得到点后,可以调用曲线类的xdrx_curve_ClosestPoint来得到最近点:)

250. xdrx_curve_ClosestPoint

功能:获得曲线外点到曲线最近距离曲线上的点,或者两条曲线间最近距离的点。

调用格式:(xdrx_curve_ClosestPoint <曲线实体名> <曲线外点>)
         (xdrx_curve_ClosestPoint <曲线实体名> <曲线实体名>)
         
返回值:表(距离 曲线1点 曲线2点)   

======================================================================XDRX_API关于POLYLINE(LWPOLYLINE)的函数

268. xdrx_polyline_numVerts

功能:获得LWPOLYLINE的顶点数

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

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

269. xdrx_polyline_segtype

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

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

返回值:字符串

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

270. xdrx_polyline_getArcSegAt

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

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

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


271. xdrx_polyline_getLineSegAt

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

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

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

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

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

273. xdrx_polyline_getWidthsAt

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

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

274. xdrx_polyline_getBulgeAt

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

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

275. xdrx_polyline_onSegAt

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

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

276. xdrx_polyline_elevation

功能:获得POLYLINE的ELEV

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

277. xdrx_polyline_getConstantWidth

功能:获得LWPOLYLINE的等宽度

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

278. xdrx_polyline_hasPlinegen

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

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

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

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

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

280. xdrx_polyline_hasBulges

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

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

281. xdrx_polyline_isOnlyLines

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

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

282. xdrx_polyline_thickness

功能:获得POLYLINE的thickness

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

283. xdrx_polyline_addVertexAt

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

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

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

功能:移去一个顶点

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

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

285. xdrx_polyline_setBulgeAt

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

返回值:成功T,失败NIL

说明:参数bulge值为实数。

286. xdrx_polyline_setConstantWidth

功能:设置POLYLINE的等宽值

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

返回值:成功T ,失败NIL

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

287. xdrx_polyline_setElevation

功能:设置POLYLINE的ELEV

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

288. xdrx_polyline_setNormal

功能:设置POLYLINE的拉伸矢量

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

返回值:成功T 否NIL

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

289. xdrx_polyline_setPlinegen

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

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

返回值:成功T,否NIL

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

290. xdrx_polyline_setPointAt

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

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

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

291. xdrx_polyline_setThickness

功能:设置POLYLINE的THICKNESS

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

292. xdrx_polyline_setWidthsAt

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

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

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

293. xdrx_polyline_ConvertFrom

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

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

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

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

使用道具 举报

 楼主| 发表于 2002-1-22 21:13:37 | 显示全部楼层
用以下程序,已能解出点选LWPOLYLINE为LINE OR ARC
(arxload "XDRX_API14.ARX" NIL)
(defun C:EE (/ A A1 A2 NOS N AA n1)
  (setq A (ENTSEL))
  (setq A1 (car A))
  (setq A2 (cadr A))
  (setq A2 (osnap A2 "NEAR"))
  (setq NOS (XDRX_POLYLINE_NUMVERTS A1))
  (setq N 1)
  (setq AA nil)
  (repeat nos
    (setq AA (XDRX_POLYLINE_ONSEGAT a1 N A2))
     ;;;为甚么XDRX_POLYLINE_ONSEGAT对LWPOLYLINE第一段无效
    (if (/= aa nil)(setq n1 n))
    (setq N (1+ N))
  )
  (IF (= N1 NIL) (SETQ N1 0))
  (setq W (XDRX_POLYLINE_SEGTYPE A1 N1))
  (cond
  ((= w "kLine")(setq w "LINE"))
  ((= w "kArc")(setq w "ARC"))
  )
  (PROMPT (STRCAT "\n你所点选为" W))
  (PRINC)
)

PS:因我使用AUTO2002,但SDRX_API15.ARX我不能加载,
   可否E_MAIL旧版SDRX_API(要有以上API的)给我试试看!!谢谢!!

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-1-22 21:25:23 | 显示全部楼层
最初发表由 LUCAS
[B]用以下程序,已能解出点选LWPOLYLINE为LINE OR ARC
(arxload "XDRX_API14.ARX" NIL)
(defun C:EE (/ A A1 A2 NOS N AA n1)
  (setq A (ENTSEL))
  (setq A1 (car A))
  (setq A2 (cadr A))
  (setq A2 (osnap A2 "NEAR"))
  (setq NOS (XDRX_POLYLINE_NUMVERTS A1))
  (setq N 1)
  (setq AA nil)
  (repeat nos
    (setq AA (XDRX_POLYLINE_ONSEGAT a1 N A2))
     ;;;为甚么XDRX_POLYLINE_ONSEGAT对LWPOLYLINE第一段无效
    (if (/= aa nil)(setq n1 n))
    (setq N (1+ N))
  )
  (IF (= N1 NIL) (SETQ N1 0))
  (setq W (XDRX_POLYLINE_SEGTYPE A1 N1))
  (cond
  ((= w "kLine")(setq w "LINE"))
  ((= w "kArc")(setq w "ARC"))
  )
  (PROMPT (STRCAT "\n你所点选为" W))
  (PRINC)
)

PS:因我使用AUTO2002,但SDRX_API15.ARX我不能加载,
   可否E_MAIL旧版SDRX_API(要有以上API的)给我试试看!!谢谢!!

   E-MAIL: lai_wan_lung@yahoo.com.tw [/B]


不能加载API,有什么提示?前几个帖子我回复了方法,试验过了吗?

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

使用道具 举报

 楼主| 发表于 2002-1-26 15:44:05 | 显示全部楼层
当区块copy至别的位置or旋转or mirror后,对点选位置像素(LWPOLYLINE)不能解出是LINE OR ARC,再烦高手指导.

附目前程序(多功能指令开发中)

  1. (if (wcmatch (getvar "acadver") "15*")
  2. (arxload "XDRX_API15.ARX" NIL)
  3. (arxload "XDRX_API14.ARX" NIL)
  4. )
  5. (defun EE (A / AA A1 A2 N)
  6.   (setq A1 (car A))
  7.   (setq A2 (osnap (cadr A) "NEAR"))
  8.   (setq N 0)
  9.   (while (= AA NIL)
  10.     (setq AA (XDRX_POLYLINE_ONSEGAT A1 N A2))
  11.     (setq N (1+ N))
  12.   )
  13.   (setq W (XDRX_POLYLINE_SEGTYPE A1 (- N 1)))
  14.   (cond
  15.     ((= W "kLine") (setq W "LINE"))
  16.     ((= W "kArc") (setq W "ARC"))
  17.   )
  18.   (princ)
  19. )

  20. (defun C:AUTODIM (/           HOLDOSMODE             HOLDECHO HOLDBLIP P340
  21.                   P340ENTGET10            A1             AAA1     A               AAA
  22.                   AAL           AAPT            Q%Q             Q%Q1     Q%Q11
  23.                  )
  24.   (setq HOLDECHO (getvar "cmdecho"))
  25.   (setq HOLDBLIP (getvar "blipmode"))
  26.   (setq HOLDOSMODE (getvar "osmode"))
  27.   (setvar "cmdecho" 0)
  28.   (setvar "blipmode" 0)
  29.   (setvar "osmode" 0)
  30.   (while (null AAA1)
  31.     (setq AAA1 (nentsel))
  32.   )
  33.   (setq AAL (length AAA1))
  34.   (cond
  35.     ((/= AAL 2)
  36.      (setq AAL (length (last AAA1)))
  37.      (if (= AAL 1)
  38.        (progn
  39.          (setq A1 (car AAA1))
  40.          (setq AAPT (cadr AAA1))
  41.          (setq AAA (entget A1))
  42.          (setq Q%Q (cdr (assoc 0 AAA)))
  43.          (setq Q%Q11 (cdr (assoc 0 (entget (car (last AAA1))))))
  44.          (if (= Q%Q11 "DIMENSION")
  45.            (progn
  46.              (setq Q%Q1 (cdr (assoc 0 (entget (car AAA1)))))
  47.              (cond
  48.                ((or (= Q%Q1 "LINE")
  49.                     (= Q%Q1 "SOLID")
  50.                     (= Q%Q1 "POINT")
  51.                 )
  52.                 (setq Q%Q Q%Q11)
  53.                )
  54.                (t
  55.                 (setq Q%Q "MTEXT")
  56.                )
  57.              )
  58.            )
  59.          )
  60.        )
  61.        (progn
  62.          (setq A1 (car (last AAA1)))
  63.          (setq AAPT (cdr AAA1))
  64.          (setq AAA (entget A1))
  65.          (setq Q%Q (cdr (assoc 0 AAA)))
  66.        )
  67.      )
  68.     )
  69.     ((= AAL 2)
  70.      (setq A1 (car AAA1))
  71.      (setq AAPT (cadr AAA1))
  72.      (setq AAA (entget A1))
  73.      (setq Q%Q (cdr (assoc 0 AAA)))
  74.     )
  75.   )
  76.   (cond
  77.     ((or (= Q%Q "LINE") (= Q%Q "MLINE"))
  78.      (command "_.DIMLINEAR" "" AAPT)
  79.     )
  80.     ((= Q%Q "CIRCLE") (command "_.DIMDIAMETER" AAPT))
  81.     ((= Q%Q "ARC") (command "_.DIMRADIUS" AAPT))
  82.     ((and (= Q%Q "DIMENSION") (/= Q%Q11 "INSERT"))
  83.      (command "_.DIMTEDIT" AAPT)
  84.     )
  85.     ((and (= Q%Q "LEADER") (/= Q%Q11 "INSERT"))
  86.      (setq P340 (cdr (assoc 340 (entget A1))))
  87.      (setq P340ENTGET10 (cdr (assoc 10 (entget P340))))
  88.      (command "_.move" P340ENTGET10 "")
  89.     )
  90.     ((and (= Q%Q "MTEXT") (/= Q%Q11 "INSERT"))
  91.      (command "_.DDEDIT" AAPT)
  92.     )
  93.     ((and (= Q%Q "TEXT") (/= Q%Q11 "INSERT"))
  94.      (command "_.DDEDIT" AAPT)
  95.     )
  96.     ((and (= Q%Q "HATCH") (/= Q%Q11 "INSERT"))
  97.      (initdia 1)
  98.      (command "_.HATCHEDIT" AAPT)
  99.      (initdia 0)
  100.     )
  101.     ((= Q%Q "ATTDEF") (command "_.DDEDIT" AAPT))
  102.     ((= Q%Q "ATTRIB") (command "_.DDATTE" AAPT))
  103.     ((and (= Q%Q "SPLINE") (/= Q%Q11 "INSERT"))
  104.      (command "_.SPLINEDIT" AAPT)
  105.     )
  106.     ((and (= Q%Q "TOLERANCE") (/= Q%Q11 "INSERT"))
  107.      (command "_.DDEDIT" AAPT)
  108.     )
  109.     ((= Q%Q "LWPOLYLINE")
  110.      (EE AAA1)
  111.      (if (= W "LINE")
  112.        (command "_.DIMLINEAR" "" AAPT)
  113.        (command "_.DIMRADIUS" AAPT)
  114.      )
  115.      (setq W NIL)
  116.     )
  117.     ((or (= Q%Q "VERTEX") (= Q%Q "POLYLINE"))
  118.      (setq AA (entget (car AAA1)))
  119.      (setq AAPT (cadr AAA1))
  120.      (setq AAA (cdr (assoc 42 AA)))
  121.      (if (= AAA 0)
  122.        (command "_.DIMLINEAR" "" AAPT)
  123.        (command "_.DIMRADIUS" AAPT)
  124.      )
  125.     )
  126.     ((= Q%Q "INSERT")
  127.      (setq AA (entget (car AAA1)))
  128.      (setq AAPT (cadr AAA1))
  129.      (setq Q%Q (cdr (assoc 0 AA)))
  130.      (cond
  131.        ((or (= Q%Q "LINE") (= Q%Q "MLINE"))
  132.         (command "_.DIMLINEAR" "" AAPT)
  133.        )
  134.        ((= Q%Q "CIRCLE") (command "_.DIMDIAMETER" AAPT))
  135.        ((= Q%Q "ARC") (command "_.DIMRADIUS" AAPT))
  136.        ((= Q%Q "LWPOLYLINE")
  137.         (EE AAA1)
  138.         (if (= W "LINE")
  139.           (command "_.DIMLINEAR" "" AAPT)
  140.           (command "_.DIMRADIUS" AAPT)
  141.         )
  142.         (setq W NIL)
  143.        )
  144.        ((or (= Q%Q "VERTEX") (= Q%Q "POLYLINE"))
  145.         (setq AA (entget (car AAA1)))
  146.         (setq AAPT (cadr AAA1))
  147.         (setq AAA (cdr (assoc 42 AA)))
  148.         (if (= AAA 0)
  149.           (command "_.DIMLINEAR" "" AAPT)
  150.           (command "_.DIMRADIUS" AAPT)
  151.         )
  152.        )
  153.        (t
  154.         (prompt (strcat "\n你所点选为" Q%Q ",本指令暂时无法处理"))
  155.         (prompt "\n不能编辑及标注区块中之非线类")
  156.        )
  157.      )
  158.     )
  159.     (t
  160.      (prompt (strcat "\n你所点选为" Q%Q ",本指令暂时无法处理"))
  161.      (if (= Q%Q11 "INSERT")
  162.        (prompt "\n不能编辑及标注区块中之非线类")
  163.      )
  164.     )
  165.   )
  166.   (setvar "blipmode" HOLDBLIP)
  167.   (setvar "osmode" HOLDBLIP)
  168.   (setvar "cmdecho" HOLDECHO)
  169.   (princ)
  170. )

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 05:38 , Processed in 0.244387 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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