public override void OnButtonDownEvent(InputEvent evt)
        {
            TopoShape shape = GetSelectedShape((int)evt.GetMousePosition().X, (int)evt.GetMousePosition().Y);
            if(shape == null)
                return;

            Renderer renderer = GetRenderer();
            m_Step += 1;
            if (m_Step == (int)EditStep.ES_Finish)
            {
                m_Step = (int)EditStep.ES_Init;

                MeasureTools mt = new MeasureTools();
                MeasureResult rt = mt.ComputeMinDistance(m_Shape1, shape);

                LineNode lineNode = new LineNode();
                lineNode.SetShowText(true);
                lineNode.Set(rt.GetPointOnShape1(), rt.GetPointOnShape2());

                renderer.GetSceneManager().AddNode(lineNode);
                renderer.RequestDraw(1);
                return;
            }

            if (evt.IsLButtonDown())
            {
                
                m_Shape1 = shape;
            }
        }
Exemplo n.º 2
0
 public override bool OnBeiginComplexShape(TopoShape shape)
 {
     nodeStack.Push(nodeStack.Peek().Nodes.Add(String.Format("{0}", nShapeCount), "Shape"));
     ++nShapeCount;
     SceneNode node = renderView.ShowGeometry(shape, nShapeCount);
     node.SetFaceStyle(faceStyle);
     return false;
 }
Exemplo n.º 3
0
 public override void OnCompound(TopoShape shape)
 {
 }
Exemplo n.º 4
0
 public override void OnEdge(TopoShape shape)
 {
     ShapeGroup.Add(shape);
 }
Exemplo n.º 5
0
 public override bool OnBeiginComplexShape(TopoShape shape)
 {
     return true;
 }
Exemplo n.º 6
0
 public override void OnEdge(TopoShape shape)
 {
     ShowGeometry(shape);
 }
Exemplo n.º 7
0
 public override void OnWire(TopoShape shape)
 {
     ShapeGroup.Add(shape);
 }
Exemplo n.º 8
0
        private void sphereToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShape sphere = renderView.ShapeMaker.MakeSphere(new Vector3(0, 0, 0), 40);

            renderView.ShowGeometry(sphere, ++shapeId);
        }
Exemplo n.º 9
0
        private void BtnDown_Click(object sender, EventArgs e)
        {
            //Get selected shape
            SelectedShapeQuery context = new SelectedShapeQuery();

            renderViewDraw.QuerySelection(context);
            var face = context.GetGeometry();
            var line = context.GetSubGeometry();

            if (face == null || line == null)
            {
                return;
            }
            if (face.GetShapeType() != EnumTopoShapeType.Topo_FACE || line.GetShapeType() != EnumTopoShapeType.Topo_EDGE)
            {
                return;
            }

            //记录输入参数
            Bending bending = new Bending()
            {
                Direction = EnumDir.Edge_DOWN,
                Angle     = Convert.ToDouble(txtAngle.Text),
                Radius    = Convert.ToDouble(txtRadius.Text),
                Length    = Convert.ToDouble(txtLength.Text)
            };
            GeomCurve curve = new GeomCurve();

            curve.Initialize(line);
            Vector3 dirL = curve.DN(curve.FirstParameter(), 1);

            if (dirL.Y >= 0)
            {
                bending.Orientation = Math.Round(dirL.AngleBetween(Vector3.UNIT_X), 3);
            }
            else
            {
                bending.Orientation = Math.Round(360 - dirL.AngleBetween(Vector3.UNIT_X), 3);
            }
            //if (dirL.X == 1)
            //{
            //    bending.Orientation = EnumEdge.Edge_1;
            //}
            //else if (dirL.Y == 1)
            //{
            //    bending.Orientation = EnumEdge.Edge_2;
            //}
            //else if (dirL.X == -1)
            //{
            //    bending.Orientation = EnumEdge.Edge_3;
            //}
            //else
            //{
            //    bending.Orientation = EnumEdge.Edge_4;
            //}

            TopoShape sweep = BendDown(face, line, bending).Sweep;

            bendings.Add(bending);

            #region 渲染
            ElementId    faceId   = new ElementId(bending.Index + shapeId);
            ElementId    edgeId   = new ElementId(bending.Index);
            SceneManager sceneMgr = renderViewDraw.SceneManager;
            SceneNode    rootNode = GlobalInstance.TopoShapeConvert.ToSceneNode(sweep, 0.1f);
            SceneNode    faceNode = GlobalInstance.TopoShapeConvert.ToSceneNode(face, 0.1f);
            SceneNode    edgeNode = GlobalInstance.TopoShapeConvert.ToSceneNode(line, 0.1f);
            faceNode.SetId(faceId);
            faceNode.SetVisible(false);
            edgeNode.SetId(edgeId);
            edgeNode.SetVisible(false);
            if (rootNode != null)
            {
                sceneMgr.AddNode(rootNode);
                sceneMgr.AddNode(faceNode);
                sceneMgr.AddNode(edgeNode);
            }
            renderViewDraw.FitAll();
            renderViewDraw.RequestDraw(EnumRenderHint.RH_LoadScene);

            #endregion
        }
