MCPcopy Create free account
hub / github.com/assimp/assimp / ReadTypedProperty

Function ReadTypedProperty

code/AssetLib/FBX/FBXProperties.cpp:79–139  ·  view source on GitHub ↗

------------------------------------------------------------------------------------------------ read a typed property out of a FBX element. The return value is nullptr if the property cannot be read.

Source from the content-addressed store, hash-verified

77// ------------------------------------------------------------------------------------------------
78// read a typed property out of a FBX element. The return value is nullptr if the property cannot be read.
79Property* ReadTypedProperty(const Element& element)
80{
81 ai_assert(element.KeyToken().StringContents() == "P");
82
83 const TokenList& tok = element.Tokens();
84 if (tok.size() < 2) {
85 return nullptr;
86 }
87
88 const std::string& s = ParseTokenAsString(*tok[1]);
89 const char* const cs = s.c_str();
90 if (!strcmp(cs,"KString")) {
91 checkTokenCount(tok, 5);
92 return new TypedProperty<std::string>(ParseTokenAsString(*tok[4]));
93 }
94 else if (!strcmp(cs,"bool") || !strcmp(cs,"Bool")) {
95 checkTokenCount(tok, 5);
96 return new TypedProperty<bool>(ParseTokenAsInt(*tok[4]) != 0);
97 }
98 else if (!strcmp(cs, "int") || !strcmp(cs, "Int") || !strcmp(cs, "enum") || !strcmp(cs, "Enum") || !strcmp(cs, "Integer")) {
99 checkTokenCount(tok, 5);
100 return new TypedProperty<int>(ParseTokenAsInt(*tok[4]));
101 }
102 else if (!strcmp(cs, "ULongLong")) {
103 checkTokenCount(tok, 5);
104 return new TypedProperty<uint64_t>(ParseTokenAsID(*tok[4]));
105 }
106 else if (!strcmp(cs, "KTime")) {
107 checkTokenCount(tok, 5);
108 return new TypedProperty<int64_t>(ParseTokenAsInt64(*tok[4]));
109 }
110 else if (!strcmp(cs,"Vector3D") ||
111 !strcmp(cs,"ColorRGB") ||
112 !strcmp(cs,"Vector") ||
113 !strcmp(cs,"Color") ||
114 !strcmp(cs,"Lcl Translation") ||
115 !strcmp(cs,"Lcl Rotation") ||
116 !strcmp(cs,"Lcl Scaling")
117 ) {
118 checkTokenCount(tok, 7);
119 return new TypedProperty<aiVector3D>(aiVector3D(
120 ParseTokenAsFloat(*tok[4]),
121 ParseTokenAsFloat(*tok[5]),
122 ParseTokenAsFloat(*tok[6]))
123 );
124 }
125 else if (!strcmp(cs,"double") || !strcmp(cs,"Number") || !strcmp(cs,"float") || !strcmp(cs,"Float") || !strcmp(cs,"FieldOfView") || !strcmp( cs, "UnitScaleFactor" ) ) {
126 checkTokenCount(tok, 5);
127 return new TypedProperty<float>(ParseTokenAsFloat(*tok[4]));
128 }
129 else if (!strcmp(cs, "ColorAndAlpha")) {
130 checkTokenCount(tok, 8);
131 return new TypedProperty<aiColor4D>(aiColor4D(
132 ParseTokenAsFloat(*tok[4]),
133 ParseTokenAsFloat(*tok[5]),
134 ParseTokenAsFloat(*tok[6]),
135 ParseTokenAsFloat(*tok[7]))
136 );

Callers 2

GetMethod · 0.85
GetUnparsedPropertiesMethod · 0.85

Calls 10

ParseTokenAsStringFunction · 0.85
checkTokenCountFunction · 0.85
ParseTokenAsIntFunction · 0.85
ParseTokenAsIDFunction · 0.85
ParseTokenAsInt64Function · 0.85
aiVector3DClass · 0.85
ParseTokenAsFloatFunction · 0.85
aiColor4DClass · 0.85
StringContentsMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected