Ejemplo n.º 1
0
        public static Node TryAutoGroup(Document document, Node addedNewShape)
        {
            var     sketchNode = FindSketchNode(addedNewShape);
            Point3D?firstPoint = null, lastPoint = null;

            GeomUtils.GetExtremasPoints(addedNewShape, ref firstPoint, ref lastPoint);
            if (firstPoint == null || lastPoint == null)
            {
                return(null);
            }
            firstPoint = new Point3D(firstPoint.Value.GpPnt.Transformed(sketchNode.Get <TransformationInterpreter>().CurrTransform));
            lastPoint  = new Point3D(lastPoint.Value.GpPnt.Transformed(sketchNode.Get <TransformationInterpreter>().CurrTransform));
            var connections = new AutoGroupConnectionGraph();

            connections.BuildConnectedLinks(document, addedNewShape.Index);
            var addedEntiy = new SceneSelectedEntity {
                Node = addedNewShape, ShapeType = TopAbsShapeEnum.TopAbs_WIRE
            };
            var groupCandidates = new List <SceneSelectedEntity> {
                addedEntiy
            };

            var interpreter = addedNewShape.Get <TransformationInterpreter>();

            if (interpreter == null)
            {
                return(null);
            }

            return(CandidateProcessing(document, groupCandidates,
                                       (Point3D)firstPoint,
                                       (Point3D)lastPoint,
                                       connections, sketchNode));
        }
Ejemplo n.º 2
0
        private void ProposeSelectedReferenceShape(TopoDSShape face, Mouse3DPosition mouseData)
        {
            SceneSelectedEntity selectedNode = null;

            if (face != null)
            {
                selectedNode = GeomUtils.IdentifyNode(Document.Root, face);
                if (selectedNode == null)
                {
                    return;
                }
            }
            else
            {
                var node = NodeBuilderUtils.IdentifySelectedObjectLabel(Document.Root);
                if (node != null)
                {
                    selectedNode = new SceneSelectedEntity(node);
                }
            }
            if (selectedNode == null)
            {
                return;
            }
            if (_axisBuilder.Node != null && selectedNode.Node.Index == _axisBuilder.Node.Index)
            {
                SetWorkingPlane();
                _dragging     = true;
                _startDragPos = mouseData.Point;
                return;
            }
            // The scene selected entity is hold as reference

            Propose(selectedNode);
        }
Ejemplo n.º 3
0
        private void Propose(SceneSelectedEntity selectedNode)
        {
            var nodeIndex = selectedNode.Node.Index;
            var subFace   = selectedNode.ShapeCount;

            ResizeShapesToExtrude(selectedNode, nodeIndex, subFace);
        }
Ejemplo n.º 4
0
        private void ResizeShapesToExtrude(SceneSelectedEntity selectedNode, int nodeIndex, int subFace)
        {
            SortedDictionary <int, IntIntPair> subCollection;
            Node extrudeNode;

            if (_extrudesList.TryGetValue(nodeIndex, out extrudeNode))
            {
                var extrudeBuilder      = new NodeBuilder(extrudeNode);
                var sourceFaceNodeIndex = extrudeBuilder[0].Reference.Index;
                _shapesToExtrude.Remove(sourceFaceNodeIndex);
                return;
            }
            if (!_shapesToExtrude.TryGetValue(nodeIndex, out subCollection))
            {
                subCollection = new SortedDictionary <int, IntIntPair>();
                _shapesToExtrude[nodeIndex] = subCollection;
            }
            if (subCollection.ContainsKey(subFace))
            {
                //subCollection.Remove(subFace);
                //if (subCollection.Count == 0)
                //    _shapesToExtrude.Remove(nodeIndex);
            }
            else
            {
                subCollection[subFace] = new IntIntPair(selectedNode);
            }
        }