Exemplo n.º 10
0
        private void TransOnSelectBtn_Click(object sender, EventArgs e)
        {
            //Get selected shape
            SelectedShapeQuery context = new SelectedShapeQuery();

            renderView.QuerySelection(context);
            var shape = context.GetGeometry();
            var face  = context.GetSubGeometry();

            if (shape == null)
            {
                return;
            }
            var center = shape.GetBBox().GetCenter();

            #region 计算法向量
            GeomSurface surface = new GeomSurface();
            surface.Initialize(face);
            //参数域UV范围
            double uFirst = surface.FirstUParameter();
            double uLast  = surface.LastUParameter();
            double vFirst = surface.FirstVParameter();
            double vLast  = surface.LastVParameter();
            //取中点
            double umid = uFirst + (uLast - uFirst) * 0.5f;
            double vmid = vFirst + (vLast - vFirst) * 0.5f;
            //计算法向量
            var     data = surface.D1(umid, vmid);
            Vector3 dirU = data[1];
            Vector3 dirV = data[2];
            Vector3 dir  = dirV.CrossProduct(dirU);
            dir.Normalize();
            Console.WriteLine("\tDir {0}", dir);
            #endregion

            #region 坐标变换
            Vector3 dirN = new Vector3();
            if (face.GetOrientation() == EnumShapeOrientation.ShapeOrientation_REVERSED)
            {
                dirN = dir * -1;
            }
            else
            {
                dirN = dir;
            }

            //Translation
            shape = GlobalInstance.BrepTools.Translate(shape, -center);
            //Rotation
            Vector3 dirZ = new Vector3(0, 0, -1);
            shape = GlobalInstance.BrepTools.Rotation(shape, dirN.CrossProduct(dirZ), dirN.AngleBetween(dirZ));
            #endregion

            #region Render
            if (shape != null)
            {
                topoShape = shape;
                renderView.ClearScene();
                renderView.ShowGeometry(shape, shapeId);
            }
            renderView.FitAll();
            renderView.RequestDraw(EnumRenderHint.RH_LoadScene);

            #endregion
        }
Exemplo n.º 11
0
        private void TransOnMax(TopoShape shape)
        {
            double         areaM  = 0;
            Vector3        dirN   = new Vector3();
            Vector3        pos    = new Vector3();
            TopoExplor     topo   = new TopoExplor();
            TopoShapeGroup group2 = topo.ExplorFaces(shape);

            for (int i = 0; i < group2.Size(); i++)
            {
                TopoShape face = group2.GetTopoShape(i);

                #region 计算面积
                TopoShapeProperty property = new TopoShapeProperty();
                property.SetShape(face);
                Console.WriteLine("Face {0}:\n\tArea {1}\n\tOrientation {2}", i, property.SurfaceArea(), face.GetOrientation());
                #endregion
                #region 计算法向量
                GeomSurface surface = new GeomSurface();
                surface.Initialize(face);
                //参数域UV范围
                double uFirst = surface.FirstUParameter();
                double uLast  = surface.LastUParameter();
                double vFirst = surface.FirstVParameter();
                double vLast  = surface.LastVParameter();
                //取中点
                double umid = uFirst + (uLast - uFirst) * 0.5f;
                double vmid = vFirst + (vLast - vFirst) * 0.5f;
                //计算法向量
                var     data = surface.D1(umid, vmid);
                Vector3 dirU = data[1];
                Vector3 dirV = data[2];
                Vector3 dir  = dirV.CrossProduct(dirU);
                dir.Normalize();
                Console.WriteLine("\tDir {0}", dir);
                #endregion

                #region 取最大的面
                if (property.SurfaceArea() > areaM)
                {
                    areaM = property.SurfaceArea();
                    pos   = data[0];
                    Console.WriteLine(data[0]);
                    if (face.GetOrientation() == EnumShapeOrientation.ShapeOrientation_REVERSED)
                    {
                        dirN = dir * -1;
                    }
                    else
                    {
                        dirN = dir;
                    }
                }
                #endregion
            }

            #region 坐标变换
            //Translation
            shape = GlobalInstance.BrepTools.Translate(shape, -pos);
            //Rotation
            Vector3 dirZ = new Vector3(0, 0, -1);
            shape = GlobalInstance.BrepTools.Rotation(shape, dirN.CrossProduct(dirZ), dirN.AngleBetween(dirZ));
            #endregion

            if (shape != null)
            {
                topoShape = shape;
                renderView.ClearScene();
                renderView.ShowGeometry(shape, shapeId);
            }
            renderView.FitAll();
            renderView.RequestDraw(EnumRenderHint.RH_LoadScene);
        }
Exemplo n.º 12
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var dialog = new OpenFileDialog()
                {
                    Title            = "请选择一个stl文件",
                    CheckFileExists  = true,
                    CheckPathExists  = true,
                    Filter           = "STL (*.stl)|*.stl",
                    InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
                };

                if (dialog.ShowDialog() == true)
                {
                    convert.IsEnabled  = false;
                    convert.Background = Brushes.Gray;
                    convert.Content    = "正在转换";
                    fileName           = dialog.FileName;
                    stpFileName        = STPName.Text;
                    isSTPSelected      = convertToSTP.IsChecked.GetValueOrDefault();
                    isIGSSelected      = convertToIGES.IsChecked.GetValueOrDefault();
                    //string allText = File.ReadAllText(fileName);
                    FileStream   fs = new FileStream(fileName, FileMode.Open);
                    BinaryReader br = new BinaryReader(fs);
                    br.ReadBytes(80);
                    Int32 numberOfFace = br.ReadInt32();
                    var   info         = new FileInfo(fileName);
                    var   lengthOfFile = 50 * numberOfFace + 84;

                    if (info.Length != lengthOfFile)
                    {
                        br.Close();
                        fs.Close();
                        readACSIIFile(fileName);
                    }
                    else
                    {
                        property.Text = $"stl文件中的片体数量为:{numberOfFace.ToString()}";
                        Console.WriteLine("正在读取二进制文件");
                        readBinaryFile(br, numberOfFace);
                        fs.Close();
                    }

                    Task.Run(() =>
                    {
                        TopoShapeGroup group = new TopoShapeGroup();
                        foreach (var face in faceData)
                        {
                            var line1           = GlobalInstance.BrepTools.MakeLine(new Vector3(face.Point1.X, face.Point1.Y, face.Point1.Z), new Vector3(face.Point2.X, face.Point2.Y, face.Point2.Z));
                            var line2           = GlobalInstance.BrepTools.MakeLine(new Vector3(face.Point1.X, face.Point1.Y, face.Point1.Z), new Vector3(face.Point3.X, face.Point3.Y, face.Point3.Z));
                            var line3           = GlobalInstance.BrepTools.MakeLine(new Vector3(face.Point2.X, face.Point2.Y, face.Point2.Z), new Vector3(face.Point3.X, face.Point3.Y, face.Point3.Z));
                            TopoShapeGroup wire = new TopoShapeGroup();
                            wire.Add(line1);
                            wire.Add(line2);
                            wire.Add(line3);
                            TopoShape wireLine = GlobalInstance.BrepTools.MakeWire(wire);
                            var boundedFace    = GlobalInstance.BrepTools.MakeFace(wireLine);

                            group.Add(boundedFace);
                        }
                        var shell = GlobalInstance.BrepTools.MakeShell(group);
                        if (isSTPSelected)
                        {
                            GlobalInstance.BrepTools.SaveFile(shell, new AnyCAD.Platform.Path($"D:\\{stpFileName}.stp"));
                        }
                        else if (isIGSSelected)
                        {
                            GlobalInstance.BrepTools.SaveFile(shell, new AnyCAD.Platform.Path($"D:\\{stpFileName}.igs"));
                        }
                        faceData.Clear();
                        this.Dispatcher.BeginInvoke(new Action(() => {
                            convert.Content    = "转换完毕";
                            convert.Background = Brushes.Green;
                            convert.IsEnabled  = true;
                        }));

                        var timer      = new DispatcherTimer(DispatcherPriority.Normal);
                        timer.Interval = new TimeSpan(0, 0, 0, 1);
                        timer.Tick    += new EventHandler(restoreText);
                        timer.Start();
                    });
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
        }
