protected virtual SceneObject BuildSOFromType(string typeIdentifier, FScene scene, SceneSerializer serializer, TypedAttribSet attributes) { // restore custom type if client has registered a builder for it if (scene.TypeRegistry.ContainsType(typeIdentifier)) { SOBuildFunc buildFunc = scene.TypeRegistry.FindBuilder(typeIdentifier); if (buildFunc != null) { SceneObject so = buildFunc(this, scene, attributes); if (so != null) { return(so); } } } if (typeIdentifier == IOStrings.TypeCylinder) { return(BuildCylinder(scene, attributes)); } else if (typeIdentifier == IOStrings.TypeBox) { return(BuildBox(scene, attributes)); } else if (typeIdentifier == IOStrings.TypeSphere) { return(BuildSphere(scene, attributes)); } else if (typeIdentifier == IOStrings.TypePivot) { return(BuildPivot(scene, attributes)); } else if (typeIdentifier == IOStrings.TypeMeshReference) { return(BuildMeshReference(scene, serializer.TargetFilePath, attributes)); } else if (typeIdentifier == IOStrings.TypePolyCurve) { return(BuildPolyCurveSO(scene, attributes)); } else if (typeIdentifier == IOStrings.TypePolyTube) { return(BuildPolyTubeSO(scene, attributes)); } else if (typeIdentifier == IOStrings.TypeMesh) { return(BuildMeshSO(scene, attributes)); } else if (typeIdentifier == IOStrings.TypeDMesh) { return(BuildDMeshSO(scene, attributes)); } else { return(null); } }
public void RegisterType(SOType t, SOEmitSerializationFunc serializeFunc = null, SOBuildFunc buildFunc = null) { if (knownTypes.ContainsKey(t.identifier)) { throw new InvalidOperationException("SORegistry.RegisterType: type " + t.identifier + " already registered!"); } SOInfo info = new SOInfo() { type = t, serializer = serializeFunc, builder = buildFunc }; knownTypes[t.identifier] = info; }