Ejemplo n.º 5
0
        protected static List <SceneSelectedEntity> DetectFacesAtCoordinate(SceneSelectedEntity selectedEntity,
                                                                            Mouse3DPosition mousePosition)
        {
            var detectedFaces = new List <SceneSelectedEntity>();

            var faces      = GeomUtils.ExtractFaces(selectedEntity.TargetShape());
            var faceNumber = 1;

            foreach (var face in faces)
            {
                var plane = GeomUtils.ExtractPlane(face);
                if ((plane != null) && (plane.Distance(mousePosition.Point.GpPnt) <= Precision.Confusion))
                {
                    var detectedFace = new SceneSelectedEntity(selectedEntity.Node)
                    {
                        ShapeType  = TopAbsShapeEnum.TopAbs_FACE,
                        ShapeCount = faceNumber
                    };
                    detectedFaces.Add(detectedFace);
                }
                faceNumber++;
            }

            return(detectedFaces);
        }
        public SketchToolsView(InteractionContainer sceneSelectedEntity, ActionsGraph actionsGraph)
        {
            _actionsGraph        = actionsGraph;
            _sceneSelectedEntity = sceneSelectedEntity.Entities[0];

            InitializeComponent();
        }
Ejemplo n.º 7
0
        /// <summary>
        ///   Receives click events. Called at mouse down and at mouse up.
        /// </summary>
        /// <param name = "mouseData"></param>
        protected override void OnMouseClick3DAction(Mouse3DPosition mouseData)
        {
            if (Document == null)
            {
                return;
            }
            var entities =
                Inputs[InputNames.SelectionContainerPipe].GetData(NotificationNames.GetEntities).Get
                <List <SceneSelectedEntity> >();

            // At mouse down pick the selected edge
            if (!mouseData.MouseDown)
            {
                return;
            }
            // Store the mouse coordinate used to calculate the extrusion height
            Log.Info("Direction - shown");
            InitSession();

            var selectedNodes = entities;

            if (selectedNodes.Count != 1)
            {
                return;
            }

            _currentSelectedEntity = selectedNodes[0];

            // If click on the same shape reverse the face direction
            var reverseFace = false;

            if ((_previousSelectedEntity != null) && (_previousSelectedEntity.Node == _currentSelectedEntity.Node))
            {
                reverseFace = true;
            }
            _previousSelectedEntity = _currentSelectedEntity;

            // If no selected node
            if ((_currentSelectedEntity == null) || (_currentSelectedEntity.ShapeType != TopAbsShapeEnum.TopAbs_FACE))
            {
                return;
            }

            ExitFaceSelectionMode();

            var topoFace =
                GeomUtils.ExtractShapeType(_currentSelectedEntity.Node.Get <TopoDsShapeInterpreter>().Shape,
                                           _currentSelectedEntity.ShapeType,
                                           _currentSelectedEntity.ShapeCount);
            var face = TopoDS.Face(topoFace);

            if (reverseFace)
            {
                ReverseFaceDirection(face);
            }
            ShowFaceDirection(face);

            // Prepare for a new direction
            Reset();
        }
        public static void BuildMetaActionTestBoolIntersect(SetupUtils setup)
        {
            BuildTestSpheres(setup);

            setup.SwitchUserMetaAction(ModifierNames.BooleanIntersect);

            // Push two points on meta action and check that it works correctly

            var container  = ((MetaActionContainer)setup.ActionGraph.ModifierContainer[ModifierNames.BooleanIntersect]);
            var dependency = container.Dependency;


            var firstSphere  = new SceneSelectedEntity(setup.Document.Root.Children[1]);
            var secondSphere = new SceneSelectedEntity(setup.Document.Root.Children[2]);

            dependency.Steps[2].Integer        = 2;
            dependency.Steps[2].IsDefaultValue = true;

            dependency.ProposeCandidate(firstSphere);
            container.PushValue(firstSphere);

            dependency.ProposeCandidate(secondSphere);
            container.PushValue(secondSphere);

            setup.SwitchUserAction(ModifierNames.None);
        }