Exemplo n.º 13
0
 public override void OnEdge(TopoShape shape)
 {
     Section.Add(shape);
 }
Exemplo n.º 14
0
 public override bool OnBeiginComplexShape(TopoShape shape)
 {
     return(true);
 }
Exemplo n.º 15
0
 public override void OnShell(TopoShape shape)
 {
 }
Exemplo n.º 16
0
 public override void OnEdge(TopoShape shape)
 {
     ShowGeometry(shape);
 }
Exemplo n.º 17
0
        private BendHelper BendDown(TopoShape face, TopoShape line, Bending bending)
        {
            #region 计算平面法向量
            GeomSurface surface = new GeomSurface();
            surface.Initialize(face);
            //参数域UV范围
            double uFirst = surface.FirstUParameter();
            double uLast  = surface.LastUParameter();
            double vFirst = surface.FirstVParameter();
            double vLast  = surface.LastVParameter();
            //取中点
            double umid = uFirst + (uLast - uFirst) * 0.5f;
            double vmid = vFirst + (vLast - vFirst) * 0.5f;
            //计算法向量
            var     data = surface.D1(umid, vmid);
            Vector3 dirU = data[1];
            Vector3 dirV = data[2];
            Vector3 dirF = dirV.CrossProduct(dirU);
            dirF.Normalize();
            #endregion

            #region 计算边线参数
            GeomCurve curve = new GeomCurve();
            curve.Initialize(line);
            Vector3 dirL = curve.DN(curve.FirstParameter(), 1);
            Vector3 stPt = curve.Value(curve.FirstParameter()); //起点
            Vector3 edPt = curve.Value(curve.LastParameter());  //终点
            #endregion

            #region 绘制草图
            TopoShapeGroup lineGroup = new TopoShapeGroup();

            Vector3   center  = stPt + dirF * bending.Radius; //圆心
            Vector3   radius  = stPt - center;                //半径
            double    theta   = bending.Angle * (Math.PI / 180.0);
            Vector3   radius2 = radius * Math.Cos(theta) + dirL.CrossProduct(radius) * Math.Sin(theta);
            Vector3   edArc   = center + radius2;                                            //圆弧终点
            TopoShape arc     = GlobalInstance.BrepTools.MakeArc(stPt, edArc, center, dirL); //绘制圆弧
            if (arc != null)
            {
                lineGroup.Add(arc);
            }
            Vector3 edLine = dirL.CrossProduct(radius2) * (bending.Length / bending.Radius) + edArc;
            arc = GlobalInstance.BrepTools.MakeLine(edArc, edLine);
            lineGroup.Add(arc);
            //扫描生成折弯
            TopoShape wireSketch = GlobalInstance.BrepTools.MakeWire(lineGroup);
            TopoShape sweep;
            if (wireSketch != null)
            {
                sweep = GlobalInstance.BrepTools.Sweep(wireSketch, line, true);
            }
            else
            {
                sweep = GlobalInstance.BrepTools.Sweep(arc, line, true);
            }
            TopoShape oFace = GlobalInstance.BrepTools.Sweep(arc, line, true).GetSubShape(0, 1);
            TopoShape oEdge = GlobalInstance.BrepTools.MakeLine(edLine, edLine + edPt - stPt);
            #endregion
            BendHelper bend = new BendHelper()
            {
                Sweep  = sweep,
                EdFace = oFace,
                EdLine = oEdge
            };
            return(bend);
        }
