找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1136|回复: 6

[已解决] 哪个函数可以获取视口的字段ID?

[复制链接]

已领礼包: 217个

财富等级: 日进斗金

发表于 2017-3-17 09:46:27 | 显示全部楼层 |阅读模式
悬赏20D豆已解决
本帖最后由 yufeng37 于 2017-3-17 09:52 编辑

我用插入“字段”的时候看到视口的ID,(图在最下面)
%<\AcObjProp.16.2 Object(%<\_ObjId 8796039678448>%).CustomScale \f "%sn">%
我试了下面2个办法,获取到的ID都不是_ObjId 8796039678448

1.用entget函数
获取选择集的第一个对象属性
(entget (ssname (ssget)0))

选择对象:((-1 . <图元名: 7ffffba9620>)

2.用vlisp也不行
(setq en (car (entsel "选择对象")))
(setq xobj (vlax-ename->vla-object en))
(vlax-dump-objectxobj)

<图元名: 7ffffba9620>
#<VLA-OBJECT IAcadPViewport 000000002b8c2ae8>
; IAcadPViewport: IAcadPViewport 接口
;特性值:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 0000000140c76c70>
;   ArcSmoothness = 100
;   Center = (257.482 200.459 0.0)
;   Clipped (RO) = 0
;   CustomScale = 0.0625
;   Direction = (0.0 0.0 1.0)
;   DisplayLocked = 0
;   Document (RO) = #<VLA-OBJECT IAcadDocument 0000000040140c50>
;   GridOn = 0
;   Handle (RO) = "85C2"
;   Ha**tensionDictionary (RO) = -1
;   HasSheetView (RO) = 0
;   Height = 82.8027
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 00000000406508e8>
;   LabelBlockId = 0
;   LabelBlockId32 = 0
;   Layer = "Defpoints"
;   LayerPropertyOverrides (RO) = 0
;   LensLength = 50.0
;   Linetype = "BYLAYER"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   ModelView = nil
;   ObjectID (RO) = 43
;   ObjectID32 (RO) = 43
;   ObjectName (RO) = "AcDbViewport"
;   OwnerID (RO) = 42
;   OwnerID32 (RO) = 42
;   PlotStyleName = "ByLayer"
;   ShadePlot = 0
;   SheetView = nil
;   SnapBasePoint = (0.0 0.0)
;   SnapOn = 0
;   SnapRotationAngle = 0.0
;   StandardScale = 8
;   StandardScale2 = 8
;   Target = (0.0 0.0 0.0)
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 000000004064fc80>
;   TwistAngle = 0.0
;   UCSIconAtOrigin = 0
;   UCSIconOn = -1
;   UCSPerViewport = -1
;   ViewportOn = -1
;   Visible = -1
;   VisualStyle = 1
;   Width = 115.451
T



请问大师,字段里面的ObjId 8796039678448是用什么函数可以获取到呢?


QQ截图20170316195721.png

最佳答案

查看完整内容

帮你测试了下, ID 就是你在图纸空间选的那个视口对象 选择对象: 命令: (setq a (car (entsel))) 选择对象: 命令: (xdrx-getpropertyvalue a "objectid") -2499032 命令: (vlax-dump-object (vlax-ename->vla-object a) t) ; IAcadPViewport2: IAcadPViewport2 接口 ;特性值: ; Application (RO) = # ; ArcSmoothness = 1000 ; Center = (128.5 97.5 0.0) ; Clipped (RO) = 0 ; CustomScale = 0.559789 ; Di ...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-3-17 09:46:28 | 显示全部楼层
帮你测试了下, ID 就是你在图纸空间选的那个视口对象


QQ截图20170317101336.png


选择对象:
命令: (setq a (car (entsel)))

选择对象: <图元名: -2621d8>

命令: (xdrx-getpropertyvalue a "objectid")
-2499032


命令: (vlax-dump-object (vlax-ename->vla-object a) t)
; IAcadPViewport2: IAcadPViewport2 接口
;特性值:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c>
;   ArcSmoothness = 1000
;   Center = (128.5 97.5 0.0)
;   Clipped (RO) = 0
;   CustomScale = 0.559789
;   Direction = (0.0 0.0 1.0)
;   DisplayLocked = 0
;   Document (RO) = #<VLA-OBJECT IAcadDocument 04114eb8>
;   GridOn = 0
;   Handle (RO) = "2ED"
;   Ha**tensionDictionary (RO) = -1
;   HasSheetView (RO) = 0
;   Height = 156.0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 16cde28c>
;   LabelBlockId = 0
;   Layer = "0"
;   LayerPropertyOverrides (RO) = 0
;   LensLength = 50.0
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   ModelView = nil
;   ObjectID (RO) = -2499032
;   ObjectName (RO) = "AcDbViewport"
;   OwnerID (RO) = -2507056
;   PlotStyleName = "ByLayer"
;   ShadePlot = 0
;   SheetView = nil
;   SnapBasePoint = (0.0 0.0)
;   SnapOn = 0
;   SnapRotationAngle = 0.0
;   StandardScale = 1
;   Target = (0.0 0.0 0.0)
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 16c8bd08>
;   TwistAngle = 0.0
;   UCSIconAtOrigin = -1
;   UCSIconOn = -1
;   UCSPerViewport = -1
;   ViewportOn = -1
;   Visible = -1
;   VisualStyle = 1
;   Width = 205.6
;支持的方法:
;   ArrayPolar (3)
;   ArrayRectangular (6)
;   Copy ()
;   Delete ()
;   Display (1)
;   GetBoundingBox (2)
;   GetExtensionDictionary ()
;   GetGridSpacing (2)
;   GetSnapSpacing (2)
;   GetXData (3)
;   Highlight (1)
;   IntersectWith (2)
;   Mirror (2)
;   Mirror3D (3)
;   Move (2)
;   Rotate (2)
;   Rotate3D (3)
;   ScaleEntity (2)
;   SetGridSpacing (2)
;   SetSnapSpacing (2)
;   SetXData (2)
;   SyncModelView ()
;   TransformBy (1)
;   Update ()
T

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-3-17 09:55:09 | 显示全部楼层
获得当前激活的视口

命令: (setq o (vla-get-activeviewport (vla-get-activedocument
(vlax-get-acad-object))))
#<VLA-OBJECT IAcadViewport 16c3824c>

命令: (vlax-dump-object o t)
; IAcadViewport: 显示图形模型空间的一部分的有限区域
;特性值:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c>
;   ArcSmoothness = 1000
;   Center = (1478.55 1065.18)
;   Direction = (0.0 0.0 1.0)
;   Document (RO) = #<VLA-OBJECT IAcadDocument 04114eb8>
;   GridOn = 0
;   Handle (RO) = "EA"
;   Ha**tensionDictionary (RO) = 0
;   Height = 181.97
;   LowerLeftCorner (RO) = (0.0 0.0)
;   Name = "*Active"
;   ObjectID (RO) = -2506928
;   ObjectName (RO) = "AcDbViewportTableRecord"
;   OrthoOn = 0
;   OwnerID (RO) = -2507712
;   SnapBasePoint = (0.0 0.0)
;   SnapOn = 0
;   SnapRotationAngle = 0.0
;   Target = (0.0 0.0 0.0)
;   UCSIconAtOrigin = -1
;   UCSIconOn = -1
;   UpperRightCorner (RO) = (1.0 1.0)
;   Width = 373.682
;支持的方法:
;   Delete ()
;   GetExtensionDictionary ()
;   GetGridSpacing (2)
;   GetSnapSpacing (2)
;   GetXData (3)
;   SetGridSpacing (2)
;   SetSnapSpacing (2)
;   SetView (1)
;   SetXData (2)
;   Split (1)
T
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 217个

财富等级: 日进斗金

 楼主| 发表于 2017-3-17 10:14:04 | 显示全部楼层

字段表达式里面ObjID是13位数字,用您的办法没有办法获取类似的ID。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-3-17 11:58:02 | 显示全部楼层

你是高版本的CAD吧? 低版本不是13位, 我有空看看高版本, 获得都是这个方法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 217个

财富等级: 日进斗金

 楼主| 发表于 2017-3-17 12:51:15 | 显示全部楼层
本帖最后由 yufeng37 于 2017-3-17 12:53 编辑

我用的CAD2010
您的CAD上窗口和命令行获得的是ID都是负数,我这边用您的办法获取的id也是7位负数(例如: -5049184),和字段对话框内的id不一致。实际对话框里面是13位整数。另外,用-5049184插入字段

%<\AcObjProp.16.2 Object(%<\_ObjId -5049184>%).CustomScale \f "%sn">%

显示出来是####,

也就是说xdrx_getpropertyvalue函数没有针对2010优化?否则得到的objectID应该是13位整数,而不是7位的负数
苦恼~~


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-3-17 13:52:49 | 显示全部楼层
写了个函数,http://bbs.xdcad.net/thread-707629-1-1.html ,你看看,可以求13位ID值

命令: (xd::object:idstr o)
"2223643506960"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 00:17 , Processed in 0.463300 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表