太好了,不客气,保罗
为了帮助您理解,不要从算术角度(即基数10)来看待它,试着用二进制(基数2)来可视化它,以了解逐位运算(logand/LOGOR/boole等)如何影响每个位。
DXF组70通常是位编码值,然而,维度的DXF 70组有点奇怪,因为值0-6是连续整数,值32以后是位代码。
因此,尽管径向尺寸的DXF 70组代码为4,但您不能简单地使用以下内容来测试尺寸是否为径向(与其他DXF 70组代码一样):
- (= 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位,剩下的位都已设置:
我希望这更清楚。
李 |