乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 98|回复: 9

[编程交流] 维度类型

[复制链接]

9

主题

167

帖子

163

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-5 20:00:10 | 显示全部楼层 |阅读模式
我需要一次覆盖多个维度的维度文本,但覆盖必须不同于径向、角度或线性维度。如何确定选择了什么类型的维度?如何迭代多个(assoc 100)以获得正确的信息?最好的技术是什么?维度的每个dxf组码中都有几个实例(assoc 100)。有时我正在寻找的信息(径向、对齐、旋转等)在第三个实例中,另一个在第四个实例中(assoc 100)。在这里,我通过前两个(assoc 100)从第三个中获得正确的值。你们是怎么做到的?
 
谢谢
 
  1. (setq d (1- sl)
  2.   n  (ssname ss d) ; ss = selection set obtained with ssget
  3.   e1 (entget n)
  4.   q (cdr (member (assoc 100 e1) e1)); step over the first assoc 100
  5.   q (cdr (member (assoc 100 q) q))  ; step over the second assoc 100
  6.   q (cdr (assoc 100 q))             ; get the info here
  7.      )
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 20:12:06 | 显示全部楼层
嗨,paulmcz,也许VLisp方法是你想要的?
  1. ([color="blue"]vla-get-Objectname[/color] (vlax-ename->vla-object entity))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:15:59 | 显示全部楼层
如果需要普通溶液,我会测试DXF组70的值,例如:测试径向尺寸:
  1. (= 4 (logand (cdr (assoc 70 (entget <dim>))) (~ 224)))
回复

使用道具 举报

9

主题

167

帖子

163

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-5 20:25:43 | 显示全部楼层
 
谢谢hanhphuc。不幸的是,我对Vlisp了解不够,无法尝试您的方法。
回复

使用道具 举报

9

主题

167

帖子

163

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-5 20:30:20 | 显示全部楼层
 
嗨,李,你的解决方案一如既往地完美。非常感谢。我只是希望知道这里发生了什么。我不知道logand函数背后的算术。我无法理解这(洛根164-225)如何返回4。
 
谢谢李。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:37:56 | 显示全部楼层
 
太好了,不客气,保罗
 
 
为了帮助您理解,不要从算术角度(即基数10)来看待它,试着用二进制(基数2)来可视化它,以了解逐位运算(logand/LOGOR/boole等)如何影响每个位。
 
DXF组70通常是位编码值,然而,维度的DXF 70组有点奇怪,因为值0-6是连续整数,值32以后是位代码。
 
因此,尽管径向尺寸的DXF 70组代码为4,但您不能简单地使用以下内容来测试尺寸是否为径向(与其他DXF 70组代码一样):
  1. (= 4 (logand 4 (cdr (assoc 70 (entget <dim>)))))
因为,这也将返回坐标尺寸的T(如6=2+4)。
 
因此,我的示例中的logand表达式不是使用特定位(即本例中的位4)执行AND操作,而是屏蔽位32-128,以便按位AND操作将匹配设置的任何其他位。
 
例如,考虑用户重新定位的X型坐标尺寸,DXF组70等于198[noparse](6+64+128)[/noparse]。
 
198作为32位有符号整数的二进制表示为:
对224[noparse](=32+64+128)[/noparse]执行位非运算将用二进制表示为:
现在,对这两个二进制表示执行逐位“与”运算有效地屏蔽了32、64和128位,剩下的位都已设置:
我希望这更清楚。
 
回复

使用道具 举报

9

主题

167

帖子

163

银币

初来乍到

Rank: 1

铜币
43
发表于 2022-7-5 20:42:24 | 显示全部楼层
非常感谢李。我真的很感激。是的,对我来说天气正在慢慢转晴。我现在开始以一种完全不同的方式看待这个世界。
 
保罗。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:50:59 | 显示全部楼层
太好了,我很高兴解释清楚
 
我刚刚纠正了几个拼写错误(225应该是224)。
 
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 20:54:47 | 显示全部楼层
 
 
感谢李的澄清。
正如我所料,你会给我们提供非常有用的信息。注意并赞赏
我必须承认,你的dxf建议非常有用,尤其是在ssget过滤中,
 
  1. 7

 
本主题使我想起最近使用位掩码等于运算符“&=”的线程dxf 70
 
再次感谢李
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 21:03:47 | 显示全部楼层
 
不客气,韩,我很乐意帮忙
 
 
这是一个好主意,但不幸的是,我不认为它可以这么简单-例如,假设您想要构造一个ssget过滤器,以仅允许径向维度。您可以使用以下过滤器:
然而,这也将匹配纵坐标尺寸(因为6=2+4)-因此,在这种情况下不能使用位编码滤波器。
 
我对这个问题的解决方案是使用如下函数来构造适当的过滤器:
[code][颜色=绿色];;维度选择过滤器列表-Lee Mac[color=绿色];;为给定维度类型[color]构造适当的过滤器列表;;lst-[lst]DXF组70维度类型列表(0-6);;e、 g.旋转和对齐尺寸:(LM:dimfilter(0 1))defunLM:dimfilter(lst)(lambda(位)(append'((0.“*尺寸”)(-4.”“))(LM:bitcombinations(32 64 128)));;位组合-Lee Mac;;返回给定位代码集[(color)](defun[(color]LM:位组合(l/foo条)(defun[(color]foo(l r)(if[(color=BLUE)](if[(color=BLUE)](和[[color=BL
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 00:47 , Processed in 1.204907 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表