private static bool GetBrushOutlineValues(Int32 brushNodeID, ref Vector3[] vertices, ref Int32[] visibleOuterLines, ref Int32[] visibleInnerLines, ref Int32[] invisibleOuteLines, ref Int32[] invisibleInnerLines, ref Int32[] invalidLines) { var brushInfo = CSGManager.GetBrushInfo(brushNodeID); if (brushInfo == null) { return(false); } var brushOutline = brushInfo.brushOutline; if (brushOutline == null || brushOutline.vertices == null || brushOutline.vertices.Length < 3) { return(false); } // TODO: once we switch to managed code, remove need to copy outlines vertices = brushOutline.vertices.ToArray(); visibleOuterLines = brushOutline.brushOutline.visibleOuterLines.ToArray(); visibleInnerLines = brushOutline.brushOutline.visibleInnerLines.ToArray(); invisibleOuteLines = brushOutline.brushOutline.invisibleOuterLines.ToArray(); invisibleInnerLines = brushOutline.brushOutline.invisibleInnerLines.ToArray(); invalidLines = brushOutline.brushOutline.invalidLines.ToArray(); return(true); }
private static bool GetSurfaceOutlineValues(Int32 brushNodeID, Int32 surfaceID, ref float3[] vertices, ref Int32[] visibleOuterLines, ref Int32[] visibleInnerLines, ref Int32[] visibleTriangles, ref Int32[] invisibleOuterLines, ref Int32[] invisibleInnerLines, ref Int32[] invalidLines) { var brushInfo = CSGManager.GetBrushInfo(brushNodeID); if (brushInfo == null) { return(false); } if (brushInfo.brushOutlineDirty) { ChiselWireframe.UpdateOutline(brushNodeID); brushInfo.brushOutlineDirty = false; } var brushOutline = brushInfo.brushOutline; if (brushOutline == null || brushOutline.vertices == null || brushOutline.vertices.Length < 3) { return(false); } var surfaceOutlines = brushOutline.surfaceOutlines; if (surfaceOutlines == null || surfaceID < 0 || surfaceID >= surfaceOutlines.Length) { return(false); } var surfaceOutline = surfaceOutlines[surfaceID]; // TODO: once we switch to managed code, remove need to copy outlines vertices = brushOutline.vertices.ToArray(); visibleOuterLines = surfaceOutline.visibleOuterLines.ToArray(); visibleInnerLines = surfaceOutline.visibleInnerLines.ToArray(); visibleTriangles = surfaceOutline.visibleTriangles.ToArray(); invisibleOuterLines = surfaceOutline.invisibleOuterLines.ToArray(); invisibleInnerLines = surfaceOutline.invisibleInnerLines.ToArray(); invalidLines = surfaceOutline.invalidLines.ToArray(); return(true); }
internal static void UpdateOutline(Int32 brushNodeID) { var brushInfo = CSGManager.GetBrushInfo(brushNodeID); var brushMeshInstanceID = CSGManager.GetBrushMeshID(brushNodeID); if (BrushMeshManager.IsBrushMeshIDValid(brushMeshInstanceID)) { var brushMesh = BrushMeshManager.GetBrushMesh(brushMeshInstanceID); brushInfo.brushOutline = CreateOutline(brushMesh); } else { if (brushInfo.brushOutline == null) { brushInfo.brushOutline = new BrushOutline(); } brushInfo.brushOutline.Reset(); } }
// TODO: generate outlines somewhere in managed code private static UInt64 GetBrushOutlineGeneration(Int32 brushNodeID) { var brushInfo = CSGManager.GetBrushInfo(brushNodeID); return(brushInfo.brushOutlineGeneration); }