乐筑天下

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

[编程交流] ssget函数的一个问题

[复制链接]

9

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 00:00:10 来自手机 | 显示全部楼层 |阅读模式
嗨,伙计们
我希望你能帮我
我有一条折线
((-1 . )
(0,“LW多段线”)(330。)(5.“1A7774”)(100。
“AcDbEntity”)(67.0)(410。“Model”)(8。“ali_main_bs”)(100。
“AcDbPolyline”)(90.5)(70.0)(43.0.0)(38.0.0)(39.0.0)(10-3302.06
120081.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -3266.7 120046.0) (40 . 0.0) (41
. 0.0) (42 . 0.0) (10 2233.3 120046.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10
2233.3 120546.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 2197.94 120581.0) (40 .
0.0)(41.0.0)(42.0.0)(210 0.0 0.0 1.0)(-3(“barinfo”(1070.6)(1070)。
16) (1040 . 150.0) (1040 . 5960.0))))
 
正如你所见
我附上了一些信息
最后一个信息是多段线长度
这个(1040.5960.0)
我有许多多段线具有相同的长度,其长度也附加在一起
我想使用ssget函数来选择具有相同长度的所有实体
 
 
我知道>>>如果我想选择属于一个叫做“ali”的层的所有实体,例如,我可以使用这个表达式
(ssget“X”(列表(cons 8“ali”))
 
 
我想如果我用这个表达式
(ssget“X”(列表(cons 1040 5960)))
它将选择所有长度相同的多段线
但它返回“错误的SSGET列表值”
我累了>>>
我怎样才能修复它并做这件事???
 
非常感谢你
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 00:12:01 | 显示全部楼层
对于扩展数据,更简单的方法是使用VL,从PLINE中提取长度。这里是一个VL示例,它只有2行代码
 
  1. (setq ss1 (car (entsel))) ;pick a pline
  2. (setq plength (vla-get-length(vlax-ename->vla-object SS1))) ; make this a loop and just compare your length to answer for all plines

版本2
  1. (setq ss1 (ssget "_X" (list (cons 0 "lwpolyline")(cons 8 "0"))))
  2. (setq inc (sslength ss1))
  3. (repeat inc
  4. (setq plength (vla-get-length (vlax-ename->vla-object (ssname SS1 (setq inc (1- inc))))))
  5. (princ "\n")
  6. (princ plength)
  7. )
  8. (princ)
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:17:45 | 显示全部楼层
除了BIGAL已经说过的,您还可以尝试这样的方法来过滤扩展数据:
  1. (setq ss (ssget "X" '((0 . "LWPOLYLINE") (8 . "ali") (-3 (("barinfo"))))))

 
编辑:如果可能的话,发布一个带有几个多段线的样例dwg,我想测试另一种访问扩展数据的方法,但我太懒了,无法重新创建扩展数据。。。
 
HTH公司
亨里克
回复

使用道具 举报

9

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 00:23:51 | 显示全部楼层
谢谢你们
但它也给了我一个错误消息,无法工作
我还在等你的帮助
我还在等待任何lisp,它允许我选择所有长度与我指定的长度相同的多段线
这是我的文件,其中包含这些多段线
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:28:45 | 显示全部楼层
嗨,只是为了测试。。。将使用(1040.11170.0)选择所有LW多段线
 
  1. (if (setq ss (ssget "X" (list (cons 0 "LWPOLYLINE") (cons -3 (list (list "barinfo"))))))
  2. (repeat (setq i (sslength ss))
  3.    (setq ent (ssname ss (setq i (1- i)))
  4.   xdata (cadr (assoc -3 (entget ent '("barinfo")))))
  5.    (if (/= (rtos (cdr (nth 4 xdata)) 2 2) (rtos 11170.0 2 2))
  6.      (ssdel ent ss)
  7.    );; if
  8. );; repeat
  9. );; if

 
我将该值修改为字符串进行测试,因为您的(1040.11170.0)值​​有许多小数位(11170.00001423149)
 
亨里克
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 00:38:16 | 显示全部楼层
只是一个细微的变化使用mm作为输入
 
  1. (setq polylen (Getreal "\nEnter your length for pline checking : "))
  2. (if (setq ss (ssget "X" (list (cons 0 "LWPOLYLINE") (cons -3 (list (list "barinfo"))))))
  3. (repeat (setq i (sslength ss))
  4.    (setq ent (ssname ss (setq i (1- i)))
  5.   xdata (cadr (assoc -3 (entget ent '("barinfo")))))
  6.    (if (/= (fix (cdr (nth 4 xdata)))  polylen) ; note fix is integer value
  7.      (ssdel ent ss)
  8.    );; if
  9. );; repeat
  10. );; if
  11. )
回复

使用道具 举报

9

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 00:40:54 | 显示全部楼层
谢谢Hmsilva先生和比加尔先生的帮助
我现在就试试,然后回来
不管怎样,它都会给我添加新的非常有用的注释
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:50:57 | 显示全部楼层
不客气,
尝试此演示,将选择所有具有相同最后扩展数据点对(1040.XXX.X)和层的LWD多段线,与您选择的一条相同。
确保PICKFIRST=1
  1. (defun c:test ( / E ENT EXDATA I L LAY SS XDATA)
  2. (if (and (setq e (entget (car (entsel "\nSelect a LwPolyline to select equals: ")) '("barinfo")))
  3. (setq exdata (cadr (assoc -3 e))))
  4. (progn
  5.    (setq lay  (cdr (assoc 8 e))
  6.   l  (cdr (nth 4 exdata)))
  7.    (setq ss (ssget "X"
  8.      (list (cons 0 "LWPOLYLINE")
  9.     (cons 8 lay)
  10.     (cons -3 (list (list "barinfo")))
  11.      )
  12.      )
  13.    )
  14.    (repeat (setq i (sslength ss))
  15.      (setq ent   (ssname ss (setq i (1- i)))
  16.     xdata (cadr (assoc -3 (entget ent '("barinfo")))))
  17.      (if (/= (cdr (nth 4 xdata)) l)
  18. (ssdel ent ss)
  19.      );; if
  20.    );; repeat
  21.    (sssetfirst nil ss)
  22. );; progn
  23. );; if
  24. (princ)
  25. )

 
亨里克
回复

使用道具 举报

9

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 00:59:56 | 显示全部楼层
Himsilva先生
你是个了不起的人
我真的不知道该怎么感谢你
干得好
这正是我需要的,,,,,,太好了
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 01:05:18 | 显示全部楼层
不客气
很高兴我能帮忙
 
亨里克
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:03 , Processed in 0.499278 second(s), 72 queries .

© 2020-2025 乐筑天下

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