Пример #1
0
 public static bool ShowsVertexColors(DB.DisplayStyle displayStyle)
 {
     return(displayStyle == DB.DisplayStyle.Shading ||
            displayStyle == DB.DisplayStyle.ShadingWithEdges ||
            displayStyle == DB.DisplayStyle.Realistic ||
            displayStyle == DB.DisplayStyle.RealisticWithEdges);
 }
Пример #2
0
 public static bool ShowsEdges(DB.DisplayStyle displayStyle)
 {
     return(displayStyle == DB.DisplayStyle.Wireframe ||
            displayStyle == DB.DisplayStyle.HLR ||
            displayStyle == DB.DisplayStyle.ShadingWithEdges ||
            displayStyle == DB.DisplayStyle.FlatColors ||
            displayStyle == DB.DisplayStyle.RealisticWithEdges);
 }
Пример #3
0
            public virtual DB3D.EffectInstance EffectInstance(DB.DisplayStyle displayStyle, bool IsShadingPass)
            {
                if (effectInstance == null)
                {
                    effectInstance = new DB3D.EffectInstance(vertexFormatBits);
                }

                return(effectInstance);
            }
            public override DB3D.EffectInstance EffectInstance(DB.DisplayStyle displayStyle, bool IsShadingPass)
            {
                var ei = base.EffectInstance(displayStyle, IsShadingPass);

                bool hlr          = displayStyle == DB.DisplayStyle.HLR;
                bool flatColors   = displayStyle == DB.DisplayStyle.FlatColors || displayStyle <= DB.DisplayStyle.HLR;
                bool useMaterials = displayStyle > DB.DisplayStyle.HLR && displayStyle != DB.DisplayStyle.FlatColors;
                bool useTextures  = displayStyle > DB.DisplayStyle.Rendering && displayStyle != DB.DisplayStyle.FlatColors;

                var ambient      = Color.Black;
                var color        = Color.Black;
                var diffuse      = Color.Black;
                var emissive     = Color.Black;
                var glossiness   = 1.0;
                var specular     = Color.Black;
                var transparency = 0.0;

                if (IsShadingPass)
                {
                    if (DB3D.DrawContext.IsTransparentPass())
                    {
                        transparency = displayStyle == DB.DisplayStyle.Wireframe ? 0.8 : 0.5;
                        var previewColor = Color.Silver;
                        if (flatColors)
                        {
                            emissive = previewColor;
                        }
                        else
                        {
                            diffuse = previewColor;
                            ambient = Color.FromArgb(diffuse.R / 2, diffuse.G / 2, diffuse.B / 2);
                            if (useTextures)
                            {
                                glossiness = 0.5;
                                specular   = Color.White;
                            }
                        }
                    }
                    else
                    {
                        var drawColor = rhinoObject.IsLocked ?
                                        Rhino.ApplicationSettings.AppearanceSettings.LockedObjectColor :
                                        hlr ?
                                        Color.White :
                                        useMaterials ?
                                        Material.DefaultMaterial.DiffuseColor :
                                        rhinoObject.Attributes.DrawColor(ActiveDocument);

                        if (drawColor == Color.Black)
                        {
                            drawColor = Color.Gray;
                        }

                        if (displayStyle >= DB.DisplayStyle.HLR)
                        {
                            if (flatColors)
                            {
                                emissive = drawColor;
                            }
                            else
                            {
                                var material = rhinoObject.GetMaterial(true);
                                ambient  = Color.FromArgb(material.DiffuseColor.R / 2, material.DiffuseColor.G / 2, material.DiffuseColor.B / 2);
                                diffuse  = material.DiffuseColor;
                                emissive = material.EmissionColor;
                                if (material.Shine != 0.0)
                                {
                                    double s  = material.Shine / Material.MaxShine;
                                    double _s = 1.0 - s;
                                    specular = Color.FromArgb
                                               (
                                        material.SpecularColor.A,
                                        (int)(material.SpecularColor.R * s + material.DiffuseColor.R * _s),
                                        (int)(material.SpecularColor.G * s + material.DiffuseColor.G * _s),
                                        (int)(material.SpecularColor.B * s + material.DiffuseColor.B * _s)
                                               );
                                    glossiness = s;
                                }

                                transparency = material.Transparency;
                            }
                        }
                    }
                }
                else
                {
                    if (part.FaceCount == -1)
                    {
                        var previewColor = Color.Silver;
                        diffuse = previewColor;
                        ambient = Color.FromArgb(diffuse.R / 2, diffuse.G / 2, diffuse.B / 2);
                        if (useTextures)
                        {
                            glossiness = 0.5;
                            specular   = Color.White;
                        }
                    }
                }

                ei.SetAmbientColor(ambient.ToColor());
                ei.SetColor(color.ToColor());
                ei.SetDiffuseColor(diffuse.ToColor());
                ei.SetEmissiveColor(emissive.ToColor());
                ei.SetGlossiness(glossiness * 100.0);
                ei.SetSpecularColor(specular.ToColor());
                ei.SetTransparency(transparency);

                return(ei);
            }
Пример #5
0
            public virtual void Draw(DB.DisplayStyle displayStyle)
            {
                if (!Regen())
                {
                    return;
                }

                var vc = HasVertexColors(vertexFormatBits) && ShowsVertexColors(displayStyle);

                if (DB3D.DrawContext.IsTransparentPass() != vc)
                {
                    if (vertexCount > 0)
                    {
                        var ei = EffectInstance(displayStyle, true);

                        if (triangleCount > 0)
                        {
                            DB3D.DrawContext.FlushBuffer
                            (
                                vertexBuffer, vertexCount,
                                triangleBuffer, triangleCount * 3,
                                vertexFormat, ei,
                                DB3D.PrimitiveType.TriangleList,
                                0, triangleCount
                            );
                        }
                        else if (linesBuffer != null)
                        {
                            DB3D.DrawContext.FlushBuffer
                            (
                                vertexBuffer, vertexCount,
                                linesBuffer, vertexCount,
                                vertexFormat, ei,
                                DB3D.PrimitiveType.PointList,
                                0, vertexCount
                            );
                        }
                    }
                }

                if (!DB3D.DrawContext.IsTransparentPass())
                {
                    if (linesCount != 0)
                    {
                        if (triangleBuffer != null && !ShowsEdges(displayStyle))
                        {
                            return;
                        }

                        if (linesCount > 0)
                        {
                            DB3D.DrawContext.FlushBuffer
                            (
                                vertexBuffer, vertexCount,
                                linesBuffer, linesCount * 2,
                                vertexFormat, EffectInstance(displayStyle, false),
                                DB3D.PrimitiveType.LineList,
                                0, linesCount
                            );
                        }
                        else if (triangleCount == 0)
                        {
                            DB3D.DrawContext.FlushBuffer
                            (
                                vertexBuffer, vertexCount,
                                linesBuffer, vertexCount,
                                vertexFormat, EffectInstance(displayStyle, false),
                                DB3D.PrimitiveType.PointList,
                                0, vertexCount
                            );
                        }
                    }
                }
            }
Пример #6
0
 public abstract void RenderScene(DB.View dBView, DB.DisplayStyle displayStyle);