Exemplo n.º 1
0
        public void AddInstance(Rhino.Geometry.Transform transform)
        {
            foreach (GltfMeshMaterialPair pair in  meshMaterialPairs)
            {
                Rhino.Geometry.Mesh rhinoMesh = pair.RhinoMesh.DuplicateMesh();

                rhinoMesh.Transform(GltfUtils.YupToZup * transform);

                rhinoMesh.TextureCoordinates.ReverseTextureCoordinates(1);

                Guid objectId = doc.Objects.AddMesh(rhinoMesh);

                Rhino.DocObjects.RhinoObject rhinoObject = doc.Objects.Find(objectId);

                Rhino.Render.RenderMaterial material = converter.GetMaterial(pair.MaterialIndex);

                if (rhinoObject != null && material != null)
                {
                    rhinoObject.RenderMaterial            = material;
                    rhinoObject.Attributes.MaterialSource = Rhino.DocObjects.ObjectMaterialSource.MaterialFromObject;
                    rhinoObject.Attributes.Name           = pair.Name;

                    rhinoObject.CommitChanges();
                }
            }
        }
        private string TextureName(bool b, Rhino.DocObjects.RhinoObject myGeo)
        {
            //string tex = "No Texture";

            if ((b) && Rhino.RhinoDoc.ActiveDoc.RenderTextures.Count > 0)
            {
                Rhino.Render.RenderMaterial myGeoRendMat = myGeo.GetRenderMaterial(true);
                Rhino.Render.TextureMapping texMapping   = myGeo.GetTextureMapping(1);
                Rhino.Render.Fields.Field   fields       = myGeoRendMat.Fields.GetField(myGeoRendMat.Name);
                string tex = fields.Name;



                //Rhino.Render.RenderTexture renderTexture = myGeoRendMat.TextureChildSlotName

                return(tex);
            }

            else
            {
                return("No Texture");
            }
        }
