乐筑天下

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

[编程交流] 指定特定DXF Co

[复制链接]

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 00:10:26 | 显示全部楼层
听起来我仍然需要使用第n个函数来检索所需的结果,对吗?massoc只会将我的所有选项减少到300个点对,这样我就不会在300组之外错误地选择一个错误的选项?
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:12:37 | 显示全部楼层
对假设数据是恒定的,并且总是以相同的顺序。在您第一次发布的示例中,我看不到任何其他方式来区分它。
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 00:17:14 | 显示全部楼层
好啊非常感谢。我只是想确保我理解正确。所以massoc是一个子函数,它可以在代码中的任何地方,或者它是否需要位于我需要在程序中使用它的地方?
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:19:20 | 显示全部楼层
将其作为子函数放在代码中的任何位置。然后用你的assoc列表(massoc4 300(entget ename))调用它。
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 00:23:05 | 显示全部楼层
每次使用时,我都会收到此错误消息。这会影响我的其余代码吗?
 
错误:错误的参数类型:consp“90 LR”
 
编辑:Nevermind。我试着使用(cdr(nth 4(massoc4 300 elist)))。我想cdr函数已经在massoc子函数中使用了,所以在代码的其他部分中不再需要它。谢谢大家的帮助!
 
顺便问一下,massoc4末尾的4有什么意义吗?我可以用massoc吗?
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:26:03 | 显示全部楼层
接得好。我的措辞可能在这方面误导了你,因为我没有查看返回列表的结构。很抱歉
至于函数名,您可以将其命名为massoc,只要确保如果您使用了像MASSOC4这样的递归函数,您也可以将其自身调用的位置重命名。希望这有意义?
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 00:29:02 | 显示全部楼层
是的,这很有道理。谢谢
回复

使用道具 举报

55

主题

325

帖子

274

银币

后起之秀

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

铜币
280
发表于 2022-7-6 00:31:15 | 显示全部楼层
好的,这里有一个不同的场景,但仍然围绕着同一个主题。我有使用带有属性的块的多重引线。我试图获得这些属性的价值。从帮助文件中,多重引线“块属性文本字符串”的DXF代码为302。当你在一个多重引线上运行(entget(car(entsel)),有两个302值。第一个302值是(302。“LEADER{”),而第二个302值是我真正想要的。我可以使用相同的massoc子函数来提取值,但我认为有一种更好的方法,你们中一些经验更丰富的程序员可以向我指出。
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:34:55 | 显示全部楼层
这就是我一直在做的。它再次使用了member和assoc的组合。我假设您只想提取文本字符串,而不是替换它?因为如果你想替换它,我通常在同一个while循环中提取对象ID。
 
  1. ;get the attributes for the block
  2. (setq tmp1 (member (assoc 344[color=black] elist[/color]) elist))[color=red] ;cut out the irrelevant (and duplicated car) earlier codes[/color]
  3. (while (setq tmp1 (member (assoc 330 tmp1) tmp1))
  4.   (setq attdata (cons (list (cdr (assoc 177 tmp1))[color=red] ;attribute number - this becomes important if the text has fields in it[/color]
  5.                             (cdr (assoc 302 tmp1))[color=red] ;the attribute string itself[/color]
  6.                             (= (cdr (assoc 101 (entget (cdr (assoc 330 tmp1))))) "Embedded Object")[color=red] ;single or multiline attribute - this becomes important if you want to know which formatting strings might be present[/color]
  7.                             )
  8.                       attdata
  9.                       )
  10.         tmp1 (cdr tmp1)
  11.         )
  12.   );while
  13. ;if attributes
  14. (if attdata
  15. [color=blue]....process them[/color]
  16.     )
回复

使用道具 举报

1

主题

116

帖子

115

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:39:16 | 显示全部楼层
我应该补充一点,上面的代码是为在多重引线块中可能有多个属性而编写的。它只适用于一个属性,但也适用于100个属性。如果你知道你只对其中一个感兴趣,你可以把它简化为。
 
  1. (cdr (assoc 302 (member (assoc 344[color=black] elist[/color]) elist)))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:43 , Processed in 0.667913 second(s), 71 queries .

© 2020-2025 乐筑天下

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