乐筑天下

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

[编程交流] 如何使用ssget?

[复制链接]

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 10:29:07 | 显示全部楼层 |阅读模式
你好
 
我想知道如何将(entsel函数)替换为(ssget函数)!!!
 
  1. (vl-load-com)
  2. (setq LINE (car (entsel "\n Select a Line: ")))
  3. (setq Myline (vlax-ename->vla-object LINE))
  4. (vla-get-length Myline)

 
非常感谢。
 
塔瓦特
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:34:07 | 显示全部楼层
对于单个选择,可能是这样的?
 
  1. (ssget "_+.:E:S" '((0 . "LINE")))

 
对于多个,您需要逐步完成集合:
 
  1. (if (setq i -1 ss (ssget '((0 . "LINE"))))
  2. (while (setq e (ssname ss (setq i (1+ i))))
  3.    (print (vla-get-length (vlax-ename->vla-object e)))
  4. )
  5. )

 
或者可以使用vlax for单步遍历VL中的ActiveSelectionSet(或者实际上,您可以在VL中获取SelectionSet)。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 10:37:29 | 显示全部楼层
谢谢李。
 
当你提到“也许”时,我很惊讶。
 
但是当你把剩下的加进去时,我深深地吸了一口气。因此,代码目前运行良好。
 
  1. (vl-load-com)
  2. (if (setq i -1
  3.   ss (ssget '((0 . "LINE"))))
  4. (while
  5.    (setq e (ssname ss (setq i (1+ i))))
  6.    (setq obj (vlax-ename->vla-object e))
  7.    (setq len (vla-get-length obj))
  8.        ))

 
为什么以下功能不能正确响应代码?
  1. (setq start (vla-get-startpoint obj))
  2. (setq end (vla-get-endpoint obj))

 
非常感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:38:54 | 显示全部楼层
请记住,vla get startpoint/endpoint返回变量需要转换为safearrays,然后列出是否计划将其用作普通数据类型,例如:
 
或者,为了避免这种转换:
 
  1. (vlax-get <VLA-Object> 'StartPoint)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:42:33 | 显示全部楼层
也许为了其他人的利益,您可以这样在VL中完全获得相同的选择集:
 
  1. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] [color=black]c:test[/color]
  2.    [b][color=RED]([/color][/b] [b][color=BLUE]/[/color][/b]
  3.        _SafearrayVariant
  4.        _GetUniqueKey
  5.        SelSet
  6.        SelSets
  7.    [b][color=RED])[/color][/b]
  8. [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
  9. [i][color=#990099];; © Lee Mac 2010[/color][/i]
  10. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] _SafearrayVariant [b][color=RED]([/color][/b] datatype data [b][color=RED])[/color][/b]
  11.    [b][color=RED]([/color][/b][b][color=BLUE]vlax-make-variant[/color][/b]
  12.      [b][color=RED]([/color][/b][b][color=BLUE]vlax-safearray-fill[/color][/b]
  13.        [b][color=RED]([/color][/b][b][color=BLUE]vlax-make-safearray[/color][/b] datatype [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]0[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]1-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] data[b][color=RED]))))[/color][/b]
  14.        data
  15.      [b][color=RED])[/color][/b]   
  16.    [b][color=RED])[/color][/b]
  17. [b][color=RED])[/color][/b]
  18. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] _GetUniqueKey [b][color=RED]([/color][/b] collection seed [b][color=RED])[/color][/b]
  19.    [b][color=RED]([/color][/b]
  20.      [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] i [b][color=BLUE]/[/color][/b] key [b][color=RED])[/color][/b]
  21.        [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b]
  22.          [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b]
  23.            [b][color=RED]([/color][/b][b][color=BLUE]vl-catch-all-error-p[/color][/b]
  24.              [b][color=RED]([/color][/b][b][color=BLUE]vl-catch-all-apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]vla-item[/color][/b]
  25.                [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] collection
  26.                  [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] key
  27.                    [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] seed
  28.                      [b][color=RED]([/color][/b][b][color=BLUE]itoa[/color][/b]
  29.                        [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] i [b][color=RED]([/color][/b][b][color=BLUE]1+[/color][/b] i[b][color=RED]))[/color][/b]
  30.                      [b][color=RED])[/color][/b]
  31.                    [b][color=RED])[/color][/b]
  32.                  [b][color=RED])[/color][/b]
  33.                [b][color=RED])[/color][/b]
  34.              [b][color=RED])[/color][/b]
  35.            [b][color=RED])[/color][/b]
  36.          [b][color=RED])[/color][/b]
  37.        [b][color=RED])[/color][/b]
  38.        key
  39.      [b][color=RED])[/color][/b]
  40.      [b][color=#009900]0[/color][/b]
  41.    [b][color=RED])[/color][/b]
  42. [b][color=RED])[/color][/b]
  43. [b][color=RED]([/color][/b][b][color=BLUE]vla-SelectonScreen[/color][/b]
  44.    [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] SelSet
  45.      [b][color=RED]([/color][/b][b][color=BLUE]vla-Add[/color][/b]
  46.        [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] SelSets
  47.          [b][color=RED]([/color][/b][b][color=BLUE]vla-get-SelectionSets[/color][/b]
  48.            [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b]
  49.              [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b]
  50.            [b][color=RED])[/color][/b]
  51.          [b][color=RED])[/color][/b]
  52.        [b][color=RED])[/color][/b]
  53.        [b][color=RED]([/color][/b]_GetUniqueKey SelSets [b][color=#a52a2a]"SelSet"[/color][/b][b][color=RED])[/color][/b]
  54.      [b][color=RED])[/color][/b]
  55.    [b][color=RED])[/color][/b]
  56.    [b][color=RED]([/color][/b]_SafearrayVariant [b][color=BLUE]vlax-vbinteger[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b][b][color=RED]))[/color][/b]
  57.    [b][color=RED]([/color][/b]_SafearrayVariant [b][color=BLUE]vlax-vbvariant[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#a52a2a]"LINE"[/color][/b][b][color=RED]))[/color][/b]
  58. [b][color=RED])[/color][/b]
  59. [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]<[/color][/b] [b][color=#009900]0[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-Count[/color][/b] SelSet[b][color=RED]))[/color][/b]
  60.    [b][color=RED]([/color][/b][b][color=BLUE]vlax-for[/color][/b] o SelSet
  61.      [b][color=RED]([/color][/b][b][color=BLUE]print[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vla-get-length[/color][/b] o[b][color=RED]))[/color][/b]
  62.    [b][color=RED])[/color][/b]
  63. [b][color=RED])[/color][/b]
  64. [b][color=RED]([/color][/b][b][color=BLUE]vla-delete[/color][/b] SelSet[b][color=RED])[/color][/b]
  65. [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b]
  66. [b][color=RED])[/color][/b]