Exemplo n.º 18
0
        private void queryToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SelectedShapeQuery context = new SelectedShapeQuery();

            renderView.QuerySelection(context);

            TopoShape subShape = context.GetSubGeometry();
            SceneNode topoNode = context.GetSubNode();


            if (subShape != null)
            {
                Console.WriteLine(subShape.GetShapeType());
            }

            Matrix4 shapeTransform = topoNode.GetTransform();
            //surface
            GeomSurface surface = new GeomSurface();

            if (surface.Initialize(subShape))
            {
                List <Vector3> ptVecList  = new List <Vector3>();
                List <Vector3> norVecList = new List <Vector3>();
                Console.Write("surface");
                //double firstU = surface.FirstUParameter();
                //double lastU = surface.LastUParameter();
                //double firstV = surface.FirstVParameter();
                //double lastV = surface.LastVParameter();
                double firstU  = surface.FirstUParameter();
                double lastU   = surface.LastUParameter();
                double firstV  = surface.FirstVParameter();
                double lastV   = surface.LastVParameter();
                double offSetU = lastU - firstU;
                double offSetV = lastV - firstV;

                double stepU   = 0.10;
                double stepV   = 10;
                int    stepNoU = (int)(offSetU / stepU);
                int    stepNoV = (int)(offSetV / stepV);
                for (int v_i = 3; v_i < stepNoV - 5; v_i++)
                {
                    for (int u_i = 0; u_i < stepNoU; u_i++)
                    {
                        double tempV = firstV + stepV * v_i;
                        double tempU = firstU + stepU * (v_i % 2 == 0 ? u_i : stepNoU - u_i);
                        //double tempV = firstV + stepV * (u_i % 2 == 0 ? v_i : stepNoV - v_i);
                        Vector3 ptVec_1     = surface.Value(tempU, tempV);
                        Vector3 ptVec       = shapeTransform.Transform(ptVec_1);
                        Vector3 normalVec_1 = surface.GetNormal(tempU, tempV);
                        //Vector3 normalVec =shapeTransform.Transform(normalVec_1);//matrix3  3*3
                        Vector3 normalVec = RotateDirVector(shapeTransform, normalVec_1);
                        ptVecList.Add(ptVec);
                        norVecList.Add(normalVec);
                        pathPqList.Add(QuaternionFromTo(new Vector3(-1, 0, 0), normalVec, ptVec));
                        ShowStatusMessage("path pts No: " + pathPqList.Count);

                        //LineNode tempLineNode = new LineNode();
                        //LineStyle lineStyle = new LineStyle();
                        //lineStyle.SetPatternStyle((int)EnumLinePattern.LP_DashedLine);
                        //lineStyle.SetColor(100, 0, 100);
                        //tempLineNode.SetLineStyle(lineStyle);
                        //tempLineNode.Set(ptVec, ptVec + normalVec);
                        //tempLineNode.SetVisible(true);
                        //renderView.SceneManager.AddNode(tempLineNode);
                        //renderView.RequestDraw();
                    }
                }

                //for (int u_i = 0; u_i < stepNoU; u_i++)
                //{
                //    for (int v_i = 0; v_i < stepNoV-0; v_i++)
                //    {

                //        double tempU = firstU + stepU * u_i;
                //        double tempV = firstV + stepV * (u_i % 2 == 0 ? v_i : stepNoV - v_i);

                //        Vector3 ptVec =shapeTransform.Transform(surface.Value(tempU,tempV ));
                //        Vector3 normalVec = surface.GetNormal(tempU,tempV);
                //        ptVecList.Add(ptVec);
                //        norVecList.Add(normalVec);
                //        pathPqList.Add(QuaternionFromTo(new Vector3(-1, 0, 0), normalVec, ptVec));
                //    }
                //}
                int a = 0;
            }
            //curve
            GeomCurve curve = new GeomCurve();

            if (curve.Initialize(subShape))
            {
                Vector3 startPt = shapeTransform.Transform(curve.D0(curve.FirstParameter()));
                //Vector3 startPt_ = shapeTransform.Transform(startPt);
                Vector3 pt1   = curve.GetStartPoint();
                Vector3 endPt = shapeTransform.Transform(curve.D0(curve.LastParameter()));
                Vector3 pt2   = curve.GetEndPoint();
                switch ((EnumCurveType)curve.GetCurveType())
                {
                case EnumCurveType.CurveType_OtherCurve:
                    Console.Write("other");
                    break;

                case EnumCurveType.CurveType_BSplineCurve:
                    break;

                case EnumCurveType.CurveType_BezierCurve:
                    break;

                case EnumCurveType.CurveType_Parabola:
                    break;

                case EnumCurveType.CurveType_Hyperbola:
                    break;

                case EnumCurveType.CurveType_Ellipse:
                    break;

                case EnumCurveType.CurveType_Circle:
                    Console.Write("Circle");
                    break;

                case EnumCurveType.CurveType_Line:
                    Console.Write("Line");

                    //path
                    double[] startPt_ = new double[3] {
                        startPt.X, startPt.Y, startPt.Z
                    };
                    double[] endPt_ = new double[3] {
                        endPt.X, endPt.Y, endPt.Z
                    };
                    Path_U.Interpolation(startPt_, endPt_, 0.01, ref pathPtList);
                    //show pick result
                    LineNode  tempLineNode = new LineNode();
                    LineStyle lineStyle    = new LineStyle();
                    lineStyle.SetPatternStyle((int)EnumLinePattern.LP_DashedLine);
                    lineStyle.SetColor(100, 0, 100);
                    tempLineNode.SetLineStyle(lineStyle);
                    tempLineNode.Set(new Vector3(startPt.X + 0.1, startPt.Y + 10, startPt.Z + 0.1), endPt);
                    tempLineNode.SetVisible(true);
                    renderView.SceneManager.AddNode(tempLineNode);
                    renderView.RequestDraw();
                    break;

                default:
                    break;
                }



                ElementId id = context.GetNodeId();
                MessageBox.Show(id.AsInt().ToString());
                //...
            }
        }
