找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1109|回复: 1

[分享] Dumpallproperties with ObjectARX

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2015-7-30 21:28:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 csharp 于 2015-7-30 21:39 编辑

2012 以上有了 getpropertyvalue 、setpropertyvalue 、dumpallproperties 三个Alisp函数,2013后 ObjectARX 增加了 AcRxValue,类似 C# 的反射方法,在 MAC 上是替代 COM 的方法,下面的代码就是实现 dumpallproperties

  1. static void asdkMyGroupMyCommand () {
  2.                 // Put your command code here
  3.                 ads_name e1;
  4.                 ads_point pt;
  5.                 Acad::ErrorStatus es;
  6.                 AcDbObjectId id;
  7.                 if (acedEntSel(_T("\nPick Entity: "),e1,pt) != RTNORM)
  8.                 {
  9.                         return;
  10.                 }
  11.                 es=acdbGetObjectId(id,e1);
  12.                 if (es!=Acad::eOk)
  13.                 {
  14.                         return;
  15.                 }
  16.                 //TCHAR tmpResult[256];
  17.                 //acedGetString(0,_T("\nProperty Name: "),tmpResult);
  18.                 AcDbEntityPointer ent(id,AcDb::kForRead);
  19.                 AcRxMemberIterator *iter = AcRxMemberQueryEngine::theEngine()->newMemberIterator(ent);
  20.                 AcRxProperty *prop;
  21.                 acutPrintf(ACRX_T("\n%-30s\t%-35s\t%s"),_T("PropertyName"),_T("ValueTypeName"),_T("Values"));
  22.                 for (;!iter->done();iter->next())
  23.                 {
  24.                         //AcRxProperty * prop = AcRxProperty::cast(iter->find(tmpResult));
  25.                         prop=AcRxProperty::cast(iter->current());
  26.                         if (prop != NULL)
  27.                         {
  28.                                 Acad::ErrorStatus err=Acad::eOk;
  29.                                 AcRxValue value;
  30.                                 if ((err = prop->getValue(ent,value))==Acad::eOk)
  31.                                 {
  32.                                         ACHAR * szValue = NULL;
  33.                                         int buffSize = value.toString(NULL, 0);
  34.                                         if (buffSize > 0)
  35.                                         {
  36.                                                 buffSize++;
  37.                                                 szValue = new ACHAR[buffSize];
  38.                                                 value.toString(szValue, buffSize);
  39.                                         }
  40.                                         acutPrintf (
  41.                                                 ACRX_T("\n%-30s\t%-35s\t%s"),
  42.                                                 prop->name(),value.type().name(),
  43.                                                 (szValue == NULL) ? _T("none") : szValue
  44.                                                 );
  45.                                         if (szValue)
  46.                                                 delete szValue;
  47.                         }                        
  48.                   }
  49.                 }
  50.         }