Exemplo n.º 3
0
        static ElementId ToHost(Rhino.Render.RenderMaterial mat, Document doc, string name)
        {
            var appearanceAssetId = ElementId.InvalidElementId;

#if REVIT_2019
            if (AppearanceAssetElement.GetAppearanceAssetElementByName(doc, name) is AppearanceAssetElement appearanceAssetElement)
            {
                appearanceAssetId = appearanceAssetElement.Id;
            }
            else
            {
                appearanceAssetElement = GetGenericAppearanceAssetElement(doc);
                if (appearanceAssetElement is null)
                {
                    var assets = Revit.ActiveUIApplication.Application.GetAssets(AssetType.Appearance);
                    foreach (var asset in assets)
                    {
                        if (asset.Name == GenericAssetName())
                        {
                            appearanceAssetElement = AppearanceAssetElement.Create(doc, name, asset);
                            appearanceAssetId      = appearanceAssetElement.Id;
                            break;
                        }
                    }
                }
                else
                {
                    appearanceAssetElement = appearanceAssetElement.Duplicate(name);
                    appearanceAssetId      = appearanceAssetElement.Id;
                }

                if (appearanceAssetId != ElementId.InvalidElementId)
                {
                    using (var editScope = new AppearanceAssetEditScope(doc))
                    {
                        var editableAsset = editScope.Start(appearanceAssetId);

                        //var category = editableAsset.FindByName("category") as AssetPropertyString;
                        //category.Value = $":{mat.Category.FirstCharUpper()}";

                        var description = editableAsset.FindByName("description") as AssetPropertyString;
                        description.Value = mat.Notes ?? string.Empty;

                        var keyword = editableAsset.FindByName("keyword") as AssetPropertyString;
                        {
                            string tags = string.Empty;
                            foreach (var tag in (mat.Tags ?? string.Empty).Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
                            {
                                tags += $":{tag.Replace(':', ';')}";
                            }
                            keyword.Value = tags;
                        }

                        if (mat.SmellsLikeMetal || mat.SmellsLikeTexturedMetal)
                        {
                            var generic_self_illum_luminance = editableAsset.FindByName(Generic.GenericIsMetal) as AssetPropertyBoolean;
                            generic_self_illum_luminance.Value = true;
                        }

                        if (mat.Fields.TryGetValue(Rhino.Render.RenderMaterial.BasicMaterialParameterNames.Diffuse, out Rhino.Display.Color4f diffuse))
                        {
                            var generic_diffuse = editableAsset.FindByName(Generic.GenericDiffuse) as AssetPropertyDoubleArray4d;
                            generic_diffuse.SetValueAsDoubles(new double[] { diffuse.R, diffuse.G, diffuse.B, diffuse.A });
                        }

                        if (mat.Fields.TryGetValue(Rhino.Render.RenderMaterial.BasicMaterialParameterNames.Transparency, out double transparency))
                        {
                            var generic_transparency = editableAsset.FindByName(Generic.GenericTransparency) as AssetPropertyDouble;
                            generic_transparency.Value = transparency;

                            if (mat.Fields.TryGetValue(Rhino.Render.RenderMaterial.BasicMaterialParameterNames.TransparencyColor, out Rhino.Display.Color4f transparencyColor))
                            {
                                diffuse = diffuse.BlendTo((float)transparency, transparencyColor);

                                var generic_diffuse = editableAsset.FindByName(Generic.GenericDiffuse) as AssetPropertyDoubleArray4d;
                                generic_diffuse.SetValueAsDoubles(new double[] { diffuse.R, diffuse.G, diffuse.B, diffuse.A });
                            }
                        }

                        if (mat.Fields.TryGetValue(Rhino.Render.RenderMaterial.BasicMaterialParameterNames.Ior, out double ior))
                        {
                            var generic_refraction_index = editableAsset.FindByName(Generic.GenericRefractionIndex) as AssetPropertyDouble;
                            generic_refraction_index.Value = ior;
                        }

                        if (mat.Fields.TryGetValue(Rhino.Render.RenderMaterial.BasicMaterialParameterNames.Shine, out double shine))
                        {
                            if (mat.Fields.TryGetValue(Rhino.Render.RenderMaterial.BasicMaterialParameterNames.Specular, out Rhino.Display.Color4f specularColor))
                            {
                                var generic_reflectivity_at_0deg = editableAsset.FindByName(Generic.GenericReflectivityAt0deg) as AssetPropertyDouble;
                                generic_reflectivity_at_0deg.Value = shine * specularColor.L;
                            }
                        }

                        if (mat.Fields.TryGetValue(Rhino.Render.RenderMaterial.BasicMaterialParameterNames.Reflectivity, out double reflectivity))
                        {
                            if (mat.Fields.TryGetValue(Rhino.Render.RenderMaterial.BasicMaterialParameterNames.ReflectivityColor, out Rhino.Display.Color4f reflectivityColor))
                            {
                                var generic_reflectivity_at_90deg = editableAsset.FindByName(Generic.GenericReflectivityAt90deg) as AssetPropertyDouble;
                                generic_reflectivity_at_90deg.Value = reflectivity * reflectivityColor.L;

                                if (mat.Fields.TryGetValue("fresnel-enabled", out bool fresnel_enabled) && !fresnel_enabled)
                                {
                                    diffuse = diffuse.BlendTo((float)reflectivity, reflectivityColor);
                                    var generic_diffuse = editableAsset.FindByName(Generic.GenericDiffuse) as AssetPropertyDoubleArray4d;
                                    generic_diffuse.SetValueAsDoubles(new double[] { diffuse.R, diffuse.G, diffuse.B, diffuse.A });
                                }
                            }
                        }

                        if (mat.Fields.TryGetValue("polish-amount", out double polish_amount))
                        {
                            var generic_glossiness = editableAsset.FindByName(Generic.GenericGlossiness) as AssetPropertyDouble;
                            generic_glossiness.Value = polish_amount;
                        }

                        if (mat.Fields.TryGetValue(Rhino.Render.RenderMaterial.BasicMaterialParameterNames.Emission, out Rhino.Display.Color4f emission))
                        {
                            var generic_self_illum_filter_map = editableAsset.FindByName(Generic.GenericSelfIllumFilterMap) as AssetPropertyDoubleArray4d;
                            generic_self_illum_filter_map.SetValueAsDoubles(new double[] { emission.R, emission.G, emission.B, emission.A });
                        }

                        if (mat.Fields.TryGetValue(Rhino.Render.RenderMaterial.BasicMaterialParameterNames.DisableLighting, out bool self_illum))
                        {
                            var generic_self_illum_luminance = editableAsset.FindByName(Generic.GenericSelfIllumLuminance) as AssetPropertyDouble;
                            generic_self_illum_luminance.Value = self_illum ? 200000 : 0.0;
                        }

                        editScope.Commit(false);
                    }
                }
            }
#endif

            return(appearanceAssetId);
        }
 internal SceneObject(Rhino.Geometry.Mesh mesh, Rhino.Render.RenderMaterial material)
 {
     m_mesh     = mesh;
     m_material = material;
 }