Ejemplo n.º 9
0
        public void BeamActionReference()
        {
            var actionsGraph     = Setup.ActionGraph;
            var modifierRegister = new ModifierRegister();

            modifierRegister.Register(actionsGraph);

            Setup.Document.Transact();
            BuildPoint(Setup.Document, _point1);
            BuildPoint(Setup.Document, _point2);
            Setup.Document.Commit("Draw initial shapes");

            Setup.SwitchUserAction(ModifierNames.None);

            Assert.AreEqual(2, Setup.Document.Root.Children.Count, "The first two shapes aren't drawn");

            Setup.SwitchUserAction(Constant.ActionBeam);
            var container  = ((MetaActionContainer)Setup.ActionGraph.ModifierContainer[Constant.ActionBeam]);
            var dependency = container.Dependency;

            var firstPoint  = new SceneSelectedEntity(Setup.Document.Root.Children[0]);
            var secondPoint = new SceneSelectedEntity(Setup.Document.Root.Children[1]);

            dependency.ProposeCandidate(firstPoint);
            container.PushValue(firstPoint);

            dependency.ProposeCandidate(secondPoint);
            container.PushValue(secondPoint);

            Setup.SwitchUserAction(ModifierNames.None);

            Assert.AreEqual(3, Setup.Document.Root.Children.Count);
        }
Ejemplo n.º 10
0
        public override void OnActivate()
        {
            base.OnActivate();
            var entities =
                Inputs[InputNames.SelectionContainerPipe].GetData(NotificationNames.GetEntities).Get
                <List <SceneSelectedEntity> >();
            var selectedNodes = entities;

            if (selectedNodes.Count == 0)
            {
                SelectEdgeBeforeStartActionMessage();
                BackToNeutralModifier();
                return;
            }
            foreach (var entity in selectedNodes)
            {
                if ((entity.ShapeType != TopAbsShapeEnum.TopAbs_WIRE) &&
                    (entity.ShapeType != TopAbsShapeEnum.TopAbs_EDGE))
                {
                    continue;
                }
                _selectedEdge = entity;
                break;
            }
            if (_selectedEdge == null)
            {
                SelectEdgeBeforeStartActionMessage();
            }
        }
Ejemplo n.º 11
0
        private static void AddFaceFilletVertex(TopoDSShape face, int filletChamferType, double radius,
                                                SceneSelectedEntity firstEntity, SceneSelectedEntity secondEntity,
                                                BRepFilletAPIMakeFillet2d fillet)
        {
            var firstWire          = GeomUtils.ExtractShapeType(face, firstEntity.ShapeType, firstEntity.ShapeCount);
            var secondWire         = GeomUtils.ExtractShapeType(face, secondEntity.ShapeType, secondEntity.ShapeCount);
            var listOfCommonVertex = GeomUtils.CommonVertexes(firstWire, secondWire);

            if (listOfCommonVertex.Count >= 1)
            {
                // If operation type is fillet
                if (filletChamferType == (int)FilletChamferTypes.SimpleFillet2D)
                {
                    foreach (var vertex in listOfCommonVertex)
                    {
                        fillet.AddFillet(vertex, radius);
                    }
                }
                else
                {
                    // If operation type is chamfer
                    fillet.AddChamfer(TopoDS.Edge(firstWire), listOfCommonVertex[0], radius,
                                      GeomUtils.DegreesToRadians(45));
                }
            }
            else
            {
                return;
            }

            return;
        }
Ejemplo n.º 12
0
 protected void DefineSse(List <string> lines, SceneSelectedEntity sceneSelectedEntity)
 {
     lines.Add("sse = SceneSelectedEntity()");
     lines.Add("sse.Node = " + _(sceneSelectedEntity.Node));
     lines.Add("sse.ShapeCount = " + sceneSelectedEntity.ShapeCount);
     lines.Add("sse.ShapeType = TopAbsShapeEnum." + sceneSelectedEntity.ShapeType);
 }
Ejemplo n.º 13
0
 private void HighlightShape(SceneSelectedEntity selectedShape)
 {
     if (selectedShape == null)
     {
         return;
     }
     ApplyAnimationSettings(selectedShape.Node);
 }
Ejemplo n.º 14
0
        private void Reset()
        {
            // Suspend the face picker
            Inputs[InputNames.FacePickerPlane].Send(NotificationNames.Suspend);
            EnterFaceSelectionMode();

            _currentSelectedEntity = null;
        }
Ejemplo n.º 15
0
 public override void OnDeactivate()
 {
     ActionsGraph[InputNames.SelectionContainerPipe].Send(NotificationNames.SwitchSelectionMode,
                                                          TopAbsShapeEnum.TopAbs_SOLID);
     Reset();
     _selectedNode = null;
     base.OnDeactivate();
 }
