public void CutDeleteBaseTest2() { var document = TestUtils.DefaultsSetup(); var sketchCreator = new SketchCreator(document, false); var sketchNode = sketchCreator.BuildSketchNode(); document.Transact(); var circleBuilder = TestUtils.Circle(document, sketchNode, new Point3D(0, 0, 0), 10); TestUtils.Circle(document, sketchNode, new Point3D(20, 20, 0), 10); Assert.AreEqual(circleBuilder.LastExecute, true); sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document); var extrudeBuilder = new NodeBuilder(document, FunctionNames.Extrude); extrudeBuilder[0].Reference = sketchNode; extrudeBuilder[1].Integer = 0; extrudeBuilder[2].Real = 10; extrudeBuilder.ExecuteFunction(); Assert.AreEqual(extrudeBuilder.LastExecute, true); document.Commit("Extrude created"); document.Transact(); var volume = GeomUtils.GetSolidVolume(extrudeBuilder.Shape); Assert.AreEqual(volume, 2 * Math.PI * 1000); Assert.AreEqual(document.Root.Children.Count, 6); var sketchNode2 = sketchCreator.BuildSketchNode(); document.Commit("Second sketch created"); document.Transact(); TestUtils.Circle(document, sketchNode2, new Point3D(0, 0, 0), 5); sketchNode2.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode2, document); var cutBuilder = new NodeBuilder(document, FunctionNames.Cut); cutBuilder[0].Reference = sketchNode2; cutBuilder[2].Integer = (int)ExtrusionTypes.MidPlane; cutBuilder[1].Real = 10000; cutBuilder.ExecuteFunction(); Assert.AreEqual(cutBuilder.LastExecute, true); volume = GeomUtils.GetSolidVolume(cutBuilder.Shape); Assert.AreEqual(volume, 2 * Math.PI * 1000 - Math.PI * 250); Assert.AreEqual(document.Root.Children.Count, 10); var nodeToDelete = document.Root[2]; NodeBuilderUtils.DeleteNode(nodeToDelete, document); document.Commit("Deleted"); document.Transact(); NodeUtils.RebuildAllSketchFaces(document); extrudeBuilder.ExecuteFunction(); cutBuilder.ExecuteFunction(); document.Commit("Finished"); Assert.IsTrue(cutBuilder.LastExecute); volume = GeomUtils.GetSolidVolume(cutBuilder.Shape); Assert.AreEqual(8, document.Root.Children.Count, "Circle is not deleted"); Assert.AreEqual(volume, Math.PI * 1000); }
public void ExtrudeSketchTest() { var document = TestUtils.DefaultsSetup(); var sketchCreator = new SketchCreator(document, false); var sketchNode = sketchCreator.BuildSketchNode(); document.Transact(); var circleBuilder = TestUtils.Circle(document, sketchNode, new Point3D(0, 0, 0), 10); TestUtils.Circle(document, sketchNode, new Point3D(20, 20, 0), 10); Assert.AreEqual(circleBuilder.LastExecute, true); sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document); var extrudeBuilder = new NodeBuilder(document, FunctionNames.Extrude); extrudeBuilder[0].Reference = sketchNode; extrudeBuilder[1].Integer = 0; extrudeBuilder[2].Real = 10; extrudeBuilder.ExecuteFunction(); Assert.AreEqual(extrudeBuilder.LastExecute, true); document.Commit("Extrude created"); document.Transact(); var volume = GeomUtils.GetSolidVolume(extrudeBuilder.Shape); Assert.AreEqual(volume, 2 * Math.PI * 1000); Assert.AreEqual(document.Root.Children.Count, 6); }
public void TranslateExtrudedSketchTest() { var document = TestUtils.DefaultsSetup(); var sketchCreator = new SketchCreator(document, false); var sketchNode = sketchCreator.BuildSketchNode(); document.Transact(); TestUtils.BuildRectangle(document, sketchNode, new Point3D(1, 1, 0), new Point3D(10, 1, 0), new Point3D(10, 13, 0), new Point3D(1, 13, 0)); sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document); var extrudeBuilder = new NodeBuilder(document, FunctionNames.Extrude); extrudeBuilder[0].Reference = sketchNode; extrudeBuilder[1].Integer = 0; extrudeBuilder[2].Real = 10; extrudeBuilder.ExecuteFunction(); Assert.AreEqual(extrudeBuilder.LastExecute, true); document.Commit("Extrude created"); document.Transact(); var volume = GeomUtils.GetSolidVolume(extrudeBuilder.Shape); Assert.AreEqual(volume, 1080); Assert.AreEqual(document.Root.Children.Count, 10); var sketchNodeBuilder = new NodeBuilder(document, FunctionNames.Sketch); sketchNodeBuilder[0].Axis3D = new Axis(new Point3D(0, 0, 0), new Point3D(0, 0, 1)); sketchNodeBuilder[2].Reference = extrudeBuilder.Node; sketchNodeBuilder[3].Integer = 3; sketchNodeBuilder.ExecuteFunction(); Assert.AreEqual(sketchNodeBuilder.LastExecute, true); Assert.AreEqual(document.Root.Children.Count, 11); //var circleBuilder = TestUtils.Circle(document, sketchNodeBuilder.Node, new Point3D(2, 13, 8), 5); //circleBuilder.ExecuteFunction(); var pointBuilder = new NodeBuilder(document, FunctionNames.Point); pointBuilder[0].Reference = sketchNode; pointBuilder[1].TransformedPoint3D = new Point3D(2, 13, 8); pointBuilder.ExecuteFunction(); var circle = new NodeBuilder(document, FunctionNames.Circle); circle[0].Reference = pointBuilder.Node; circle[1].Real = 5; circle.ExecuteFunction(); Assert.AreEqual(document.Root.Children.Count, 13); document.Commit("Circle drawn"); document.Transact(); NodeUtils.Translate3DNode(extrudeBuilder, document, new Point3D(11, 1, 0));//, new Point3D(1,1,0)); document.Commit("Translated"); Assert.AreEqual(pointBuilder[1].TransformedPoint3D, new Point3D(12, 13, 8)); document.Transact(); NodeUtils.Translate3DNode(extrudeBuilder, document, new Point3D(11, 11, 0));//, new Point3D(1, 1, 0)); Assert.AreEqual(pointBuilder[1].TransformedPoint3D, new Point3D(12, 23, 8)); }
public static void RebuildDocumentFaces(Document document) { for (int i = 0; i < document.Root.Children.Count; i++) { var node = document.Root[i]; var nb = new NodeBuilder(node); if (nb.FunctionName != FunctionNames.Sketch) { continue; } node.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(node, document); } }
public int CutThroughAll(int sketchId) { if (!Document.Root.Children.ContainsKey(sketchId)) { return(-1); } var sketchNode = Document.Root[sketchId]; sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, Document); var node = TreeUtils.Cut(Document, sketchNode, 100, CutTypes.ThroughAll); NodeUtils.SetSketchTransparency(Document, sketchNode, ObjectVisibility.Hidden); sketchNode.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden; return(node.Index); }
public int Revolve(int shapeId, int lineId, double angle) { var sketchNode = Document.Root[shapeId]; if (sketchNode.Get <FunctionInterpreter>().Name == FunctionNames.Sketch) { sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, Document); } var builder = new NodeBuilder(Document, FunctionNames.Revolve); builder[0].Reference = sketchNode; builder[1].Reference = Document.Root[lineId]; builder[2].Real = angle; builder.ExecuteFunction(); return(builder.Node.Index); }
private int BuildExtrude(int sketchId, double height, ExtrusionTypes type) { if (!Document.Root.Children.ContainsKey(sketchId)) { return(-1); } var sketchNode = Document.Root[sketchId]; sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, Document); var extrudeBuilder = new NodeBuilder(Document, FunctionNames.Extrude); var sse = new SceneSelectedEntity(sketchNode); var nb = TreeUtils.Extrude(Document, sse, height, type); NodeUtils.SetSketchTransparency(Document, sketchNode, ObjectVisibility.Hidden); sketchNode.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden; return(nb.Node.Index); }
public static NodeBuilder ExtrudeToDepth(Document document, int sketchId, double extrusionHeight) { if (!document.Root.Children.ContainsKey(sketchId)) { return(null); } var sketchNode = document.Root[sketchId]; sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document); var extrudeBuilder = new NodeBuilder(document, FunctionNames.Extrude); extrudeBuilder[0].Reference = sketchNode; extrudeBuilder[1].Integer = 0; extrudeBuilder[2].Real = extrusionHeight; extrudeBuilder.ExecuteFunction(); NodeUtils.SetSketchTransparency(document, sketchNode, ObjectVisibility.Hidden); sketchNode.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden; return(extrudeBuilder); }
public static void RebuildAllSketchFaces(Document document) { int shapeIndex = 0; var nodesToRebuild = new List <Node>(); foreach (var node in document.Root.Children) { if (node.Value.Get <FunctionInterpreter>().Name == FunctionNames.Sketch) { if (SketchHas3DApplied(document, node.Value, out shapeIndex)) { nodesToRebuild.Add(node.Value); } } } foreach (var node in nodesToRebuild) { node.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(node, document); } }
private void PerformRotate(NodeBuilder nodeBuilder, double value) { if (!NodeUtils.NodeIsOnSketch(nodeBuilder)) { var existingFaces = NodeUtils.GetDocumentFaces(Document); var list = NodeBuilderUtils.GetAllContained3DNodesIndexes(nodeBuilder.Node).Distinct().ToList(); var sketchNodes = new List <Node>(); foreach (var nodeIndex in list) { var node = Document.Root[nodeIndex.Key]; var affectedSketchNode = NodeUtils.RotateNode(new NodeBuilder(node), Document, _axis, value); if (affectedSketchNode != null) { sketchNodes.Add(affectedSketchNode); } } foreach (var sketchNode in sketchNodes) { sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, Document); if (sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape != null) { if (nodeBuilder.Visibility == ObjectVisibility.Hidden) { nodeBuilder.Visibility = ObjectVisibility.ToBeDisplayed; } } } var newFaces = NodeUtils.GetDocumentFaces(Document); foreach (int face in newFaces.Except(existingFaces)) { Document.Root.Remove(face); } } else { NodeUtils.RotateSketchNode(nodeBuilder, _axis, value); } }
public static void AddArrayPatternNodes(Document document, int axis, int columnAxis, int shape, int rows, int columns, int rowDistance, int colDistance) { var indexColomns = 1; var node = document.Root[shape]; var axisNode = document.Root[axis]; var _axis = GeomUtils.ExtractAxis(new NodeBuilder(axisNode).Shape); var columnAxisNode = document.Root[columnAxis]; var _ColumnAxis = GeomUtils.ExtractAxis(new NodeBuilder(columnAxisNode).Shape); var reverseRows = 1; var reverseColumns = 1; for (var indexRows = 0; indexRows < rows; indexRows++) { for (; indexColomns < columns; indexColomns++) { var sourceCopyBuilder = new NodeBuilder(Document.CopyPaste(node)); sourceCopyBuilder.ShapeName = "Patterned" + sourceCopyBuilder.ShapeName.Substring(0, sourceCopyBuilder.ShapeName. Length - 1) + (indexRows * columns + indexColomns); sourceCopyBuilder.Node.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.ToBeDisplayed; var transformInterpreter = sourceCopyBuilder.Node.Get <TransformationInterpreter>(); transformInterpreter.ApplyGeneralArrayPattern(_axis, _ColumnAxis, indexRows * rowDistance * reverseRows, indexColomns * colDistance * reverseColumns); } indexColomns = 0; } var slectedNode = node; var sketchNode = AutoGroupLogic.FindSketchNode(slectedNode); NodeUtils.SetSketchTransparency(document, sketchNode, 0); var face = AutoGroupLogic.RebuildSketchFace(sketchNode, document); sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = face; sketchNode.Set <DrawingAttributesInterpreter>().Transparency = 1; sketchNode.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden; NodeUtils.SetSketchTransparency(document, sketchNode, 0); }
protected override bool ApplyFunction() { var builder = new NodeBuilder(Document, FunctionNames.Revolve); var sketchNode = AutoGroupLogic.FindSketchNode(FirstShape); Node node = FirstShape; if (sketchNode != null) { if (sketchNode.Children[2].Get <MeshTopoShapeInterpreter>() == null) { var tempFace = AutoGroupLogic.RebuildSketchFace(sketchNode, Document); if (tempFace != null) { sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = tempFace; NodeUtils.SetSketchTransparency(Document, sketchNode, ObjectVisibility.Hidden); sketchNode.Set <DrawingAttributesInterpreter>().Transparency = 1; sketchNode.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden; Document.Commit("Sketch face generated"); node = sketchNode; } } else { node = sketchNode; } } builder[0].Reference = node; builder[1].Reference = SecondShape; builder[2].Real = 360.0; if (builder.ExecuteFunction()) { AddNodeToTree(builder.Node); if (node == sketchNode) { NodeUtils.SetSketchTransparency(Document, sketchNode, ObjectVisibility.Hidden); } return(true); } return(false); }
public override bool Execute() { var nodes = NodeBuilderUtils.CopyPaste(Dependency[0].ReferenceBuilder.Node); var nb = new NodeBuilder(Dependency[1].ReferenceBuilder.Node); var sketchNodes = new List <Node>(); foreach (var point in nodes) { var transformation = point.Set <TransformationInterpreter>(); transformation.CurrTransform.SetMirror(nb.Dependency[1].TransformedPoint3D.GpPnt); var node = NodeBuilderUtils.FindSketchNode(point); if (node != null) { sketchNodes.Add(node); } var nb1 = new NodeBuilder(point); nb1.ExecuteFunction(); } if (sketchNodes.Count > 0) { var document = sketchNodes[0].Root.Get <DocumentContextInterpreter>().Document; foreach (var sketchNode in sketchNodes) { int shapeIndex = 0; if (NodeUtils.SketchHas3DApplied(document, sketchNode, out shapeIndex)) { sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document); } } } return(true); }
private void MakeCircularPattern(int number, double angle, double heigth, int reverse, bool previewMode) { var sketchNodes = new List <Node>(); for (var index = 1; index < number; index++) { var affectedPoints = NodeBuilderUtils.CopyPaste(_selectedNodes[0]); foreach (var child in affectedPoints) { var node = NodeBuilderUtils.FindSketchNode(child); var transformInterpreter = child.Get <TransformationInterpreter>(); transformInterpreter.ApplyGeneralCircularPattern(_axis, index * angle, index * heigth * reverse); if (node != null) { sketchNodes.Add(node); } var nb = new NodeBuilder(child); nb.ExecuteFunction(); } } if (sketchNodes.Count > 0) { var document = sketchNodes[0].Root.Get <DocumentContextInterpreter>().Document; int shapeIndex = 0; foreach (var sketchNode in sketchNodes) { if (NodeUtils.SketchHas3DApplied(document, sketchNode, out shapeIndex)) { sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document); } } } if (!previewMode) { CommitFinal("Apply Circular Pattern"); UpdateView(); RebuildTreeView(); } }
// Draw two parallel lines and delete one of the lines -> constraint should be deleted, as well public void CutThroughAllTest() { var document = TestUtils.DefaultsSetup(); var sh = new ShapeGraph(); sh.SetDocument(document); var sketchCreator = new SketchCreator(document, false); var sketchNode = sketchCreator.BuildSketchNode(); document.Transact(); var circleBuilder = TestUtils.Circle(document, sketchNode, new Point3D(0, 0, 0), 10); TestUtils.Circle(document, sketchNode, new Point3D(20, 20, 0), 10); Assert.AreEqual(circleBuilder.LastExecute, true); sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document); var extrudeBuilder = new NodeBuilder(document, FunctionNames.Extrude); extrudeBuilder[0].Reference = sketchNode; extrudeBuilder[1].Integer = 0; extrudeBuilder[2].Real = 10; extrudeBuilder.ExecuteFunction(); Assert.AreEqual(extrudeBuilder.LastExecute, true); document.Commit("Extrude created"); document.Transact(); var volume = GeomUtils.GetSolidVolume(extrudeBuilder.Shape); Assert.AreEqual(volume, 2 * Math.PI * 1000); Assert.AreEqual(document.Root.Children.Count, 6); var sketchNode2 = sketchCreator.BuildSketchNode(); document.Commit("Added second sketch"); document.Transact(); TestUtils.Circle(document, sketchNode2, new Point3D(0, 0, 0), 5); sketchNode2.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode2, document); document.Commit("Added circle node"); document.Transact(); var cutBuilder = new NodeBuilder(document, FunctionNames.Cut); cutBuilder[0].Reference = sketchNode2; cutBuilder[2].Integer = (int)ExtrusionTypes.MidPlane; cutBuilder[1].Real = 10000; cutBuilder.ExecuteFunction(); Assert.AreEqual(cutBuilder.LastExecute, true); volume = GeomUtils.GetSolidVolume(cutBuilder.Shape); Assert.AreEqual(volume, 2 * Math.PI * 1000 - Math.PI * 250); Assert.AreEqual(document.Root.Children.Count, 10); document.Commit("Added cut"); var expectedReferringTo = new SortedDictionary <int, List <int> > { { 1, new List <int> { 0 } }, { 2, new List <int> { 1 } }, { 3, new List <int> { 0 } }, { 4, new List <int> { 3 } }, { 5, new List <int> { 0 } }, { 7, new List <int> { 6 } }, { 8, new List <int> { 7 } }, { 9, new List <int> { 6, 5 } } }; foreach (var key in expectedReferringTo.Keys) { CollectionAssert.AreEquivalent(expectedReferringTo[key], sh.ReferringTo[key]); } var expectedReferrencedBy = new SortedDictionary <int, List <int> > { { 0, new List <int> { 1, 3, 5 } }, { 1, new List <int> { 2 } }, { 3, new List <int> { 4 } }, { 6, new List <int> { 7, 9 } }, { 7, new List <int> { 8 } } }; foreach (var key in expectedReferrencedBy.Keys) { CollectionAssert.AreEquivalent(expectedReferrencedBy[key], sh.ReferrencedBy[key]); } }
protected override void OnMouseUpAction(Mouse3DPosition mouseData) { base.OnMouseUpAction(mouseData); if (_extrudeStages == ExtrudeStages.SelectSketch) { var entities = Inputs[InputNames.SelectionContainerPipe].GetData(NotificationNames.GetEntities).Get <List <SceneSelectedEntity> >(); if (entities.Count <= 0) { return; } _sketchNode = AutoGroupLogic.FindSketchNode(entities[0].Node); if (_sketchNode == null) { return; } if (_sketchNode.Children[2].Get <MeshTopoShapeInterpreter>() == null) { // the sketch shape was not generated - this is the case when we open a file and perform extrude without any edits var tempFace = AutoGroupLogic.RebuildSketchFace(_sketchNode, Document); if (tempFace == null) { return; } _sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = tempFace; NodeUtils.SetSketchTransparency(Document, _sketchNode, ObjectVisibility.Hidden); _sketchNode.Set <DrawingAttributesInterpreter>().Transparency = 1; _sketchNode.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden; Document.Commit("Sketch face generated"); } var face = _sketchNode.Children[2].Get <MeshTopoShapeInterpreter>().Shape; _shapePlane = GeomUtils.ExtractPlane(face); PreviewExtrude(false, mouseData); ResetWorkingPlane(); Inputs[InputNames.SelectionContainerPipe].Send(NotificationNames.Disable); _extrudeStages = ExtrudeStages.ExtrudeAnimation; } else if (_extrudeStages == ExtrudeStages.ExtrudeAnimation) { var sketchBuilder = new NodeBuilder(_sketchNode); var extrudeHeight = sketchBuilder[0].Axis3D.Location.Distance(mouseData.Point); if (extrudeHeight < 1e-12) { return; } PreviewExtrude(false, mouseData); NodeUtils.SetSketchTransparency(Document, _sketchNode, ObjectVisibility.Hidden); CommitFinal("Extrudes build"); Inputs[InputNames.FacePickerPlane].Send(NotificationNames.Resume); //Inputs[InputNames.SelectionContainerPipe].Send(NotificationNames.SwitchSelectionMode, // TopAbsShapeEnum.TopAbs_SOLID); RebuildTreeView(); UpdateView(); BackToNeutralModifier(); } }
private void MakeArrayPattern(int rows, int columns, double rowDistance, double colomnsDistance, int reverseRows, int reverseColomns, bool previewMode) { var indexColomns = 1; Document document = null; var sketchNodes = new List <Node>(); for (var indexRows = 0; indexRows < rows; indexRows++) { for (; indexColomns < columns; indexColomns++) { var affectedPoints = NodeBuilderUtils.CopyPaste(_selectedNodes[0]); foreach (var child in affectedPoints) { var node = NodeBuilderUtils.FindSketchNode(child); var transformInterpreter = child.Set <TransformationInterpreter>(); transformInterpreter.ApplyGeneralArrayPattern(_axis, _ColumnAxis, indexRows * rowDistance * reverseRows, indexColomns * colomnsDistance * reverseColomns); if (node != null) { sketchNodes.Add(node); } var nb = new NodeBuilder(child); nb.ExecuteFunction(); } } indexColomns = 0; } if (sketchNodes.Count > 0) { document = sketchNodes[0].Root.Get <DocumentContextInterpreter>().Document; int shapeIndex = 0; foreach (var sketchNode in sketchNodes) { if (NodeUtils.SketchHas3DApplied(document, sketchNode, out shapeIndex)) { sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document); } } } if (!previewMode) { CommitFinal("Apply Array Pattern"); UpdateView(); RebuildTreeView(); } }