public static bool ShowsVertexColors(DB.DisplayStyle displayStyle) { return(displayStyle == DB.DisplayStyle.Shading || displayStyle == DB.DisplayStyle.ShadingWithEdges || displayStyle == DB.DisplayStyle.Realistic || displayStyle == DB.DisplayStyle.RealisticWithEdges); }
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); }
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); }
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 ); } } } }
public abstract void RenderScene(DB.View dBView, DB.DisplayStyle displayStyle);