找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 920|回复: 4

[求助] [求助]:关于entget获取实体信息的问题!!

[复制链接]
发表于 2004-1-4 23:54:17 | 显示全部楼层 |阅读模式

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

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

×
整个操作步骤如下:
1。设置UCS坐标:
(command "ucs" "z" 90)
(command "ucs" "x" 180)

2。绘制一条PLINE线
3。运行(setq ent (entget (entlast)))后得到如下信息:
((-1 . <图元名: 4006ad58>) (0 . "LWPOLYLINE") (330 . <图元名: 4006acf8>) (5 .
"2B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
"AcDbPolyline") (90 . 6) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 -130.443
133.054) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -159.732 176.953) (40 . 0.0) (41
. 0.0) (42 . 0.0) (10 -181.969 131.97) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10
-200.41 194.839) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -225.902 134.138) (40 .
0.0) (41 . 0.0) (42 . 0.0) (10 -248.682 179.663) (40 . 0.0) (41 . 0.0) (42 .
0.0) (210 1.22461e-016 -2.71917e-032 -1.0))
4。运行LIST得到如下信息:

                  LWPOLYLINE  图层: 0
                            空间: 模型空间
                   句柄 = 2B
        打开
    固定宽度    0.0000
        面积   267.6466
        长度   285.2138

      于端点  X= 133.0538  Y= 130.4431  Z=   0.0000
      于端点  X= 176.9535  Y= 159.7317  Z=   0.0000
      于端点  X= 131.9699  Y= 181.9694  Z=   0.0000
      于端点  X= 194.8385  Y= 200.4104  Z=   0.0000
      于端点  X= 134.1378  Y= 225.9024  Z=   0.0000
      于端点  X= 179.6633  Y= 248.6825  Z=   0.0000

------------------------
请问如何才能将entget得到的(10 -248.682 179.663)等信息转化为
list命令的那种 X= 179.6633  Y= 248.6825  Z=   0.0000,数据啊??
知道使用trans函数,可是具体怎么用啊??
谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-1-5 00:32:38 | 显示全部楼层

Re: [求助]:关于entget获取实体信息的问题!!

最初由 HillMan 发布
[B]整个操作步骤如下:
1。设置UCS坐标:
(command "ucs" "z" 90)
(command "ucs" "x" 180)

