Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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;
        }