乐筑天下

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

[编程交流] ssget方法do的筛选器列表

[复制链接]

1

主题

1

帖子

0

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-9 07:15:23 | 显示全部楼层 |阅读模式
你好
我编写了一个脚本,要求用户先选择一条线,然后选择一条多段线。它查找多段线上的下一个顶点(相对于这两条线的交点)。在这些顶点上是我想分别被选为pre\u blk和post\u blk的块。我不明白的是,ssget方法在调用时显然没有应用过滤器'((0。“INSERT”))。因此,当我键入(sssetfirst nil pre\U blk)时,最终选择多段线作为pre\U blk(其中一个块被正确分配给post\U blk)。我会附上一个样本图纸,但显然它不可能在这里。(感谢Lee Mac和dlanorh提供的函数和代码段,并将其记入代码中):
 
(定义c:selectblocks(/)
(如果(setq ss1(ssget“:S”))
(如果(setq ss2(ssget“:S”))
      ;; 查找多段线上的上一个和下一个顶点
(foreach pnt(LM:集合ss1和ss2之间的相交)
        ;; 获取相对于交点的下一个顶点
        ;; 多亏了德拉诺(https://www.cadtutor.net/forum/topic/68855-vertices-of-polyline-near-a-point/)
(setq poly(vlax ename->vla对象(ssname ss2 0)))
(setq p_param(vlax curve getparamatpoint poly pnt))
(setq pre_vtx(vlax curve getpointatparam poly(fix p_param));获取之前顶点的坐标
post_vtx(vlax curve getpointatparam poly(1+(fix p_param)));后顶点的坐标
        )
        ;;获取顶点处的块
(setq过滤器'((0。“插入”))
(setq pre\u blk(ssget“\u X”(列表“(-4。”=,=,=”)(cons“10 pre\u vtx)过滤器))
(setq post\u blk(ssget“\u X”(列表“(-4。”=,=,=”)(cons“10 post\u vtx)过滤器))
        ;;如果选择失败,请尝试围栏选择:
(如果(非pre_blk)
(程序
(setq co_incr(+0.18(car pre_vtx));;假设圆直径为0.25 cm
(setq rest(cdr pre_vtx))
(setq incr(cons co_incr rest))
(setq pre\u blk(ssget“\u F”(列表pre\u vtx incr)过滤器)
          )
        )
(如果(非post_blk)
(程序
(setq co_incr(+0.18(car post_vtx));;假设圆直径为0.25 cm
(setq rest(cdr post\u vtx))
(setq incr(cons co_incr rest))
(setq post\u blk(ssget“\u F”(list post\u vtx incr)过滤器)
          )
        )
      )
    )
  )
)
;; 集合之间的交点-Lee Mac
;; 返回两个选择集中对象之间所有交点的列表。
;; ss1、ss2-[sel]选择集
(定义LM:集合之间的相交(ss1 ss2/id1 id2 ob1 ob2 rtn)
(重复(setq id1(sslength ss1))
(setq ob1(vlax ename->vla object(ssname ss1(setq id1(1-id1 k)а)'))
(重复(setq id2(sslength ss2))
(setq ob2(vlax ename->vla对象(ssname ss2(setq id2(1-id2)))
rtn(cons(LM:交叉点ob1 ob2 acextendnone)rtn)
      )
    )
  )
(应用'附加(反向rtn))
)
;; 十字路口-Lee Mac
;; 返回两个对象之间所有交点的列表
;; 对于给定的交叉口模式。
;; ob1,ob2-[vla]vla对象
;;mod-[int]intersectwith方法的acextendoption枚举
(定义LM:交叉点(ob1 ob2 mod/lst rtn)
(如果(和(vlax-method-applicable-p ob1’相交)
(vlax-method-applicable-p ob2’intersectwith)
(setq lst(vlax调用ob1’与ob2 mod相交))
      )
(重复(/(长度lst)3)
(setq rtn(cons(列表(car lst)(cadr lst)(caddr lst))rtn)
lst(cdddr lst)
      )
    )
  )
(反向rtn)
)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 05:38 , Processed in 0.411517 second(s), 54 queries .

© 2020-2025 乐筑天下

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