乐筑天下

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

[编程交流] 获取并设置

[复制链接]

18

主题

111

帖子

93

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 15:25:14 | 显示全部楼层 |阅读模式
亲爱的程序员
 
 
你们中有人有过获取和设置对象属性的经验吗?
试图获取块的对象属性,但返回的是块记录的名称,而不是转储属性时可以看到的字符串
 
 

当我扔掉道具的时候我看到了这个
 
 
.....
块ID(类型:AcDbObjectId)(RO)=7ffff9359f0
.....
 
 
执行时
 
 
(getpropertyvalue e1“BlockId”)
 
 
我得到的只是
 
 
$(getpropertyvalue e1“BlockId”)
_$
 
 
执行entget时
 
 
((-1 . ) (0.“BLOCK\u RECORD”)(5.“1F”)(102.{ACAD\u XDICTIONARY”)(360。)(102 . "}") (330 . ) (100.“AcDbSymbolTableRecord”)(100.“AcDbBlockTableRecord”)(2.“*Model_Space”)(360。)(340 . ) (70 . 0) (280 . 1) (281 . 0))
 
 
 
 
我得到了大量的信息,但不是我想要的区块id
还是我丢了东西?
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:29:18 | 显示全部楼层
我的2007版没有此功能
(getpropertyvalue e1“BlockId”)
 
让其他积极的成员帮助你。。
 
 
FWIW这是获取“值”的示例。。
  1. ((lambda (l)
  2.   (vlax-for x (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
  3.     (setq l (cons (cons (vla-get-Name x)(vla-get-[color="blue"]ObjectID[/color] x)) l))
  4.     )
  5.   l )
  6. nil
  7. )

 
  1. (("BKL" . 2130687768) ("_Oblique" . 2130687736) ("*Paper_Space0" . 2130627944) ("*Paper_Space" . 2130627904) ("*Model_Space" . 2130627832))

 
我可能对你的BlockId值错了。。
回复

使用道具 举报

46

主题

161

帖子

104

银币

后起之秀

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

铜币
242
发表于 2022-7-5 15:36:25 | 显示全部楼层
自AC2012起,以下功能可用
dumpallproperties
getpropertyvalue
setpropertyvalue
iPropertyReadOnly
 
我不知道用ename作为字符串要实现什么操作,也许需要更多的解释?
顺便说一句(如何将ename作为字符串)
  1. (vl-princ-to-string (CAR (ENTSEL)))
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 15:40:06 | 显示全部楼层
2015年,我的区块记录中没有“BlockId”,但我有一个“ObjectID”。Vlax dump表示值为43(RO),getpropertyvalue返回一个ename。可疑。
 
从您的示例中,转储返回的字符串(7ffff9359f0)似乎是使用getpropertyvalue()获得的名称,但我从未见过使用字符串表示名称的程序,据我所知,您也无法从字符串“创建”名称。
 
getpropertyvalue/getpropertyvalue函数是为mac用户创建的,作为vlax get property/vlax put property的替代品,但它们似乎有缺陷,并不总是有效。例如,如果我使用(getpropertyvalue myblkrecord“IsDynamicBlock”),它将返回;错误:ADS请求错误
 
如果您是windows用户,我推荐如下Vlisp
(vlax get属性(vlax ename->vla object myblkrecord)“ObjectID”)。如果我使用(vlax get property(vlax ename->vla object myblkrecord)“IsDynamicBlock”,它会工作并返回:vlax false。
 
旁注:如果一个属性在转储时有(RO),这意味着它是只读的,因此您可以获取它们,但不能设置它们。
回复

使用道具 举报

18

主题

111

帖子

93

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 15:44:19 | 显示全部楼层
@hanhphuc公司
@杰夫!
谢谢你的代码:-D,但我不能使用对象id,因为当块有微小变化时,它会发生变化
我需要一个可靠的属性,我可以用它来选择一个实体(我唯一能想到的是插入点和ename的组合)
为什么要额外检查-->因为一个人可以插入多个名称相同、内容不同的块,所以blockname不是no
我希望我的例程是唯一的activex而不是autolisp,但在这种情况下,我认为我别无选择
需要将vla对象转换为ename,然后从中获得assoc 10或与插入点合并为vlax数组
 
 
@ziele_o2k谢谢你的代码
 
@杰夫!谢谢你告诉我MAC的部分我忘了
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:45:42 | 显示全部楼层
“需要将vla对象转换为ename,并从中获得assoc 10或与插入点合并为vlax数组”:vlax vla对象->ename
 
获取插入点:(vlax get obj’insertionpoint)或(cdr(assoc 10(entget ename)))
回复

使用道具 举报

46

主题

161

帖子

104

银币

后起之秀

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

铜币
242
发表于 2022-7-5 15:51:11 | 显示全部楼层
 
为什么你不能使用手柄?
 
要查看可以与get/set propertyvalue一起使用的属性,应该使用dumpallproperties而不是Vlax dump。是的,它适用于mac用户,但这不是vlax get/vlax set属性的1:1替换。
获取/设置propertyvalue提供了更多的可能性。
如果你不介意的话,我可以举几个例子。
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 15:54:26 | 显示全部楼层
不客气!
 
在不确切知道自己正在努力实现什么以及迄今为止做了什么的情况下,盲目地提出建议是相当困难的,但有几点可能值得一提:
块记录和块插入是两件不同的事情。块记录是块定义,即使用块编辑或参照编辑时看到的内容。不能“选择”块定义。当用户“选择块”时,他实际上选择了一个插入。
给定块定义的不同插入将始终具有相同的内容,除非该块是动态的。如果块是动态的,则插入的名称将匿名(即:*232),因此需要检查其属性“EffectiveName”以获取相应块定义的名称。您可以使用以下选项之一
(vlax get property(vlax ename->vla object(car(entsel)))“EffectiveName”)或
(vla get EffectiveName(vlax ename->vla object(car(entsel)))
有些事情在lisp中更容易完成,有些在Visual lisp或active-x中更容易完成。不要仅仅为了一种语言而局限于一种语言。。。更多选项更有趣
 
请随意发布您的代码以获取建议。
干杯
 
编辑:
@齐尔
IsDynamicBlock在2015年不起作用。。。除非只有mac?我很想知道“get/set propertyvalue提供了更多的可能性”基于哪些事实。我总是对学习新事物持开放态度!
回复

使用道具 举报

18

主题

111

帖子

93

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 15:58:44 | 显示全部楼层
 
好lol我想要的是使用getpropertyvalue获取blockid,它最终似乎是ename的str。
虽然不能真正使用它,但有一个我可以使用的答案:-D
回复

使用道具 举报

46

主题

161

帖子

104

银币

后起之秀

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

铜币
242
发表于 2022-7-5 16:01:43 | 显示全部楼层
 
作为其他论坛的第一个例子-尝试从附件中删除对象。仅带VanillaLisp/VisualLisp的dwg
稍后还有更多示例,我将检查IsDynamicBlock属性。
del_obj。图纸
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 21:05 , Processed in 0.438982 second(s), 72 queries .

© 2020-2025 乐筑天下

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