乐筑天下

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

[编程交流] 基于多段线分割块

[复制链接]

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:18:21 | 显示全部楼层
谢谢你,比格尔!我想我现在明白你的密码了
 
这真是个绝妙的主意,我会花时间去做的
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:20:56 | 显示全部楼层
嗨,比格尔,
 
我可以再次使用(vla GetBoundingBox obj‘minpoint’maxpoint)方法来选择多段线内的文本,无需使用Alan H的代码
然后我使用txt2att lisp(粘贴在上面)将它们转换为块属性。这是成功的,他们仍然处于相同的地位
现在我的问题是,我们如何将这些属性转化为块?
 
如果我手动操作,我选择属性并使用命令“block”,然后输入块名,单击ok,ok。
在lisp中,我读到一些线程使用“insert”,但它的输入是文本值,我不知道它的标记会发生什么
其他一些线程建议使用“entmake”并定义块插入点,用属性插入点定义属性。。听起来工作量很大
我们有更简单的方法吗?
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:24:08 | 显示全部楼层
如果我看看这个例子。我对预期的结果感到惊讶。为什么要创建6个相同的块定义?为什么多个属性标记具有相同的名称(这很糟糕)?为什么随机插入点?
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:25:45 | 显示全部楼层
可以对属于现有块的属性进行排序。请参阅下面的代码。所以我之前的建议似乎是可行的。
遗憾的是,现有块也有一个随机插入点。但是(删除现有属性后)可以建立左下角。该点可用于计算新块的插入点。
  1. (defun KGA_List_Divide_3 (lst / ret)
  2. (repeat (/ (length lst) 3)
  3.    (setq ret (cons (list (car lst) (cadr lst) (caddr lst)) ret))
  4.    (setq lst (cdddr lst))
  5. )
  6. (reverse ret)
  7. )
  8. ; (SortedAttValueList (car (entsel))) =>
  9. ; (
  10. ;   (("DESC1" "AA") ("TETHERSOR" "10-10-00-00") ("TETHERQTY" "15"))
  11. ;   (("DESC2" "BA") ("DFNENCLSOR" "07-07-01-09") ("DFNENCLNO" "1"))
  12. ;   (("DESC3" "CA") ("SPLICESOR" "02-02-04-06") ("NOOFSPLICE" "10"))
  13. ;   (("DESC4" "AB") ("SPLITSOR" "07-02-05-04") ("SPLITRQTY" "1"))
  14. ;   (("DESC5" "AC") ("LFNOTDRSOR" "55-06-06-06") ("LFNQTY" "1"))
  15. ;   (("DESC6" "DB") ("FIBERSOR" "22-04-03-05") ("FIBERQTY" "2"))
  16. ; )
  17. (defun SortedAttValueList (enm / obj)
  18. (setq obj (vlax-ename->vla-object enm))
  19. (vl-sort
  20.    (mapcar
  21.      '(lambda (sub)
  22.        (mapcar 'cdr (vl-sort sub '(lambda (a b) (< (car a) (car b)))))
  23.      )
  24.      (KGA_List_Divide_3
  25.        (mapcar
  26.          '(lambda (att / tag)
  27.            (setq tag (strcase (vla-get-tagstring att)))
  28.            (list
  29.              (cond
  30.                ((wcmatch tag "DESC*") 0)
  31.                ((wcmatch tag "*SOR")  1)
  32.                (T                     2)
  33.              )
  34.              tag
  35.              (vla-get-textstring att)
  36.            )
  37.          )
  38.          (vlax-invoke obj 'getattributes)
  39.        )
  40.      )
  41.    )
  42.    '(lambda (a b) (< (caar a) (caar b)))
  43. )
  44. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:28:27 | 显示全部楼层
比格尔是根据臭名昭著的卡彭匪徒改编的。
 
Al是Alan的缩写
 
我想知道那个叫艾伦H的家伙是谁?
回复

使用道具 举报

2

主题

261

帖子

20

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 16:34:08 | 显示全部楼层
这是另一个变体
这不是lisp,而是一个程序
拆分块。拉链
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:36:53 | 显示全部楼层
代码很好,罗伊!我喜欢按wcmatch部分排序,您在其中使用了cond。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:40:01 | 显示全部楼层
@Grrr:谢谢。我的第一个想法是在vl排序条件内使用wcmatch。但事实证明,这相当困难。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:41:22 | 显示全部楼层
 
我认为您编写它的方式应该执行得更快,因为vl sort会尝试比较每一对项目,因此评估要多n倍。
 
所以总的来说,对于vl排序,我认为比较a和b的N次方对于大多数情况(如果不是全部的话)都足够了,就像你做的那样。
回复

使用道具 举报

2

主题

261

帖子

20

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 16:47:13 | 显示全部楼层
Roy_043,Grrr
如果块中有其他属性,你会怎么做?
因此完成#16
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-7 06:35 , Processed in 0.816208 second(s), 70 queries .

© 2020-2025 乐筑天下

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