Exemplo n.º 19
0
        private void DrawBendingGroup(BendingGroup bends)
        {
            renderViewDraw.ClearScene();

            #region 绘制底面
            //var pt0 = new Vector3(0, 0, 0);
            //var pt1 = new Vector3(bends.Length, 0, 0);
            //var pt2 = new Vector3(bends.Length, bends.Width, 0);
            //var pt3 = new Vector3(0, bends.Width, 0);
            //TopoShape baseEdge1 = GlobalInstance.BrepTools.MakeLine(pt0, pt1);
            //TopoShape baseEdge2 = GlobalInstance.BrepTools.MakeLine(pt1, pt2);
            //TopoShape baseEdge3 = GlobalInstance.BrepTools.MakeLine(pt2, pt3);
            //TopoShape baseEdge4 = GlobalInstance.BrepTools.MakeLine(pt3, pt0);
            //TopoShape rect = GlobalInstance.BrepTools.MakeRectangle(bends.Length, bends.Width, 0, Coordinate3.UNIT_XYZ);
            //TopoShape baseShape = GlobalInstance.BrepTools.MakeFace(rect);
            TopoShape baseShape = GlobalInstance.BrepTools.FillFace(bends.Vertexes);

            SceneManager sceneMgr = renderViewDraw.SceneManager;
            SceneNode    root     = GlobalInstance.TopoShapeConvert.ToSceneNode(baseShape, 0.1f);
            sceneMgr.AddNode(root);
            #endregion

            #region  逆时针方向依次折弯
            //var oris = bends.Bendings.OrderBy(m => m.Orientation).Select(m => m.Orientation).Distinct();
            Queue <Vector3> vertexQueue = new Queue <Vector3>(bends.Vertexes);
            for (int i = 0; i < vertexQueue.Count(); i++)
            {
                var sPt = vertexQueue.Dequeue();
                var ePt = vertexQueue.Peek();
                vertexQueue.Enqueue(sPt);
                var line      = GlobalInstance.BrepTools.MakeLine(sPt, ePt);
                var face      = baseShape;
                var groupEdge = from m in bends.Bendings
                                where m.Orientation == Math.Round(((ePt - sPt).Y >= 0 ? (ePt - sPt).AngleBetween(Vector3.UNIT_X) : (360 - (ePt - sPt).AngleBetween(Vector3.UNIT_X))), 3)
                                orderby m.Index
                                select m;
                foreach (var bending in groupEdge)
                {
                    if (face == null || line == null)
                    {
                        return;
                    }
                    if (face.GetShapeType() != EnumTopoShapeType.Topo_FACE || line.GetShapeType() != EnumTopoShapeType.Topo_EDGE)
                    {
                        break;
                    }
                    BendHelper helper = new BendHelper();
                    if (bending.Direction.Equals(EnumDir.Edge_UP))
                    {
                        helper = BendUp(face, line, bending);
                    }
                    else
                    {
                        helper = BendDown(face, line, bending);
                    }
                    ElementId id   = new ElementId(bending.Index);
                    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
                    node.SetId(id);
                    sceneMgr.AddNode(node);
                    face = helper.EdFace;
                    line = helper.EdLine;
                }
            }
            #endregion
            #region  四个方向分别折弯
            //var groupEdge1 = from m in bends.Bendings
            //                 where m.Orientation == 0
            //                 orderby m.Index
            //                 select m ;
            //var groupEdge2 = from m in bends.Bendings
            //                 where m.Orientation == 1
            //                 orderby m.Index
            //                 select m;
            //var groupEdge3 = from m in bends.Bendings
            //                 where m.Orientation == 2
            //                 orderby m.Index
            //                 select m;
            //var groupEdge4 = from m in bends.Bendings
            //                 where m.Orientation == 3
            //                 orderby m.Index
            //                 select m;

            ////TopoShape line = baseEdge1;
            ////TopoShape face = baseShape;
            //foreach (var bending in groupEdge1)
            //{
            //    if (face == null || line == null)
            //    {
            //        return;
            //    }
            //    if (face.GetShapeType() != EnumTopoShapeType.Topo_FACE || line.GetShapeType() != EnumTopoShapeType.Topo_EDGE)
            //    {
            //        break;
            //    }
            //    BendHelper helper = new BendHelper();
            //    if (bending.Direction.Equals(EnumDir.Edge_UP))
            //    {
            //        helper = BendUp(face, line, bending);
            //    }
            //    else
            //    {
            //        helper = BendDown(face, line, bending);
            //    }
            //    ElementId id = new ElementId(bending.Index);
            //    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
            //    node.SetId(id);
            //    sceneMgr.AddNode(node);
            //    face = helper.EdFace;
            //    line = helper.EdLine;
            //}
            //face = baseShape;
            //line = baseEdge2;
            //foreach (var bending in groupEdge2)
            //{
            //    if (face == null)
            //    {
            //        break;
            //    }
            //    BendHelper helper = new BendHelper();
            //    if (bending.Direction.Equals(EnumDir.Edge_UP))
            //    {
            //        helper = BendUp(face, line, bending);
            //    }
            //    else
            //    {
            //        helper = BendDown(face, line, bending);
            //    }

            //    ElementId id = new ElementId(bending.Index);
            //    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
            //    node.SetId(id);
            //    sceneMgr.AddNode(node);
            //    face = helper.EdFace;
            //    line = helper.EdLine;
            //}
            //face = baseShape;
            //line = baseEdge3;
            //foreach (var bending in groupEdge3)
            //{
            //    if (face == null)
            //    {
            //        break;
            //    }
            //    BendHelper helper = new BendHelper();
            //    if (bending.Direction.Equals(EnumDir.Edge_UP))
            //    {
            //        helper = BendUp(face, line, bending);
            //    }
            //    else
            //    {
            //        helper = BendDown(face, line, bending);
            //    }

            //    ElementId id = new ElementId(bending.Index);
            //    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
            //    node.SetId(id);
            //    sceneMgr.AddNode(node);
            //    face = helper.EdFace;
            //    line = helper.EdLine;
            //}
            //face = baseShape;
            //line = baseEdge4;
            //foreach (var bending in groupEdge4)
            //{
            //    if (face == null)
            //    {
            //        break;
            //    }
            //    BendHelper helper = new BendHelper();
            //    if (bending.Direction.Equals(EnumDir.Edge_UP))
            //    {
            //        helper = BendUp(face, line, bending);
            //    }
            //    else
            //    {
            //        helper = BendDown(face, line, bending);
            //    }

            //    ElementId id = new ElementId(bending.Index);
            //    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
            //    node.SetId(id);
            //    sceneMgr.AddNode(node);
            //    face = helper.EdFace;
            //    line = helper.EdLine;
            //}
            #endregion

            renderViewDraw.FitAll();
            renderViewDraw.RequestDraw(EnumRenderHint.RH_LoadScene);
        }