复制代码
命令: MYCOMMANDLOCAL
Pick Entity:
PropertyName                     ValueTypeName                            Values
Angle                            double                                   0.280217
Area                             double                                   0.000000
BlockId                          AcDbObjectId                             7ef01cf8
CastShadows                      bool                                     0
ClassName                        AcString                                 none
CollisionType                    AcDb::CollisionType                      1
Color                            AcCmColor                                BYLAYER
Delta                            AcGeVector3d                             877.379927 252.500441 0.000000
EndParam                         double                                   912.990694
EndPoint                         AcGePoint3d                              2564.850002 1668.429557 0.000000
ExtensionDictionary              AcDbObjectId                             0
Handle                           AcDbHandle                               249
HasFields                        bool                                     0
HasSaveVersionOverride           bool                                     0
IsA                              AcRxClass*                               AcDbLine
IsAProxy                         bool                                     0
IsCancelling                     bool                                     0
IsEraseStatusToggled             bool                                     0
IsErased                         bool                                     0
IsModified                       bool                                     0
IsModifiedGraphics               bool                                     0
IsModifiedXData                  bool                                     0
IsNewObject                      bool                                     0
IsNotifyEnabled                  bool                                     0
IsNotifying                      bool                                     0
IsObjectIdsInFlux                bool                                     0
IsPeriodic                       bool                                     0
IsPersistent                     bool                                     1
IsPlanar                         bool                                     1
IsReadEnabled                    bool                                     1
IsReallyClosing                  bool                                     1
IsTransactionResident            bool                                     0
IsUndoing                        bool                                     0
IsWriteEnabled                   bool                                     0
LayerId                          AcDbObjectId                             7ef01c80
Length                           double                                   912.990694
LineWeight                       AcDb::LineWeight                         -1
LinetypeId                       AcDbObjectId                             7ef01ca8
LinetypeScale                    double                                   1.000000
LocalizedName                    AcString                                 直线
MaterialId                       AcDbObjectId                             7ef01f60
MergeStyle                       AcDb::DuplicateRecordCloning             1
Normal                           AcGeVector3d                             0.000000 0.000000 1.000000
ObjectId                         AcDbObjectId                             7ef03688
OwnerId                          AcDbObjectId                             7ef01cf8
PlotStyleName                    AcString                                 ByLayer
ReceiveShadows                   bool                                     0
StartParam                       double                                   0.000000
StartPoint                       AcGePoint3d                              1687.470075 1415.929116 0.000000
Thickness                        double                                   0.000000
Transparency                     AcCmTransparency                         0
Visible                          AcDb::Visibility                         0
命令: (dumppropertries (entlast))
; 错误: no function definition: DUMPPROPERTRIES
命令: (dumpallproperties (entlast))
Begin dumping object (class: AcDbLine)
Angle (type: double)  (RO)  (LocalName: 角度) = 0.280217
Annotative (type: bool)  (LocalName: 注释性) = Failed to get value
AnnotativeScale (type: AcString)  (RO)  (LocalName: 注释性比例) = Failed to get value
Area (type: double)  (RO)  (LocalName: 面积) = 0.000000
BlockId (type: AcDbObjectId)  (RO) = 7ef01cf8
CastShadows (type: bool) = 0
ClassName (type: AcString)  (RO) =
Closed (type: bool)  (RO)  (LocalName: 闭合) = Failed to get value
CollisionType (type: AcDb::CollisionType)  (RO) = 1
Color (type: AcCmColor)  (LocalName: 颜色) = BYLAYER
Delta/X (type: double)  (RO)  (LocalName: 增量 X) = 877.379927
Delta/Y (type: double)  (RO)  (LocalName: 增量 Y) = 252.500441
Delta/Z (type: double)  (RO)  (LocalName: 增量 Z) = 0.000000
EndParam (type: double)  (RO) = 912.990694
EndPoint/X (type: double)  (LocalName: 端点 X 坐标) = 2564.850002
EndPoint/Y (type: double)  (LocalName: 端点 Y 坐标) = 1668.429557
EndPoint/Z (type: double)  (LocalName: 端点 Z 坐标) = 0.000000
ExtensionDictionary (type: AcDbObjectId)  (RO) = 0
Handle (type: AcDbHandle)  (RO) = 249
HasFields (type: bool)  (RO) = 0
HasSaveVersionOverride (type: bool) = 0
Hyperlinks (type: AcDbHyperlink*)
IsA (type: AcRxClass*)  (RO) = AcDbLine
IsAProxy (type: bool)  (RO) = 0
IsCancelling (type: bool)  (RO) = 0
IsEraseStatusToggled (type: bool)  (RO) = 0
IsErased (type: bool)  (RO) = 0
IsModified (type: bool)  (RO) = 0
IsModifiedGraphics (type: bool)  (RO) = 0
IsModifiedXData (type: bool)  (RO) = 0
IsNewObject (type: bool)  (RO) = 0
IsNotifyEnabled (type: bool)  (RO) = 0
IsNotifying (type: bool)  (RO) = 0
IsObjectIdsInFlux (type: bool)  (RO) = 0
IsPeriodic (type: bool)  (RO) = 0
IsPersistent (type: bool)  (RO) = 1
IsPlanar (type: bool)  (RO) = 1
IsReadEnabled (type: bool)  (RO) = 1
IsReallyClosing (type: bool)  (RO) = 1
IsTransactionResident (type: bool)  (RO) = 0
IsUndoing (type: bool)  (RO) = 0
IsWriteEnabled (type: bool)  (RO) = 0
LayerId (type: AcDbObjectId)  (LocalName: 图层) = 7ef01c80
Length (type: double)  (RO)  (LocalName: 长度) = 912.990694
LineWeight (type: AcDb::LineWeight)  (LocalName: 线宽) = -1
LinetypeId (type: AcDbObjectId)  (LocalName: 线型) = 7ef01ca8
LinetypeScale (type: double)  (LocalName: 线型比例) = 1.000000
LocalizedName (type: AcString)  (RO) = 直线
MaterialId (type: AcDbObjectId)  (LocalName: 材质) = 7ef01f60
MergeStyle (type: AcDb::DuplicateRecordCloning)  (RO) = 1
Normal/X (type: double) = 0.000000
Normal/Y (type: double) = 0.000000
Normal/Z (type: double) = 1.000000
ObjectId (type: AcDbObjectId)  (RO) = 7ef03688
OwnerId (type: AcDbObjectId)  (RO) = 7ef01cf8
PlotStyleName (type: AcString)  (LocalName: 打印样式) = ByLayer
ReceiveShadows (type: bool) = 0
ShadowDisplay (type: AcDb::ShadowFlags)  (RO)  (LocalName: 阴影显示) = Failed to get value
StartParam (type: double)  (RO) = 0.000000
StartPoint/X (type: double)  (LocalName: 起点 X 坐标) = 1687.470075
StartPoint/Y (type: double)  (LocalName: 起点 Y 坐标) = 1415.929116
StartPoint/Z (type: double)  (LocalName: 起点 Z 坐标) = 0.000000
Thickness (type: double)  (LocalName: 厚度) = 0.000000
Transparency (type: AcCmTransparency)  (LocalName: 透明度) = 0
Visible (type: AcDb::Visibility) = 0
End object dump
nil

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

已领礼包: 264个

财富等级: 日进斗金

发表于 2015-8-4 16:21:53 | 显示全部楼层
void 方法不能查询
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 18:55 , Processed in 0.314677 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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