找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1921|回复: 12

(完成)[编程申请]:如何将ucs定义与指定的带宽度的多义线吻合

[复制链接]
发表于 2002-9-20 23:03:05 | 显示全部楼层 |阅读模式

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

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

×
如何将ucs定义与指定的带宽度的多义线吻合?这在用多义线建模的时候很有用。我收集了一个可以在r14下实现该功能的lsp,为什么在2002下不能用?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-20 23:12:32 | 显示全部楼层
你用命令:

UCS
OB

设置,不能满足要求吗?

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

使用道具 举报

 楼主| 发表于 2002-9-20 23:34:59 | 显示全部楼层
不能啊。“ob"之后还是平行于wcs的,ucs的z轴方向没变化,而我贴的ucsline在r14中是好用的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-20 23:39:15 | 显示全部楼层
最初由 nmsssb 发布
[B]不能啊。“ob"之后还是平行于wcs的,ucs的z轴方向没变化,而我贴的ucsline在r14中是好用的。 [/B]



X,Y轴是随着多义线的角度转的,Z轴符合右手螺旋垂直XY平面。

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

使用道具 举报

 楼主| 发表于 2002-9-20 23:55:31 | 显示全部楼层
如图是UCS,NEW,OB的效果,我的编程申请是能使图中UCS的X轴不变,图中Z轴变成Y轴,并且通过点击多义线一次便可实现从其他任何UCS变过来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-21 01:11:54 | 显示全部楼层
最初由 nmsssb 发布
[B]如图是UCS,NEW,OB的效果,我的编程申请是能使图中UCS的X轴不变,图中Z轴变成Y轴,并且通过点击多义线一次便可实现从其他任何UCS变过来。 [/B]


交互过程如下:


  1. [FONT=courier new]
  2. 命令: ucs

  3. 当前 UCS 名称: *没有名称*
  4. 输入选项
  5. [新建(N)/移动(M)/正交(G)/上一个(P)/恢复(R)/保存(S)/删除(D)/应用(A)/?/世界(W)]
  6. <世界>: ob

  7. 选择对齐 UCS 的对象:
  8. [/FONT]
复制代码


上面执行后,原点到POLYLINE的起点,下面交互旋转Z轴:


  1. [FONT=courier new]
  2. 命令:
  3. UCS
  4. 当前 UCS 名称: *没有名称*
  5. 输入选项
  6. [新建(N)/移动(M)/正交(G)/上一个(P)/恢复(R)/保存(S)/删除(D)/应用(A)/?/世界(W)]
  7. <世界>: n

  8. 指定新 UCS 的原点或 [Z 轴(ZA)/三点(3)/对象(OB)/面(F)/视图(V)/X/Y/Z] <0,0,0>: za

  9. 指定新原点 <0,0,0>:

  10. 在正 Z 轴范围上指定点 <0,0,1>: 0,-1,0
  11. [/FONT]
复制代码


几个概念:X,Y,Z轴代表的向量,WCS下分别是:(0 0 1)、(0 1 0)、(0 0 1).

上面提示Z轴方向的时候,给0,-1,0,表示新Z轴在现在的Y轴的负方向。