Ejemplo n.º 16
0
        public DimensionToolsView(InteractionContainer selectedEntity, ActionsGraph actionsGraph)
        {
            _actionsGraph = actionsGraph;
            var items = selectedEntity[TopAbsShapeEnum.TopAbs_FACE];

            _selectedEntity = items[0];
            InitializeComponent();
        }
Ejemplo n.º 17
0
        private NodeBuilder BuildExtrudeBuilder(SceneSelectedEntity node)
        {
            var extrudeBuilder = new NodeBuilder(Document, FunctionNames.Extrude);

            extrudeBuilder[0].ReferenceData = node;
            extrudeBuilder[2].Real          = _globalExtrudeSize;
            extrudeBuilder.ExecuteFunction();
            return(extrudeBuilder);
        }
Ejemplo n.º 18
0
 private SceneSelectedEntity ComputeMappedEntity(NodeBuilder buildNode, SceneSelectedEntity entity)
 {
     return(new SceneSelectedEntity
     {
         Node = GetMappedNode(buildNode, entity.Node),
         ShapeCount = entity.ShapeCount,
         ShapeType = entity.ShapeType
     });
 }
Ejemplo n.º 19
0
 public void StartDragging(SceneSelectedEntity handleNode)
 {
     IsDragging = true;
     if (SelectedEntity.ShapeType == TopAbsShapeEnum.TopAbs_FACE)
     {
         selectedShape    = SelectedEntity.TargetShape();
         prevFaceCount    = -1;
         initialDirection = GeomUtils.ExtractDirection(SelectedEntity.TargetShape());
         DraggingIndex    = 0;// _handles[FunctionNames.AxisHandle];
     }
 }
Ejemplo n.º 20
0
        protected override void OnNodeSelect(Node node)
        {
            if (_metaAction.Dependency.StepName != InterpreterNames.Reference)
            {
                return;
            }
            var data = new SceneSelectedEntity(node);

            _metaAction.Dependency.Propose(data);
            PushValue(data);
        }
Ejemplo n.º 21
0
        private void PrePushItems()
        {
            var prePusher = Inputs[InputNames.CommandLinePrePusher];
            var result    = (List <object>)prePusher.GetData(NotificationNames.GetValue).Data;

            if (result.Count > 0)
            {
                _selectedNode = (SceneSelectedEntity)(result[0]);
            }
            prePusher.Send(NotificationNames.Reset);
        }
Ejemplo n.º 22
0
        private void PrePushItems()
        {
            var prePusher = Inputs[InputNames.CommandLinePrePusher];
            var result    = (List <object>)prePusher.GetData(NotificationNames.GetValue).Data;

            if (result.Count == 0)
            {
                return;
            }
            _currentSelectedEntity = (SceneSelectedEntity)result[0];
            prePusher.Send(NotificationNames.Reset);
        }
Ejemplo n.º 23
0
        private void Reset()
        {
            // Suspend the face picker
            Inputs[InputNames.FacePickerPlane].Send(NotificationNames.Suspend);

            // Switch to edge selection mode
            Context.CloseAllContexts(true);
            Context.OpenLocalContext(true, true, false, false);
            Context.ActivateStandardMode(TopAbsShapeEnum.TopAbs_VERTEX);
            _sourceSelectedEntity      = null;
            _destinationSelectedEntity = null;
            _currentSelectedEntity     = null;
        }
Ejemplo n.º 24
0
        /// <summary>
        ///   Applies an Extrusion feature on a shape.
        /// </summary>
        /// <param name = "document">Document that holds data tree</param>
        /// <param name = "shape">Shape on which the extrusion is applied</param>
        /// <param name = "extrusionHeight">Extrusion height</param>
        /// <param name = "extrusionType">Extrusion type</param>
        public static NodeBuilder Extrude(Document document, SceneSelectedEntity shape, double extrusionHeight,
                                          ExtrusionTypes extrusionType)
        {
            var builder = new NodeBuilder(document, FunctionNames.Extrude, DisplayedShapeNames.Extrude);

            // Attach the shape on which the Extrusion is applied as the first child label
            builder[0].ReferenceData = shape;
            // Add the Extrusion Type as a third child label
            builder[1].Integer = (int)extrusionType;
            // Add the extrusion height as a second child label
            builder[2].Real = extrusionHeight;
            builder.ExecuteFunction();
            return(builder);
        }
