and 函数与 类似,只不过它们返回两个附加值来处理嵌套在块引用中的实体。nentselnentselpentsel 这些函数之间的另一个区别是,当用户通过选择复杂实体或复杂实体选择时,这些函数返回所选子实体的实体名称,而不是复杂实体的标头。nentselnentselpentsel 例如,当用户选择 3D 折线时,将返回顶点子图元而不是折线标头。您可以通过连续调用 来检索折线标头,然后从 Deqend 子实体的 -2 dxf 组代码中获取标头的名称。当用户在嵌套块引用中选择属性时,这同样适用。nentselentnext 在块参照中选择属性将返回属性的名称和拾取点。当所选对象是块引用的组件而不是属性时,将返回包含以下元素的列表:nentsel
选择块返回的列表总结如下:nentsel (<Entity Name: ename1> ; Name of entity. (Px Py Pz) ; Pick point. ( (X0 Y0 Z0) ; Model to World Transformation Matrix. (X1 Y1 Z1) (X2 Y2 Z2) (X3 Y3 Z3) ) (<Entity name: ename2> ; Name of most deeply nested block . ; containing selected object. .. <Entity name: enamen>) ; Name of outermost block ) ; containing selected object. 在以下示例中,创建一个用于函数的块。nentsel 命令:line 指定第一点:1,1 指定下一个点或[撤消]:3,1 指定下一个点或[撤消]:3,3 指定下一个点或[关闭/撤消]:1,3 指定下一个点或[关闭/撤消]:c 命令:-block 输入块名称或 [?]: square 指定插入基点或[注释]:2,2 选择对象:选择刚刚绘制的四条线 选择对象: 按 Enter 键 然后,将块插入绕 Z 轴旋转 45 度的 UCS 中: 命令:ucs 当前 ucs 名称: *WORLD* 指定UCS或[Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis]<World>:z的原点 指定 Z 轴旋转角度 <90>:45 命令:-insert 输入块名称或 [?]: square 指定插入点或[基点/刻度/X/Y/Z/旋转]:7.0 输入 X 比例因子,指定对角或 [Corner/XYZ] <1>: 按 Enter 键 输入 Y 比例因子<使用 X 比例因子>: 按 Enter 键 指定旋转角度 <0>: 按 Enter 键 用于选择正方形的左下角。nentsel (setq ndata (nentsel)) 此代码集等于类似于以下内容的列表:ndata (<Entity Name: 400000a0> ; Entity name. (6.46616 -1.0606 0.0) ; Pick point. ((0.707107 0.707107 0.0) ; Model to World (-0.707107 0.707107 0.0) ; Transformation Matrix. (0.0 -0.0 1.0) (4.94975 4.94975 0.0) ) (<Entity name:6000001c>) ; Name of block containing ; selected object. ) 获取实体名称和模型到世界转换矩阵后,可以将实体定义数据点从 MCS 转换为 WCS。在实体名称上使用 和 来获取以 MCS 坐标表示的定义点。返回的 Model to World Transformation Matrix 是一个 4×3 矩阵(作为四个点的数组传递),它使用点是行而不是列的约定。变换由以下矩阵乘法描述:entgetassocnentsel 因此,推导新坐标的方程如下: Mij,其中 0 le;我,J乐;2、是模型到世界的变换矩阵坐标;X、Y、Z 是以 MCS 坐标表示的实体定义数据点,X'、Y'、Z' 是以 WCS 坐标表示的结果实体定义数据点。 要变换向量而不是点,请不要添加平移向量(变换矩阵第四列中的 M30、M31、M32)。 注意:这是唯一使用此类型矩阵的 AutoLISP 函数。该函数之所以首选,是因为它返回的矩阵类似于其他 AutoLISP、ObjectARX 和 Managed .NET 函数使用的矩阵。nentselpnentsel
使用先前用 获取的实体名称,以下示例说明了如何获取块定义中包含的行(组代码 10)的 MCS 起点:nentsel 命令: (setq edata (assoc 10 (entget (car ndata)))) (10 -1.0 1.0 0.0) 以下语句将“模型到世界变换矩阵”子列表存储在符号 中。matrix 命令:(setq matrix (caddr ndata)) ((0.707107 0.707107 0.0) ; X transformation (-0.707107 0.707107 0.0) ; Y transformation (0.0 -0.0 1.0) ; Z transformation (4.94975 4.94975 0.0) ; Displacement from WCS origin ) 以下语句应用 X' 的变换公式,将直线起点的 X 坐标从 MCS 坐标更改为 WCS 坐标: (setq answer (+ ; add: (* (car (nth 0 matrix))(cadr edata)) ; M00 * X (* (car (nth 1 matrix))(caddr edata)) ; M10 * Y (* (car (nth 2 matrix))(cadddr edata)) ; M20 * Z (car (nth 3 matrix)) ; M30 ) ) 此语句返回 3.53553,即所选线起点的 WCS X 坐标。 相关概念 |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 14:48
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.