Xbim解析中的枚举类型P21ParseAction

Xbim中定义的P21ParseAction是一个枚举类型,如下:

 public enum P21ParseAction
    {
        BeginList, //0
        EndList, //1
        BeginComplex, //2
        EndComplex, //3
        SetIntegerValue, //4
        SetHexValue, //5
        SetFloatValue, //6
        SetStringValue, //7
        SetEnumValue, //8
        SetBooleanValue, //9
        SetNonDefinedValue, //0x0A
        SetOverrideValue, //x0B
        BeginNestedType, //0x0C
        EndNestedType, //0x0D
        EndEntity, //0x0E
        NewEntity, //0x0F
        SetObjectValueUInt16,
        SetObjectValueInt32,
        SetObjectValueInt64
    }

Xbim解析模块类型匹配如下:

public static void ReadPropertyValueType(byte[] entityData/*BinaryReader br*/)
{
    string str;
    BinaryReader br = new BinaryReader(new MemoryStream(entityData));        
    var action = (P21ParseAction)br.ReadByte();               
    while (action != P21ParseAction.EndEntity)
    {
                
        switch (action)
        {
            case P21ParseAction.BeginList:
                break;
            case P21ParseAction.EndList:
                break;
            case P21ParseAction.BeginComplex:
                break;
            case P21ParseAction.EndComplex:
                break;
            case P21ParseAction.SetIntegerValue:
                    str = br.ReadInt64().ToString();
                break;
            case P21ParseAction.SetHexValue:
                str = br.ReadInt64().ToString();
                break;
            case P21ParseAction.SetFloatValue:
                str = br.ReadDouble().ToString();
                break;
            case P21ParseAction.SetStringValue:
                str = br.ReadString();
                break;
            case P21ParseAction.SetEnumValue:
                str = br.ReadString();
                break;
            case P21ParseAction.SetBooleanValue:
                str = br.ReadBoolean().ToString();
                break;
            case P21ParseAction.SetNonDefinedValue:
                break;
            case P21ParseAction.SetOverrideValue:
                break;
            case P21ParseAction.SetObjectValueUInt16:
                str = br.ReadUInt16().ToString();
                break;
            case P21ParseAction.SetObjectValueInt32:
                str = br.ReadInt32().ToString();
                break;
            case P21ParseAction.SetObjectValueInt64:
                str = br.ReadInt64().ToString();
                break;            
            case P21ParseAction.BeginNestedType:
                str = br.ReadString();
                break;
            case P21ParseAction.EndNestedType:
                break;
            case P21ParseAction.EndEntity:
                break;
            case P21ParseAction.NewEntity:
                break;
            default:
                throw new XbimException("Invalid Property Record #");
        }
        action = (P21ParseAction)br.ReadByte();
    }
}

测试解析结果的函数

var _context = tran.Model.Context;
string query =
$"select {EntityTableInfo.EntityData} from " +
$"{EntityTableInfo.TableName} " +
$"where {EntityTableInfo.EntityID} = {214}";
var entityData = _context.Database.SqlQuery<byte[]>(query).First();
if (entityData != null)
{
    ReadPropertyValueType(entityData);
}

entityID为214的的定义如下:

#214= IFCPROPERTYSINGLEVALUE('Actual Lighting Load',$,IFCPOWERMEASURE(0.),$);

其中entityDate的数据为:('Actual Lighting Load',$,IFCPOWERMEASURE(0.),$);

entityDate的解析如下表:

(P21ParseAction.BeginList
'Actual Lighting Load'P21ParseAction.SetStringValue
$P21ParseAction.SetNonDefinedValue
IFCPOWERMEASUREP21ParseAction.BeginNestedType
(P21ParseAction.BeginList
0P21ParseAction.SetFloatValue
)P21ParseAction.EndList 
 P21ParseAction.EndNestedType
$P21ParseAction.SetNonDefinedValue
)P21ParseAction.EndList
  P21ParseAction.EndEntity

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值