2。绘制一条PLINE线
3。运行(setq ent (entget (entlast)))后得到如下信息:
((-1 . <图元名: 4006ad58>) (0 . "LWPO... [/B]

  1. Translates a point (or a displacement) from one coordinate system to another

  2. (trans pt from to [disp])

  3. Arguments

  4. pt

  5. A list of three reals that can be interpreted as either a 3D point or a 3D displacement (vector).

  6. from

  7. An integer code, entity name, or 3D extrusion vector identifying the coordinate system in which
  8. pt is expressed. The integer code can be one of the following:

  9. 0  World (WCS)

  10. 1  User (current UCS)

  11. 2  If used with code 0 or 1, this indicates the Display Coordinate System (DCS) of the current viewport.
  12. When used with code 3, it indicates the DCS of the current model space viewport.

  13. 3  Paper space DCS (used only with code 2)
复制代码

对你说的情况

  1. _$ (trans (cdr (assoc 10 (entget (entlast)))) 0 1)
  2. (279.901 -391.73 -4.79716e-014)
复制代码

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

使用道具 举报

发表于 2004-1-5 01:30:19 | 显示全部楼层
(10 -248.682 179.663)等信息转化为list命令的那种 X= 179.6633 Y= 248.6825 Z= 0.0000


  1. (setq  e (car(entsel))
  2.           ...
  3.           z (cdr (assoc 38 (entget e)))
  4.         ...
  5.          pt (cdr (assoc 10 (entget e)))
  6.          ...)
  7. (princ (strcat "\n于端点 X= " (rtos (cadr pt) 2 4)  " Y= " (rtos (car pt) 2 4) " Z= " (rtos z 2 4)  "\n"))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-1-28 19:26:43 | 显示全部楼层
最初由 HillMan 发布
[B]谢谢楼上二位,已经做了一个矩阵,硬给转换过来了!!
呵呵!!! [/B]

语法

    (trans pt from to [disp])

功能及参数

    此函数可以将一个点的坐标值 (或一个位移量) 从某一坐标系统转换
到另一个坐标系统。pt参数个含有三个实型数的串列, 可以解释成一个 3D
的点或一个 3D 的位移 (向量)。from 这个参数是一个代码 (Code), 代表
pt 所在的坐标系统, 而 to 这个参数也是一个代码, 代表 pt 所想要转换
到的坐标系统 。disp 参数是可有可无的, 假如此参数存在而且其值并非
nil, 则 pt 所代表的就是一个 3D 的位移而不是一个点。下列所述的任何
一个代码均可为 from 和 to 的参数。

    ● 下表所列出的是坐标系统整型数码:

码      坐标系统

0      通用坐标系统 (WCS)

1      用户坐标系统 (UCS)

2      显示:目前视区的 DCS (当使用码0或码1时)。目前模型空间视区的
        DCS(当使用码3时)

3      图纸空间 DCS (只能在使用码2时使用)


    ● 一些函数, 例如: entnext、entlast、entsel、nentsel和 ssname
函数所返回的图元名。如果您是使用这一方式, 则可让您将一点转换到一个特
殊图元的图元坐标系统(Entity Coordinate System, ESC)上, 或是从 ESC 转
换到另一种坐标系统(对某些图元而言, ECS 和 WCS 是一样的, 所以对这些图
元作 ECS 和 WCS 之间的转换并没有意义)上。

    ● 一个 3D 的凸出向量(Extrusion Vector), 它是个含有三个实型数值
的表。这是某一坐标系统和一个图元的 ECS之间互相转换的另一种方法。然而,
对 ECS 和 WCS 相同的图元来说, 这种转换并没有作用。trans 将会返回 to
参数所在坐标系统的 3D 点(或位移) 坐标值。

例如, 已知 UCS 是绕着 WCS 的 Z 逆轴时针旋转 90°, 那么:



    (trans '(1.0 2.0 3.0) 0 1)  返回    (2.0 -1.0 3.0)

    (trans '(1.0 2.0 3.0) 1 0)  返回    (-2.0 1.0 3.0)

    下列所述是 trans 所适用的坐标系统, 在此我们同时说明如何使用这些
坐标系统:

    WCS:通用坐标系统。这是一个参考 (reference)  坐标系统。其他所有
的坐标系统全都是相对于此一坐标系统来定义的。WCS 也是惟一不改变的坐
标系统。它的主要用途是在相对于 WCS 所测量得到的值都可以很正确的转换
到其他的坐标系统上。

    UCS:用户坐标系统是一个工作 (working) 坐标系统, 它是由用户自行
设定的坐标系统, 以便使绘图编辑的工作更容易。所有输入的点(包括
AutoLISP表达式所返回的点, 但不包括前面有*记号的点), 全都视为相对于
这一坐标系统。所以, 如果您想要在 AutoCAD 命令中使用 WCS、ECS 或
DCS 的坐标值您就必须先使用 trans, 将它们转换成 UCS 的坐标值。

    ECS:图元坐标系统。由 entget 函数所返回的点坐标值即是相对于这
一坐标系统所测量得到的, 这样的点几乎没有什么用处, 除非将这些点转换
到适当的坐标系统上。

    DCS:显示坐标系统 (Display Coordinate System)。此系统即为图片
在显示前所转换的坐标系统, 此坐标系统的原点为标的(TARGET) 点, 而Z
轴为观测方向。所以, 在 DCS 上永远是平面视图。也就是说, 在视区上,
DCS 的 Y 轴向上, 而 X 轴向右。它可以用来决定这些图元在屏幕上给用
户看起来是什么样子。当整型数代码 from 和to为 2 和 3 时, 2 表示目
前模型空间的视区将使用DCS, 而3表示图纸空间使用DCS(请引用下面 PSDCS)。
当代码 2 与其他任何运算元一起使用时, 则不管它是模型空间或图纸空间,
都会假定为目前空间的 DCS, 同时另一点也在目前空间中。

    PSDCS:图纸空间显示坐标系统 (Paper Space Display Coor dinate System)。
这只能用来在图纸空间 DCS 和活动的模型空间视区的 DCS 之间进行点的转换。
基本上这是一种 2D 的转换, 其中 X 和 Y 坐标总是按比例来决定的, 同时如果
disp 参数没有指定或值为nil 时没有差距。但是 Z 坐标都是以比例来决定的,
并没有经过平移, 因此您可以用来决定两个显示坐标系统之间的比例因数 。除
了两个 DCS 之间的转换之外, 将不会在两个空间之间进行转换。

    例如, 假设您想要画一条线, 它的起始点正是一串文字的插入点, 那么在
不使用 Osnap 的情况下, 您可以将此文字图素的插入点从文字图元的 ECS 转
换到 UCS, 如下所示:

    (trans text-insert-point text-ename 1)

    然后将结果输入到 From point:"的提示语句后。相反的, 在输入点坐标
值到 entmod 时, 您必须先将点 (或位移)坐标值转换成所想要的 ECS 坐标值。
例如, 您想要在UCS 上移动一个圆, 而所要移动的位移量是 1、2、3, 那么在
不使用 MOVE 命令的情况下, 您必须将此位移的 UCS 转换到此圆的 ECS, 如下
所示:

    (trans '(1 2 3) 1 circle-ename)

    然后, 您再将结果的位移量加到此圆的中心点上即可。

    例如, 假设某个用户输入一点, 他想要知道现在屏幕上某一条线的两个端
点到底是哪一个端点看起来比较靠近用户输入的那一点, 那么首先请您将用户
输入的那一点从 UCS 转换到 DCS 上:

    (trans user-point 1 2)

然后, 将那条线的两个端点从 UCS 转换到 DCS 上:

    (trans endpoint line-ename 2)

从上述所得到的答案, 您就可以分别计算从用户输入的点到两个端点间的距离
(Z 坐标值可忽略), 如此您就可决定哪一个端点看起来比较靠近了。trans 也
可以转换 2D 点。为了达到这个目的, AutoLISP会将 Z 坐标填上一个适当的
值。这个填入的 Z 坐标值是由 from 的坐标系统以及您是将此输入的 2D 点
当做是一个点还是一个位移来转换, 两者共同决定的。这个填入的 Z坐标值,
如下表所示:

从    点                位移

WCS   0.0               0.0

UCS   目前高度          0.0

ECS    0.0              0.0

DCS   投影到目前的      0.0
      绘图平面(UCS
      XY 平面+目前高度)

PSDCS 投影到目前的绘图  0.0
      平面(UCS XY 平面
      +目前高度)


Ucs 下 Pline 的组码10 转换到当前UCS,正确的方法应该是:

(trans (cdr (assoc 10 (entget pline))) pline 1)





  1. (vlax-safearray->list
  2.   (vlax-variant-value
  3.     (vla-TranslateCoordinates
  4.       (vla-get-Utility
  5.         (vla-get-activedocument (vlax-get-acad-object))
  6.       )
  7.       (vlax-3d-point (cdr (assoc 10 (entget (car (entsel))))));;多义线
  8.       acocs
  9.       acucs
  10.       :vlax-False
  11.       (vlax-3d-point (cdr (assoc 210 (entget (car (entsel))))));;多义线
  12.     )
  13.   )
  14. )
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 00:11 , Processed in 0.389528 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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