明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 660|回复: 16

[经验] ssget过滤器选择顶点数大于2的偶数且闭合的多段线

[复制链接]
发表于 2024-6-19 07:46:19 | 显示全部楼层 |阅读模式
本帖最后由 fangmin723 于 2024-6-19 14:35 编辑

感谢明经 AutoLISP 编程②群的:
自贡黄明儒】大师LLSheng_73■■■大佬  的指导!

LLSheng_73■■■】指出:
;;(logand 奇数 1)一定是等于1的,
;;(logand 偶数 2)那就不见得是2了,所以前边会漏选很多

经过测试,理解如下:

;;(logand number 1) 结果为1时,number一定是奇数。
;;(logand number 2) 结果为0或2时,number不一定是偶数。

  1. ;;选择顶点数大于2的偶数且闭合的多段线
  2. (ssget
  3.   '((0 . "LWPOLYLINE")
  4.      (-4 . ">") (90 . 2);;顶点数大于2
  5.      (-4 . "<not") (-4 . "&=") (90 . 1) (-4 . "not>");;偶数
  6.      (70 . 1);;闭合
  7.    )
  8. )


想过将(-4 . ">") (90 . 2);;顶点数大于2去掉,但是试了下,两个顶点的多段线,也可以设置闭合属性,为了严谨性,就保留了!

ssget用法详解出处https://blog.csdn.net/yxp_xa/article/details/72229202





知识扩展:boole函数
(boole 1) => AND()
(boole 7) => OR()
(boole 8) => NOT()
(boole 6) => XOR(异或)


12 => 1100
5  => 0101
(boole 1 5 12) 0100 => 4 ;;两个都是1的返回1,即返回0100
(boole 7 5 12) 1101 => 13 ;;有一个是1的返回1,即返回0100
(boole 8 5 12) => (boole 8 5 12) => (boole 8 (boole 7 5 12) 0) => 13的补码 =>
111111111111111111111111111111111111111111111111111111111111 0010 => -14 ;;有一个是1的返回1,即返回
1101,然后取补码 0010
(boole 6 5 12) 1001 => 9 ;;两个相同的返回0,即返回1001







本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
hubeiwdlue + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-6-19 09:40:56 | 显示全部楼层
说一下我的理解,不一定对,和大佬们请教一下

"&="按位屏蔽相等,以(-4 . "&=") (90 . 1)为例,每个图元的90号组码值x与1按位求与(Logand x 1),返回值!=1不等于1,则为真,会被选择,否则无论等于多少,都是假,不会被选择。
奇数的二进制,末尾肯定是1,偶数的二进制,末尾肯定是0,以8为例,二进制,1000,(Logand 1000 0001),返回值0,不等于1,被选择。以9为例,二进制,1001,(Logand 1001 0001),返回值1,则不会被选择。
回复 支持 1 反对 0

使用道具 举报

发表于 2024-6-19 23:02:50 | 显示全部楼层
;; 来个啰嗦的
  1. (defun abc (ss / lst)
  2.   (setq lst (xyp-Ss2List ss)
  3.         lst (vl-remove-if-not '(lambda (x) (xyp-Etype x "*polyline")) lst)
  4.         lst (vl-remove-if-not '(lambda (x) (xyp-CurveIsClose x)) lst)
  5.         lst (vl-remove-if '(lambda (x) (/= (rem (length (xyp-Vertexs x 0)) 2) 0))lst)
  6.   )
  7. )
发表于 2024-6-19 09:17:24 | 显示全部楼层
谢谢大佬分享,按位逻辑求布尔值,一直很神秘。
发表于 2024-6-19 09:24:38 | 显示全部楼层
没帮上什么忙,还是你自己太厉害了。
 楼主| 发表于 2024-6-19 10:10:55 | 显示全部楼层
自贡黄明儒 发表于 2024-6-19 09:24
没帮上什么忙,还是你自己太厉害了。

黄大师过过谦了
发表于 2024-6-19 13:07:33 | 显示全部楼层
请教一下,
(boole 8 5 12),关于非这段解释,还是没看懂。
 楼主| 发表于 2024-6-19 13:10:36 | 显示全部楼层
hubeiwdlue 发表于 2024-6-19 13:07
请教一下,
(boole 8 5 12),关于非这段解释,还是没看懂。

不用懂,了解下就行了,函数用的不多
发表于 2024-6-19 14:11:02 | 显示全部楼层
转成c#看看
发表于 2024-6-19 14:17:28 | 显示全部楼层
hubeiwdlue 发表于 2024-6-19 13:07
请教一下,
(boole 8 5 12),关于非这段解释,还是没看懂。

看这个可能更明白

本帖子中包含更多资源

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

x
 楼主| 发表于 2024-6-19 14:32:03 | 显示全部楼层

C#有现成的运算符啊,不用转

布尔逻辑运算符 - 布尔 AND、OR、NOT 和 XOR 运算符 - C# reference | Microsoft Learn

本帖子中包含更多资源

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

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-8 07:32 , Processed in 0.276947 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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