Ejemplo n.º 25
0
        protected override void OnMouseUpAction(Mouse3DPosition mouseData)
        {
            base.OnMouseUpAction(mouseData);

            var entities = Inputs[InputNames.SelectionContainerPipe].GetData(NotificationNames.GetEntities).Get
                           <List <SceneSelectedEntity> >();

            if (entities.Count <= 0)
            {
                return;
            }
            _selectedNode = new SceneSelectedEntity(entities[0].Node);
            ApplyCut();
        }
Ejemplo n.º 26
0
 public override void OnActivate()
 {
     base.OnActivate();
     Inputs[InputNames.GeometricSolverPipe].Send(NotificationNames.DisableAll);
     BuildSelectionList();
     if (_selectedShapes.Count != 2)
     {
         NaroMessage.Show("You should select a point and an edge before using this tool!");
         BackToNeutralModifier();
         return;
     }
     _sourceSelectedEntity      = _selectedShapes[0];
     _destinationSelectedEntity = _selectedShapes[1];
     BuildConstraint();
 }
Ejemplo n.º 27
0
        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);
        }
Ejemplo n.º 28
0
        /// <summary>
        ///   Called when notified that the FacPicker detected a new face selected.
        /// </summary>
        protected override void FacePicked(TopoDSFace face)
        {
            base.FacePicked(face);
            if (face == null)
            {
                return;
            }

            _selectedNode = GeomUtils.IdentifyNode(Document.Root, face);
            //var selectedNodes = ActionsGraph[InputNames.SelectionContainerPipe].Get<List<SceneSelectedEntity>>();
            //if (selectedNodes.Count == 0)
            //{
            //    if(_stage == Stages.None)
            //        BackToNeutralModifier();
            //    return;
            //}
            //_selectedNode = selectedNodes[0];
        }
Ejemplo n.º 29
0
        public override void OnActivate()
        {
            base.OnActivate();
            var sketchBuilder = new SketchCreator(Document, false);
            var sketchNode    = sketchBuilder.CurrentSketch;

            if (sketchNode != null)
            {
                ActionsGraph.SwitchAction(ModifierNames.EndSketch, ModifierNames.Cut);
                return;
            }
            _selectedNode = null;
            PrePushItems();
            cutBuilder = new NodeBuilder(Document, FunctionNames.Cut);
            cutBuilder.ExecuteFunction();
            cutBuilder.Visibility = ObjectVisibility.Hidden;
            Inputs[InputNames.UiElementsItem].Send(NotificationNames.RefreshPropertyTab, cutBuilder.Node);
            if (_selectedNode == null)
            {
                var selectedShape = GeomUtils.GetCurrentSelectedShape(Context);
                if (selectedShape != null)
                {
                    _selectedNode = GeomUtils.IdentifyNode(Document.Root, selectedShape);
                    if (_selectedNode != null)
                    {
                        _currentSelectedNode  = _selectedNode.Node;
                        cutBuilder[2].Integer = (int)CutTypes.ThroughAll;
                        ApplyCut();
                    }
                }
                else
                {
                    // Experimental code, needs review
                    _currentSelectedNode = TreeView.GetSelectedNode();
                    if (_currentSelectedNode == null)
                    {
                        return;
                    }
                    _selectedNode = new SceneSelectedEntity(_currentSelectedNode);
                }
            }
            Inputs[InputNames.SelectionContainerPipe].Send(NotificationNames.SwitchSelectionMode,
                                                           TopAbsShapeEnum.TopAbs_SOLID);
        }
Ejemplo n.º 30
0
        public List <SceneSelectedEntity> GetEntitiesById(IEnumerable <int> edges)
        {
            var nodes = new List <SceneSelectedEntity>();

            foreach (var node in edges)
            {
                var subEdge = GetNodeById(node);
                //var func = subEdge.Get<FunctionInterpreter>();
                //if (func.Name != FunctionNames.SubShape) continue;
                var sceneSelectedEntity = new SceneSelectedEntity(subEdge)
                {
                    ShapeType  = TopAbsShapeEnum.TopAbs_EDGE,
                    ShapeCount = 1
                };
                nodes.Add(sceneSelectedEntity);
            }

            return(nodes);
        }