Exemplo n.º 20
0
       public override void OnShell(TopoShape shape)
       {
 
       }
        public override bool Run(FeatureContext context)
        {
            TopoShape circle = GlobalInstance.BrepTools.MakeCircle(Vector3.ZERO, 100, Vector3.UNIT_Z);
            TopoShape face   = GlobalInstance.BrepTools.MakeFace(circle);

            FaceTriangulation ft = new FaceTriangulation();

            ft.SetTolerance(5);
            ft.Perform(face);
            float[] points     = ft.GetVertexBuffer();
            int     pointCount = points.Length / 3;

            uint[] indexBuffer = ft.GetIndexBuffer();
            int    faceCount   = indexBuffer.Length / 3;

            float[] normals = ft.GetNormalBuffer();


            float[] colorBuffer = new float[pointCount * 4];

            Random num = new Random();

            for (int ii = 0; ii < pointCount; ++ii)
            {
                int idx = ii * 4;
                colorBuffer[idx]     = num.Next(0, 256) / 256.0f;
                colorBuffer[idx + 1] = num.Next(0, 256) / 256.0f;
                colorBuffer[idx + 2] = num.Next(0, 256) / 256.0f;
                colorBuffer[idx + 3] = 1;
            }

            RenderableEntity entity = GlobalInstance.TopoShapeConvert.CreateColoredFaceEntity(points, indexBuffer, normals, colorBuffer, face.GetBBox());

            EntitySceneNode node = new EntitySceneNode();

            node.SetEntity(entity);

            context.ShowSceneNode(node);

            //////////////////////////////////////////////////////////////////////////
            // Code to get the mesh

            /*
             * for (int ii = 0; ii < faceCount; ++ii)
             * {
             *  int p0 = (int)indexBuffer[ii * 3];
             *  int p1 = (int)indexBuffer[ii * 3 + 1];
             *  int p2 = (int)indexBuffer[ii * 3 + 2];
             *
             *  Vector3 pt0 = new Vector3(points[p0 * 3], points[p0 * 3 + 1], points[p0 * 3 + 2]);
             *  Vector3 pt1 = new Vector3(points[p1 * 3], points[p1 * 3 + 1], points[p1 * 3 + 2]);
             *  Vector3 pt2 = new Vector3(points[p2 * 3], points[p2 * 3 + 1], points[p2 * 3 + 2]);
             *
             *  // ....
             *  // use the same way to get the normal data for each point.
             * }
             * */


            return(true);
        }
Exemplo n.º 22
0
 public override bool OnBeiginComplexShape(TopoShape shape)
 {
     nodeStack.Push(nodeStack.Peek().Nodes.Add(String.Format("{0}", nShapeCount), "Shape"));
     return(true);
 }
Exemplo n.º 23
0
 public override void OnFace(TopoShape shape)
 {
     ++nShapeCount;
     nodeStack.Peek().Nodes.Add(String.Format("{0}", nShapeCount), "Face");
     SceneNode node = renderView.ShowGeometry(shape, nShapeCount);
     node.SetFaceStyle(faceStyle);
 }
Exemplo n.º 24
0
        public override void OnFace(TopoShape shape)
        {
 
        }
 public SceneNode ShowGeometry(TopoShape shape)
 {
     ++CurrentId;
     return(RenderView.ShowGeometry(shape, CurrentId));
 }
Exemplo n.º 26
0
        public override void OnPoint(TopoShape shape)
        {

        }
 public SceneNode ShowGeometry(TopoShape shape, ElementId id)
 {
     CurrentId = id;
     return(RenderView.ShowGeometry(shape, id));
 }
Exemplo n.º 28
0
 private void ShowGeometry(TopoShape topoShape)
 {
     AnyCAD.Platform.SceneNode faceNode = AnyCAD.Platform.GlobalInstance.TopoShapeConvert.ToEntityNode(topoShape, 0.5f);
     faceNode.SetId(++nShapeCount);
     sceneManager.AddNode(faceNode);
 }
