Beispiel #1
0
    public FigureDumper LoadDumper(string figureName)
    {
        var figure = figureName == parentFigure.Name ?
                     parentFigure :
                     figureRecipeLoader.LoadFigureRecipe(figureName, parentFigureRecipe).Bake(parentFigure);

        var figureConfDir = pathManager.GetConfDirForFigure(figure.Name);
        MaterialSetImportConfiguration baseMaterialSetConfiguration = MaterialSetImportConfiguration.Load(figureConfDir).Single(conf => conf.name == "Base");
        ShapeImportConfiguration       baseShapeImportConfiguration = ShapeImportConfiguration.Load(figureConfDir).SingleOrDefault(conf => conf.name == "Base");
        SurfaceProperties surfaceProperties = SurfacePropertiesJson.Load(pathManager, figure);

        ShapeDumper shapeDumper = new ShapeDumper(fileLocator, device, shaderCache, parentFigure, parentFaceTransparencies, figure, surfaceProperties, baseShapeImportConfiguration);

        return(new FigureDumper(fileLocator, objectLocator, device, shaderCache, parentFigure, figure, surfaceProperties, baseMaterialSetConfiguration, baseShapeImportConfiguration, shapeDumper));
    }
    public static void Import(ImporterPathManager pathManager, FileInfo outfitConfFile, DirectoryInfo contentDestDirectory)
    {
        string name = outfitConfFile.GetNameWithoutExtension();

        var outfitsDir      = contentDestDirectory.Subdirectory("outfits");
        var destinationFile = outfitsDir.File(name + ".dat");

        if (destinationFile.Exists)
        {
            return;
        }

        string json  = outfitConfFile.ReadAllText();
        var    proxy = JsonConvert.DeserializeObject <OutfitJsonProxy>(json);

        var items = proxy.items
                    .Select(itemProxy => {
            ImportProperties.Load(pathManager, itemProxy.figure);                     //verify that that a figure with this name exists
            return(new Outfit.Item(itemProxy.figure, itemProxy.label, itemProxy.isInitiallyVisible));
        })
                    .ToList();

        List <Outfit.Fabric> fabrics = proxy.fabrics?
                                       .Select(entry => {
            var label = entry.Key;
            var materialSetsByFigureName = entry.Value;

            //verify that the material set for each figure exists
            foreach (var entry2 in materialSetsByFigureName)
            {
                var figureName        = entry2.Key;
                var materialSetName   = entry2.Value;
                var figureConfDir     = pathManager.GetConfDirForFigure(figureName);
                var materialSetsConfs = MaterialSetImportConfiguration.Load(figureConfDir);
                materialSetsConfs.Where(conf => conf.name == materialSetName).Single();
            }

            return(new Outfit.Fabric(label, materialSetsByFigureName));
        })
                                       .ToList();

        var outfit = new Outfit(proxy.label, items, fabrics);

        outfitsDir.CreateWithParents();
        Persistance.Save(destinationFile, outfit);
    }
    public static ImportProperties Load(ImporterPathManager pathManager, string figureName)
    {
        JsonSerializerSettings settings = new JsonSerializerSettings {
            MissingMemberHandling = MissingMemberHandling.Error
        };
        string        json      = pathManager.GetConfDirForFigure(figureName).File("import-properties.json").ReadAllText();
        JsonProxy     proxy     = JsonConvert.DeserializeObject <JsonProxy>(json, settings);
        UrisJsonProxy urisProxy = proxy.uris;

        var uris = new FigureUris(
            urisProxy.basePath,
            urisProxy.documentName,
            urisProxy.geometryId,
            urisProxy.rootNodeId,
            urisProxy.skinBindingId);

        return(new ImportProperties(uris, proxy.hdCorrectionInitialValue));
    }
Beispiel #4
0
    public static SurfaceProperties Load(ImporterPathManager pathManager, Figure figure)
    {
        JsonSerializerSettings settings = new JsonSerializerSettings {
            MissingMemberHandling = MissingMemberHandling.Error
        };
        string    json  = pathManager.GetConfDirForFigure(figure.Name).File("surface-properties.json").ReadAllText();
        JsonProxy proxy = JsonConvert.DeserializeObject <JsonProxy>(json, settings);

        int subdivisionLevel = proxy.subdivisionLevel;

        string[] surfaceNames = figure.Geometry.SurfaceNames;
        Dictionary <string, int> surfaceNameToIdx = Enumerable.Range(0, surfaceNames.Length)
                                                    .ToDictionary(idx => surfaceNames[idx], idx => idx);

        int[] renderOrder;
        if (proxy.renderOrder == null)
        {
            renderOrder = new int[] { };
        }
        else
        {
            renderOrder = proxy.renderOrder.Select(surfaceName => surfaceNameToIdx[surfaceName]).ToArray();
        }

        float[] opacities = surfaceNames.Select(name => proxy.defaultOpacity).ToArray();
        if (proxy.opacities != null)
        {
            foreach (var entry in proxy.opacities)
            {
                opacities[surfaceNameToIdx[entry.Key]] = entry.Value;
            }
        }

        bool precomputeScattering = proxy.precomputeScattering;

        string materialSetForOpacities = proxy.materialSetForOpacities;

        return(new SurfaceProperties(subdivisionLevel, renderOrder, opacities, precomputeScattering, materialSetForOpacities));
    }