或所有AutoLISP。。。
  1. (defun c:Test (/ ss)
  2. (if (setq ss (ssget '((0 . "LINE"))))
  3.    (progn
  4.      (vlax-for x (setq ss (vla-get-activeselectionset
  5.                             (vla-get-activedocument (vlax-get-acad-object))
  6.                           )
  7.                  )
  8.        (print (vla-get-length x))
  9.      )
  10.      (vla-delete ss)
  11.    )
  12. )
  13. (princ)
  14. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:47:01 | 显示全部楼层
谢谢Alanjt。
 
请告诉我以下两种代码之间的区别是什么。。
第一
  1. (defun c:Test (/ i ss e l)
  2. (if (setq i  -1
  3.            ss (ssget '((0 . "LINE")))
  4.      )
  5.    (while (setq e (ssname ss (setq i (1+ i))))
  6.      (print (distance (cdr (assoc 10 (setq l (entget e)))) (cdr (assoc 11 l))))
  7.    )
  8. )
  9. (princ)
  10. )

第二
  1. (vl-load-com)
  2. (setq i -1
  3.   ss (ssget '((0 . "LINE"))))
  4. (progn
  5.    (setq e (ssname ss (setq i (1+ i))))
  6.    (setq obj (vlax-ename->vla-object e))
  7.    (print (vla-get-length obj))
  8.        ))

 
非常感谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 10:51:08 | 显示全部楼层
 
非常感谢。
 
假设我想得到起点和终点,我应该重复转换两次来得到这两个点吗?
示例。
  1. (vl-load-com)
  2. (setq ss (ssget '((0 . "LINE"))))
  3.    (progn
  4.      (vlax-for x (setq ss (vla-get-activeselectionset
  5.                             (vla-get-activedocument (vlax-get-acad-object))
  6.                           )
  7.                  )
  8.        (print (vla-get-length x))
  9.      )
  10.      (vla-delete ss)
  11.    )

 
当做
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 10:52:38 | 显示全部楼层
如果您希望以这种方式继续,请在转换后设置变量,因此:
 
  1. (vl-load-com)
  2. (if (setq i -1 ss (ssget '((0 . "LINE"))))
  3.    (progn
  4.       (setq e (ssname ss (setq i (1+ i))))
  5.         (setq obj (vlax-ename->vla-object e))
  6.          [color="red"](vlax-safearray->list
  7.             (vlax-variant-value
  8.         (setq start (vla-get-StartPoint obj))                  
  9.              )
  10.        )[/color]
  11.      [color="blue"](vlax-safearray->list
  12.             (vlax-variant-value
  13.         (setq end (vla-get-endPoint obj))
  14.         )
  15.      )[/color]
  16.      ))

 
否则,您可以同样使用:
 
  1. (setq start
  2. (vlax-safearray->list
  3.    (vlax-variant-value
  4.      (vla-get-StartPoint obj)
  5.    )
  6. )
  7. )

 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:55:58 | 显示全部楼层
你真了不起,李。
 
非常感谢你。这真的很吸引人。
 
塔瓦特
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 10:58:43 | 显示全部楼层
  1. (setq Start (vlax-get obj 'StartPoint))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 17:57 , Processed in 0.494535 second(s), 72 queries .

© 2020-2025 乐筑天下

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