Exemplo n.º 29
0
        /// <summary>
        /// 加载AGV调度系统地图
        /// </summary>
        public bool LoadAGVDispatchMap()
        {
            try
            {
                //将所有的地标抽离为3D物体
                IList <LandMarkShap> LandShaps = AGVDAccess.AGVSimulationDAccess.LoadLandShaps();
                if (LandShaps != null && LandShaps.Count > 0)
                {
                    foreach (LandMarkShap landShap in LandShaps)
                    {
                        float     X             = (float)Math.Round(landShap.LandX, 1) * 40f + (0.05f * 40f);
                        float     Y             = (float)Math.Round(landShap.LandY, 1) * 40f - (0.1f * 40f);
                        TopoShape LandShap      = shapeMaker.MakeCylinder(new Vector3(X, Y, 0f), new Vector3(0, 0, 1), 0.1f * 40f, GroudHeight + 0.3, 360);
                        FaceStyle LandShapStyle = new FaceStyle();
                        LandShapStyle.SetColor(new ColorValue(0f, 0f, 0f, 1));
                        SceneNode sceneNodeLandShap = ShowTopoShape(LandShap);
                        sceneNodeLandShap.SetFaceStyle(LandShapStyle);
                    }
                }
                //将所有路径
                IList <AllSegment> AllSegments = AGVDAccess.AGVClientDAccess.LoadAllSegment();
                if (AllSegments != null && AllSegments.Count > 0)
                {
                    foreach (AllSegment Segment in AllSegments)
                    {
                        LandMarkShap BeinLand = LandShaps.FirstOrDefault(p => p.LandmarkCode == Segment.BeginLandMakCode);
                        LandMarkShap EndLand  = LandShaps.FirstOrDefault(p => p.LandmarkCode == Segment.EndLandMarkCode);
                        if (BeinLand != null && EndLand != null)
                        {
                            float BeginX = (float)Math.Round(BeinLand.LandX, 1) * 40f + (0.05f * 40f);
                            float BeginY = (float)Math.Round(BeinLand.LandY, 1) * 40f - (0.1f * 40f);
                            float EndX   = (float)Math.Round(EndLand.LandX, 1) * 40f + (0.05f * 40f);
                            float EndY   = (float)Math.Round(EndLand.LandY, 1) * 40f - (0.1f * 40f);
                            if (Segment.SegmentType == 0)//直线
                            {
                                TopoShape RouteShap  = shapeMaker.MakeRoad(new Vector3(BeginX, BeginY, 0), new Vector3(EndX, EndY, 0), 2, GroudHeight + 0.2, 0.2, false);
                                FaceStyle RouteStyle = new FaceStyle();
                                RouteStyle.SetColor(new ColorValue(2.05f, 1.73f, 0f, 1));
                                SceneNode sceneNodeRouteShap = ShowTopoShape(RouteShap);
                                sceneNodeRouteShap.SetFaceStyle(RouteStyle);
                            }
                            else if (Segment.SegmentType == 1)//圆弧线
                            {
                                try
                                {
                                    PointF p1 = new PointF(BeginX, BeginY);
                                    PointF p2 = new PointF(EndX, EndY);
                                    PointF p3 = new PointF((float)(Segment.Point3X * 40f), (float)(Segment.Point3Y * 40));
                                    PointF p4 = new PointF((float)(Segment.Point4X * 40f), (float)(Segment.Point4Y * 40));

                                    PointF[] pointList = new PointF[] { p1, p4, p3, p2 };
                                    PointF[] list      = draw_bezier_curves(pointList, pointList.Length, 0.001f * 40);
                                    PointF[] unitlist  = list.Where(p => p.X != p3.X && p.Y != p3.Y && p.X != p4.X && p.Y != p4.Y).ToArray();
                                    for (int i = 1; i < list.Length; i++)
                                    {
                                        TopoShape RouteShap  = shapeMaker.MakeRoad(new Vector3(unitlist[i - 1].X, unitlist[i - 1].Y, 0), new Vector3(unitlist[i].X, unitlist[i].Y, 0), 2, GroudHeight + 0.2, 0.2, false);
                                        FaceStyle RouteStyle = new FaceStyle();
                                        RouteStyle.SetColor(new ColorValue(2.05f, 1.73f, 0f, 1));
                                        SceneNode sceneArc = ShowTopoShape(RouteShap);
                                        sceneArc.SetFaceStyle(RouteStyle);
                                    }
                                }
                                catch (Exception ex)
                                { }
                            }
                        }
                    }
                }
                return(true);
            }
            catch (Exception ex)
            { throw ex; }
        }
Exemplo n.º 30
0
 public override void OnSolid(TopoShape shape)
 {
 }
Exemplo n.º 31
0
        private void CreatCarModeByCarInfos()
        {
            try
            {
                //PointF CarP1 = new PointF();


                //float BeginX = (float)Math.Round(BeinLand.LandX, 1) * 40f + (0.05f * 40f);
                //float BeginY = (float)Math.Round(BeinLand.LandY, 1) * 40f - (0.1f * 40f);
                //float EndX = (float)Math.Round(EndLand.LandX, 1) * 40f + (0.05f * 40f);
                //float EndY = (float)Math.Round(EndLand.LandY, 1) * 40f - (0.1f * 40f);
                //if (Segment.SegmentType == 0)//直线
                //{
                //    TopoShape RouteShap = shapeMaker.MakeRoad(new Vector3(BeginX, BeginY, 0), new Vector3(EndX, EndY, 0), 2, GroudHeight + 0.2, 0.2, false);
                //    FaceStyle RouteStyle = new FaceStyle();
                //    RouteStyle.SetColor(new ColorValue(2.05f, 1.73f, 0f, 1));
                //    SceneNode sceneNodeRouteShap = ShowTopoShape(RouteShap);
                //    sceneNodeRouteShap.SetFaceStyle(RouteStyle);
                //}



                //IList<CarInfo> CarShaps = AGVDAccess.AGVSimulationDAccess.LoadCarShap();
                //if (CarShaps != null && CarShaps.Count > 0)
                //{
                //    foreach (CarInfo car in CarShaps)
                //    {
                //    }
                //}



                //testCarShap
                double    CarLenth       = 25;
                double    CarWidth       = 10;
                double    CarHeight      = 4;
                PointF    CarPoint       = new PointF(80, -300);
                TopoShape FrmackBoxShap  = shapeMaker.MakeBox(new Vector3(CarPoint.X, CarPoint.Y, 0), new Vector3(CarPoint.X + (float)CarLenth, CarPoint.Y, 0), CarWidth, CarHeight);
                FaceStyle FrmackBoxStyle = new FaceStyle();
                FrmackBoxStyle.SetColor(new ColorValue(0.3f, 1.44f, 2.55f, 1));
                SceneNode sceneFrmackBox = ShowTopoShape(FrmackBoxShap);
                sceneFrmackBox.SetFaceStyle(FrmackBoxStyle);


                TopoShape TrayBoxShap  = shapeMaker.MakeBox(new Vector3(CarPoint.X + 1, CarPoint.Y, (float)CarHeight - 1), new Vector3(CarPoint.X + (float)CarLenth - 1, CarPoint.Y, (float)CarHeight - 1), CarWidth - 0.5, 1.2);
                FaceStyle TrayBoxStyle = new FaceStyle();
                TrayBoxStyle.SetColor(new ColorValue(1.05f, 1.05f, 1.05f, 1));
                SceneNode sceneTrayBox = ShowTopoShape(TrayBoxShap);
                sceneTrayBox.SetFaceStyle(TrayBoxStyle);

                TopoShape wheelShap1 = shapeMaker.MakeCone(new Vector3(CarPoint.X + (float)CarLenth / 4f, CarPoint.Y - (float)CarWidth / 2f - 0.1f, (float)CarHeight / 3), new Vector3(0, 1, 0), (float)CarHeight / 4 * 2, 0.5, 0, 360);
                FaceStyle wheelStyle = new FaceStyle();
                wheelStyle.SetColor(new ColorValue(0f, 0f, 0f, 1));
                SceneNode scenewheel = ShowTopoShape(wheelShap1);
                scenewheel.SetFaceStyle(wheelStyle);


                TopoShape wheelShap2  = shapeMaker.MakeCone(new Vector3(CarPoint.X + (float)CarLenth / 4f * 3, CarPoint.Y - (float)CarWidth / 2f - 0.1f, (float)CarHeight / 3), new Vector3(0, 1, 0), (float)CarHeight / 4 * 2, 0.5, 0, 360);
                FaceStyle wheelStyle2 = new FaceStyle();
                wheelStyle2.SetColor(new ColorValue(2.55f, 0.48f, 0.48f, 1));
                SceneNode scenewhee2 = ShowTopoShape(wheelShap2);
                scenewhee2.SetFaceStyle(wheelStyle2);

                TopoShape wheelShap3  = shapeMaker.MakeCone(new Vector3(CarPoint.X + (float)CarLenth / 4f, CarPoint.Y + (float)CarWidth / 2f + 0.1f, (float)CarHeight / 3), new Vector3(0, -1, 0), (float)CarHeight / 4 * 2, 0.5, 0, 360);
                FaceStyle wheelStyle3 = new FaceStyle();
                wheelStyle3.SetColor(new ColorValue(2.55f, 0.48f, 0.48f, 1));
                SceneNode scenewheel3 = ShowTopoShape(wheelShap3);
                scenewheel3.SetFaceStyle(wheelStyle3);

                TopoShape wheelShap4  = shapeMaker.MakeCone(new Vector3(CarPoint.X + (float)CarLenth / 4f * 3, CarPoint.Y + (float)CarWidth / 2f + 0.1f, (float)CarHeight / 3), new Vector3(0, -1, 0), (float)CarHeight / 4 * 2, 0.5, 0, 360);
                FaceStyle wheelStyle4 = new FaceStyle();
                wheelStyle4.SetColor(new ColorValue(2.55f, 0.48f, 0.48f, 1));
                SceneNode scenewheel4 = ShowTopoShape(wheelShap4);
                scenewheel4.SetFaceStyle(wheelStyle4);
            }
            catch (Exception ex)
            { throw ex; }
        }