得到下面图:


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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-21 01:16:03 | 显示全部楼层
上面交互过程写成LISP如下(请在晓东工具箱环境下使用):


  1. [FONT=courier new]
  2. (defun c:UCS_Z(/ e)
  3.    (if (setq e (car (xdrx_entsel "\n请选取一个POLYLINE<退出>:" '((0 . "*polyline")))))
  4.      (progn
  5.         (command "._ucs" "ob" e)
  6.         (command "._ucs" "n" "za" "" '(0 -1 0))
  7.      )
  8.    )
  9.    (pirnc)
  10. )
  11. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2002-9-24 20:46:43 | 显示全部楼层
其实还是要解决一个问题,
我前面问过的Polyline的问题,点不管哪一小段,怎么得到这一小段的起点和终点
这样就可以把ucs转到这一小段上了,并沿这pl线的厚度方向 设Z
晓东帮忙写一个吧,很有用的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-24 20:57:27 | 显示全部楼层
最初由 aeo 发布
[B]其实还是要解决一个问题,
我前面问过的Polyline的问题,点不管哪一小段,怎么得到这一小段的起点和终点
这样就可以把ucs转到这一小段上了,并沿这pl线的厚度方向 设Z
晓东帮忙写一个吧,很有用的 [/B]


我贴过很多次的XDRX_API关于POLYLINE的处理函数,所有的ARX方法都提供接口给LISP了,组合下,有条件的朋友完全可以自己得到具体的段。

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-24 22:16:01 | 显示全部楼层
最初由 aeo 发布
[B]其实还是要解决一个问题,
我前面问过的Polyline的问题,点不管哪一小段,怎么得到这一小段的起点和终点
这样就可以把ucs转到这一小段上了,并沿这pl线的厚度方向 设Z
晓东帮忙写一个吧,很有用的 [/B]


给你写了个通用函数,去体会下XDRX_API处理POLYLINE的用法:

  1. [FONT=courier new]
  2. ;|
  3.    用法:($XDLSP_PolyLine_getSegAt <多义线实体名> <测试点>)
  4.    获得一个*POLYLINE线上指定一点处的“段”的信息。
  5.    对于直线段返回:(顶点索引 "kLine" 起点 终点)
  6.    对于弧线段返回:(顶点索引 "kArc" 圆心 半径 起始角 终止角)
  7.    所有返回点在UCS下。
  8. |;
  9. (defun $XDLSP_PolyLine_getSegAt (e pt / cNa tf i nNums eTyl eSegData el tf1
  10.                                    tf2
  11.                                 )
  12.   (setq cNa (car (xdrx_Object_ClassName e)))
  13.   (if (wcmatch cNa "*POLYLINE")
  14.     (progn
  15.       (setq tf t)
  16.       (if (setq tf (= cNa "POLYLINE"))
  17.         (setq tf (xdrx_polyline_ConvertFrom e)
  18.               tf2 tf
  19.         )
  20.         (setq tf t)
  21.       )
  22.       (if tf
  23.         (progn
  24.           (setq nNums (xdrx_polyline_numVerts e)
  25.                 i -1
  26.           )
  27.           (setq tf1 t)
  28.           (while (and
  29.                    tf1
  30.                    (< i nNums)
  31.                  )
  32.             (if (xdrx_polyline_onSegAt e (setq i (1+ i))
  33.                                        pt
  34.                 )
  35.               (progn
  36.                 (setq eTyl (xdrx_polyline_segtype e i)
  37.                       eSegData (cond
  38.                                  ((= "kLine" eTyl)
  39.                                    (xdrx_polyline_getLineSegAt e i)
  40.                                  )
  41.                                  ((= "kArc")
  42.                                    (xdrx_polyline_getArcSegAt e i)
  43.                                  )
  44.                                )
  45.                       el (cons i (cons eTyl eSegData))
  46.                       tf1 nil
  47.                 )
  48.               )
  49.             )
  50.           )
  51.         )
  52.       )
  53.       (if tf2
  54.         (xdrx_polyline->2dpolyline e)
  55.       )
  56.     )
  57.   )
  58.   el
  59. )
  60. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-26 18:12:32 | 显示全部楼层
最初由 aeo 发布
[B]搞晕了
一直以为entsel获得的点,不一定在线上的.
苯呀,没办法 [/B]


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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-26 18:16:58 | 显示全部楼层

设置POLYLINE段UCS的程序写好了。


;| 命令:XDTB_SetPolyLineUcs
  功能:根据在POLYLINE上拾取的点设置UCS,UCS原点为包括该点的那个段的起点,X轴为这个直线段的方向,Y轴是POLYLINE的厚度方向。
|;


  1. [FONT=courier new]
  2. ;|
  3.    用法:($XDLSP_PolyLine_getSegAt <多义线实体名> <测试点>)
  4.    获得一个*POLYLINE线上指定一点处的“段”的信息。
  5.    对于直线段返回:(顶点索引 "kLine" 起点 终点)
  6.    对于弧线段返回:(顶点索引 "kArc" 圆心 半径 起始角 终止角)
  7.    所有返回点在UCS下。
  8. |;
  9. (defun $XDLSP_PolyLine_getSegAt (e pt / cNa tf i nNums eTyl eSegData el tf1
  10.                                    tf2
  11.                                 )
  12.   (setq cNa (car (xdrx_Object_ClassName e)))
  13.   (if (wcmatch cNa "*POLYLINE")
  14.     (progn
  15.       (setq tf t)
  16.       (if (setq tf (= cNa "POLYLINE"))
  17.         (setq tf (xdrx_polyline_ConvertFrom e)
  18.               tf2 tf
  19.         )
  20.         (setq tf t)
  21.       )
  22.       (if tf
  23.         (progn
  24.           (setq nNums (xdrx_polyline_numVerts e)
  25.                 i -1
  26.           )
  27.           (setq tf1 t)
  28.           (while (and
  29.                    tf1
  30.                    (< i nNums)
  31.                  )
  32.             (if (xdrx_polyline_onSegAt e (setq i (1+ i))
  33.                                        pt
  34.                 )
  35.               (progn
  36.                 (setq eTyl (xdrx_polyline_segtype e i)
  37.                       eSegData (cond
  38.                                  ((= "kLine" eTyl)
  39.                                    (xdrx_polyline_getLineSegAt e i)
  40.                                  )
  41.                                  ((= "kArc")
  42.                                    (xdrx_polyline_getArcSegAt e i)
  43.                                  )
  44.                                )
  45.                       el (cons i (cons eTyl eSegData))
  46.                       tf1 nil
  47.                 )
  48.               )
  49.             )
  50.           )
  51.         )
  52.       )
  53.       (if tf2
  54.         (xdrx_polyline->2dpolyline e)
  55.       )
  56.     )
  57.   )
  58.   el
  59. )

  60. ;| 命令:XDTB_SetPolyLineUcs
  61. 功能:根据在POLYLINE上拾取的点设置UCS,UCS原点为包括
  62. 该点的那个段的起点,X轴为这个直线段的方向,Y轴是POLYLINE的厚度方向。
  63. |;

  64. (defun c:XDTB_SetPolyLineUcs (/ e normal vX vY pY)
  65.   (if (setq e (xdrx_entsel "\n请点取一个对齐POLYLINE厚度方向的POLYLINE实体<退出>:"
  66.                            '((0 . "*POLYLINE"))
  67.               )
  68.       )
  69.     (progn
  70.       (setq normal (xdrx_getentdxf 210)
  71.             el ($XDLSP_PolyLine_getSegAt (car e) (trans (cadr e) 1 0))
  72.       )
  73.       (if el
  74.         (progn
  75.           (setq Origin (trans (nth 2 el) 1 0))
  76.           (if (= "kLine" (cadr el))
  77.             (progn
  78.               (setq pX (trans (nth 3 el) 1 0)
  79.                     vX (mapcar
  80.                          '-
  81.                          pX
  82.                          Origin
  83.                        )
  84.                     vY (xdrx_vector_PerpVector vX)
  85.                     pY (mapcar
  86.                          '+
  87.                          Origin
  88.                          normal
  89.                        )
  90.               )
  91.             )
  92.           )
  93.           (command "._UCS" "w")
  94.           (command "._UCS" "3" Origin pX pY)
  95.         )
  96.       )
  97.     )
  98.   )
  99.   (princ)
  100. )
  101. [/font]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 02:51 , Processed in 0.527042 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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