Exemplo n.º 32
0
 public override void OnFace(TopoShape shape)
 {
 }
Exemplo n.º 33
0
 private void ShowGeometry(TopoShape topoShape)
 {
     AnyCAD.Platform.SceneNode faceNode = AnyCAD.Platform.GlobalInstance.TopoShapeConvert.ToEntityNode(topoShape, 0.5f);
     faceNode.SetId(++nShapeCount);
     sceneManager.AddNode(faceNode);
 }
Exemplo n.º 34
0
 public override void OnPoint(TopoShape shape)
 {
 }
Exemplo n.º 35
0
   public override void OnCompound(TopoShape shape)
   {
 
   }
Exemplo n.º 36
0
        private void coneToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShape cylinder = renderView.ShapeMaker.MakeCone(new Vector3(120, 0, 0), new Vector3(0, 0, 1), 20, 100, 40, 315);

            renderView.ShowGeometry(cylinder, ++shapeId);
        }
Exemplo n.º 37
0
   public override void OnSolid(TopoShape shape)
   {
 
   }
Exemplo n.º 38
0
        private void curveToolStripMenuItem_Click(object sender, EventArgs e)
        {
            renderView.View3d.SetStandardView(3);

            LineStyle lineStyle = new LineStyle();

            lineStyle.SetLineWidth(0.5f);
            lineStyle.SetColor(ColorValue.BLUE);
            LineStyle lineStyle2 = new LineStyle();

            lineStyle2.SetLineWidth(0.5f);
            lineStyle2.SetColor(ColorValue.GREEN);

            TopoShape arc = GlobalInstance.BrepTools.MakeEllipseArc(Vector3.ZERO, 100, 50, 45, 270, Vector3.UNIT_Z);

            renderView.ShowGeometry(arc, ++shapeId);

            {
                GeomeCurve curve = new GeomeCurve();
                curve.Initialize(arc);

                float paramStart = curve.FirstParameter();
                float paramEnd   = curve.LastParameter();

                float step = (paramEnd - paramStart) * 0.1f;

                for (float uu = paramStart; uu <= paramEnd; uu += step)
                {
                    Vector3 dir = curve.DN(uu, 1);
                    Vector3 pos = curve.Value(uu);

                    // 切线
                    {
                        TopoShape line = GlobalInstance.BrepTools.MakeLine(pos, pos + dir);
                        SceneNode node = renderView.ShowGeometry(line, ++shapeId);
                        node.SetLineStyle(lineStyle);
                    }
                    // 法线
                    {
                        Vector3   dirN = dir.CrossProduct(Vector3.UNIT_Z);
                        TopoShape line = GlobalInstance.BrepTools.MakeLine(pos, pos + dirN);
                        SceneNode node = renderView.ShowGeometry(line, ++shapeId);
                        node.SetLineStyle(lineStyle2);
                    }
                }
            }

            TopoShapeProperty property = new TopoShapeProperty();

            property.SetShape(arc);

            float len = property.EdgeLength();

            TextNode text = new TextNode();

            text.SetText(String.Format("Arc Length: {0}", len));
            text.SetPosition(new Vector3(100, 100, 0));

            renderView.SceneManager.ClearNodes2d();
            renderView.SceneManager.AddNode2d(text);

            renderView.RequestDraw();
        }
Exemplo n.º 39
0
 public override bool OnBeiginComplexShape(TopoShape shape)
 {
     ShapeGroup.Add(shape);
     return(false);
 }