public override void Run(RenderControl render)
        {
            var sketch = SketchBuilder.MakeEllipse(GP.Origin(), 5, 3, GP.DX(), GP.DZ());

            // 1. Sweep
            {
                GPntList points = new GPntList {
                    GP.Origin(), new GPnt(20, 10, 30), new GPnt(50, 50, 50),
                };
                var path = SketchBuilder.MakeBSpline(points);
                render.ShowShape(path, Vector3.Green);

                var feature = FeatureTool.Sweep(sketch, path, EnumGeomFillTrihedron.ConstantNormal);
                render.ShowShape(feature, Vector3.Blue);
            }

            // 2. Revol
            {
                var feature = FeatureTool.Revol(sketch, new GAx1(new GPnt(-20, 0, 0), GP.DY()), 90);

                render.ShowShape(feature, Vector3.Green);
            }
            // 3. Loft
            {
                var baseWire = SketchBuilder.MakeRectangle(new GAx2(new GPnt(50, -50, 0), GP.DZ()), 20, 20, 5, false);
                var topWire  = SketchBuilder.MakeCircle(new GPnt(60, -40, 40), 5, GP.DZ());

                var loft = FeatureTool.Loft(baseWire, topWire, true);
                render.ShowShape(loft, Vector3.Red);
            }
        }
Beispiel #2
0
        GroupSceneNode CreateFrames(double width, double height, double deep, double radius)
        {
            var baseSketch = CreateSketch(radius, deep);

            //TopLeft
            var s11 = Project(baseSketch, new GPnt(0, 0, height), new GDir(-1, 0, -1), GP.DZ());
            //BottomLeft
            var s20 = Project(baseSketch, GP.Origin(), new GDir(-1, 0, 1), GP.DZ());
            //BottomRight
            var s12 = Project(s20, new GPnt(width, 0, 0), new GDir(1, 0, 1), GP.DX());
            //TopRight
            var s21 = Project(s11, new GPnt(width, 0, height), new GDir(-1, 0, 1), GP.DX());

            var frame1 = FeatureTool.Loft(s11, s20, false);
            var frame2 = FeatureTool.Loft(s20, s12, false);
            var frame3 = FeatureTool.Loft(s12, s21, false);
            var frame4 = FeatureTool.Loft(s21, s11, false);

            var frameMaterial = MeshStandardMaterial.Create("window-frame");

            frameMaterial.SetColor(Vector3.LightGray);
            frameMaterial.SetMetalness(0.5f);
            frameMaterial.SetFaceSide(EnumFaceSide.DoubleSide);

            var group = new GroupSceneNode();

            group.AddNode(BrepSceneNode.Create(frame1, frameMaterial, null));
            group.AddNode(BrepSceneNode.Create(frame2, frameMaterial, null));
            group.AddNode(BrepSceneNode.Create(frame3, frameMaterial, null));
            group.AddNode(BrepSceneNode.Create(frame4, frameMaterial, null));

            return(group);
        }
        public override void Run(RenderControl render)
        {
            var startPt = new GVec(0, 100, 0);
            var points  = new GPntList();

            points.Add(new GPnt(startPt.XYZ()));
            points.Add(new GPnt(startPt.Added(new GVec(0, 0, 150)).XYZ()));
            points.Add(new GPnt(startPt.Added(new GVec(0, 100, 150)).XYZ()));
            points.Add(new GPnt(startPt.Added(new GVec(-100, 100, 150)).XYZ()));
            points.Add(new GPnt(startPt.Added(new GVec(-100, 300, 150)).XYZ()));
            points.Add(new GPnt(startPt.Added(new GVec(100, 300, 150)).XYZ()));
            TopoShape path = SketchBuilder.MakePolygon(points, false);

            var sectionList = new TopoShapeList();

            GAx2      coord1   = new GAx2(new GPnt(startPt.Added(new GVec(-25, -25, 0)).XYZ()), GP.DY());
            TopoShape section1 = SketchBuilder.MakeRectangle(coord1, 50, 50, 10, false);

            render.ShowShape(section1, Vector3.Red);
            render.ShowShape(path, Vector3.Green);

            TopoShape pipe = FeatureTool.SweepByFrenet(section1, path, EnumSweepTransitionMode.RoundCorner,
                                                       false);

            render.ShowShape(pipe, Vector3.Blue);
        }
Beispiel #4
0
        TopoShape CreateShape()
        {
            GPntList v3list = new GPntList();

            double[,] startpiont = new double[1, 3] {
                { 0, 0, 10 }
            };                  //起点
            double length = 10; //波长
            double width  = 4;  //波峰减去波谷差值
            int    nums   = 5;  //支点个数

            double[,] list = GetVerticalCurveList(startpiont, length, width, nums);
            for (int i = 0; i < list.GetLength(0); i++)
            {
                GPnt P0 = new GPnt(list[i, 0], list[i, 1], list[i, 2]);//直井井室入口 起点
                v3list.Add(P0);
            }

            GVec aa  = new GVec(); aa.SetXYZ(v3list[1].XYZ());
            GVec bb  = new GVec(); bb.SetXYZ(v3list[0].XYZ());
            GDir dir = new GDir();

            dir.SetXYZ(aa.Subtracted(bb).XYZ());

            TopoShape section = SketchBuilder.MakeCircle(v3list[0], 0.1, dir);
            TopoShape line9   = SketchBuilder.MakeBSpline(v3list);

            return(FeatureTool.Sweep(section, line9, EnumGeomFillTrihedron.CorrectedFrenet));
        }
Beispiel #5
0
 internal void GetMeasurements(FeatureTool tool, FeatureMeasurementCollection result)
 {
     if (result == null)
     {
         throw new ArgumentNullException("result");
     }
     tool.MeasureGame(this, result);
 }
Beispiel #6
0
        public override void Run(RenderControl render)
        {
            var rect1 = SketchBuilder.MakeRectangle(GP.XOY(), 10, 5, 1, true);
            var rect2 = SketchBuilder.MakeRectangle(new GAx2(new GPnt(1, 1, 0), GP.DZ(), GP.DX()), 8, 3, 1, true);

            var cut = BooleanTool.Cut(rect1, rect2);

            var extrude = FeatureTool.Extrude(cut, 100, GP.DZ());

            render.ShowShape(extrude, Vector3.Blue);
        }
        public override void Run(RenderControl render)
        {
            var baseSketch = SketchBuilder.MakeRectangle(GP.XOY(), 10, 20, 2, false);

            // project to plane
            var topSketch = ProjectionTool.ProjectOnPlane(baseSketch, new GPnt(0, 0, 30), new GDir(0, -0.5, 0.5), GP.DZ());

            // make loft
            var shape = FeatureTool.Loft(baseSketch, topSketch, true);

            render.ShowShape(shape, ColorTable.Green);
        }
Beispiel #8
0
        public override void Run(RenderControl render)
        {
            var path   = ShapeIO.Open(GetResourcePath("sweep/path.igs"));
            var spline = ShapeIO.Open(GetResourcePath("sweep/spline.igs"));

            var shape = FeatureTool.SweepByFrenet(spline, path, EnumSweepTransitionMode.Transformed, false, false, false);

            render.ShowShape(shape, ColorTable.Red);

            var cylinder = ShapeIO.Open(GetResourcePath("sweep/Cylinder.igs"));

            render.ShowShape(cylinder, ColorTable.Blue);
        }
        public override void Run(RenderControl render)
        {
            var sketch = SketchBuilder.MakeRectangle(GP.XOY(), 100, 50, 5, false);

            render.ShowShape(sketch, Vector3.Blue);

            var types = new EnumGeomJoinType[] { EnumGeomJoinType.Arc, EnumGeomJoinType.Intersection, EnumGeomJoinType.Tangent };

            for (int ii = 0; ii < 3; ++ii)
            {
                var offset = FeatureTool.OffsetWire(sketch, 2 * ii + 2, 0, types[ii], false);
                render.ShowShape(offset, Vector3.Green);
            }
        }
Beispiel #10
0
        public override void Run(RenderControl render)
        {
            var path       = SketchBuilder.MakeArcOfCircle(new GPnt(0, 0, 0), new GPnt(10, 0, 10), new GPnt(5, 0, 8));
            var baseSketch = SketchBuilder.MakeRectangle(new GAx2(new GPnt(-5, -10, 0), GP.DZ(), GP.DX()), 10, 20, 2, false);
            var topSketch  = SketchBuilder.MakeCircle(new GPnt(10, 0, 10), 5, GP.DX());

            var shapeList = new TopoShapeList();

            shapeList.Add(baseSketch);
            shapeList.Add(topSketch);
            var shape = FeatureTool.SweepByFrenet2(shapeList, path, EnumSweepTransitionMode.RoundCorner, true);

            render.ShowShape(shape, ColorTable.Beige);
        }
        public override void Run(RenderControl render)
        {
            GPntList points   = new GPntList();
            string   fileName = GetResourcePath("data/CableViewInfo.txt");

            using (StreamReader reader = File.OpenText(fileName))
            {
                while (!reader.EndOfStream)
                {
                    var line  = reader.ReadLine();
                    var items = line.Split(',');
                    if (items.Length < 3)
                    {
                        continue;
                    }

                    double x = double.Parse(items[0]);
                    double y = double.Parse(items[1]);
                    double z = double.Parse(items[2]);

                    points.Add(new GPnt(x, y, z));
                }
            }

            var path = SketchBuilder.MakeBSpline(points);

            render.ShowShape(path, ColorTable.Red);

            var curve = new ParametricCurve(path);
            var rt    = curve.D1(curve.FirstParameter());

            var position = rt.GetPoint();
            var dir      = new GDir(rt.GetVectors()[0]);
            var sketch   = SketchBuilder.MakeCircle(position, 1, dir);
            var pipe     = FeatureTool.Sweep(sketch, path, EnumGeomFillTrihedron.ConstantNormal);

            if (pipe != null)
            {
                render.ShowShape(pipe, new Vector3(0.8f));
            }
        }
        public override void Run(RenderControl render)
        {
            var material = MeshStandardMaterial.Create("metal-double");

            material.SetColor(new Vector3(1.0f, 0.8f, 0.0f));
            material.SetMetalness(0.8f);
            material.SetRoughness(0.5f);
            material.SetFaceSide(EnumFaceSide.DoubleSide);


            var startPt = new GVec(0, 100, 0);
            var points  = new GPntList();

            points.Add(new GPnt(startPt.XYZ()));
            points.Add(new GPnt(startPt.Added(new GVec(0, 0, 150)).XYZ()));
            points.Add(new GPnt(startPt.Added(new GVec(0, 100, 150)).XYZ()));
            points.Add(new GPnt(startPt.Added(new GVec(-100, 100, 150)).XYZ()));
            points.Add(new GPnt(startPt.Added(new GVec(-100, 300, 150)).XYZ()));
            points.Add(new GPnt(startPt.Added(new GVec(100, 300, 150)).XYZ()));
            TopoShape path = SketchBuilder.MakePolygon(points, false);

            var sectionList = new TopoShapeList();

            GAx2      coord1   = new GAx2(new GPnt(startPt.Added(new GVec(-25, -25, 0)).XYZ()), GP.DY());
            TopoShape section1 = SketchBuilder.MakeRectangle(coord1, 50, 50, 10, false);

            render.ShowShape(section1, ColorTable.Red);
            render.ShowShape(path, ColorTable.Green);

            TopoShape pipe = FeatureTool.SweepByFrenet(section1, path, EnumSweepTransitionMode.RoundCorner,
                                                       false);
            BufferShape bs = new BufferShape(pipe, material, null, 0.1f);

            bs.Build();
            var node = new BrepSceneNode(bs);

            render.ShowSceneNode(node);
        }
Beispiel #13
0
        public override void Run(RenderControl render)
        {
            TopoShapeList tg     = new TopoShapeList();
            GPntList      points = new GPntList();

            using (var sr = new StreamReader(GetResourcePath("data/Stage4_Rotor4_Profile.curve")))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    if (line.StartsWith("# Profile"))
                    {
                        if (points.Count > 0)
                        {
                            var temp2 = SketchBuilder.MakeBSpline(points);
                            if (temp2 != null)
                            {
                                tg.Add(temp2);
                            }
                        }

                        points = new GPntList();
                    }
                    else
                    {
                        var temp = line.Split('\t');
                        points.Add(new GPnt(double.Parse(temp[0]), double.Parse(temp[1]), double.Parse(temp[2])));
                    }
                }
            }


            var temp1 = FeatureTool.Loft(tg, true, true);

            render.ShowShape(temp1, ColorTable.Hex(0xFF0000));
        }
        public override void Run(RenderControl render)
        {
            double dS           = 19.0;      //弹簧螺距mm
            double dR           = 11.25;     //1/2弹簧中径mm
            double dr1          = 0.9;       //内层钢丝半径mm
            double dr2          = 0.9;       //外层钢丝半径mm
            double dr           = dr1 + dr2; //钢丝轴心分布半径mm
            double da1          = 0.29;      //弹簧螺旋角rad
            double dw0          = 1;         //卷簧轴转速rad/s
            double dw1          = 5;         //拧索轴转速rad/s
            int    nOutterCount = 5;         //外层钢丝股数

            {
                // create the intter path
                GPntList pts = new GPntList();

                for (double t = 0; t < 10; t += 0.1)
                {
                    pts.Add(getIntterMultiSpingCoord(t, dS, dR, dw0));
                }
                var path = SketchBuilder.MakeBSpline(pts);

                // Get the sketch position and direction
                var curve = new ParametricCurve(path);
                var rt    = curve.D1(curve.FirstParameter());

                var position = rt.GetPoint();
                var dir      = new GDir(rt.GetVectors()[0]);
                var sketch   = SketchBuilder.MakeCircle(position, dr1, dir);

                // Create pipe
                var pipe = FeatureTool.Sweep(sketch, path, EnumGeomFillTrihedron.CorrectedFrenet);

                render.ShowShape(pipe, new Vector3(0.8f));
            }


            Vector3[] colors = new Vector3[] { new Vector3(1.0f, 0, 0),
                                               new Vector3(1, 1, 0),
                                               new Vector3(0.5f, 1, 0),
                                               new Vector3(0, 1, 64 / 255.0f),
                                               new Vector3(0, 1, 1) };


            // create the outter path
            for (int i = 0; i < nOutterCount; i++)
            {
                GPntList pts = new GPntList();
                for (double t = 0; t < 10; t += 0.1)
                {
                    pts.Add(getOutterMultiSpingCoord(t, dS, dR, dr, da1, dw0, dw1, i * 2 * Math.PI / nOutterCount));
                }
                var path = SketchBuilder.MakeBSpline(pts);

                // Get the sketch position and direction
                var curve = new ParametricCurve(path);
                var rt    = curve.D1(curve.FirstParameter());

                var position = rt.GetPoint();
                var dir      = new GDir(rt.GetVectors()[0]);

                var sketch = SketchBuilder.MakeCircle(position, dr2, dir);

                // Create pipe
                var pipe = FeatureTool.Sweep(sketch, path, EnumGeomFillTrihedron.CorrectedFrenet);

                render.ShowShape(pipe, colors[i]);
            }
        }
Beispiel #15
0
        public override void Run(RenderControl render)
        {
            //1. Create Shape
            TopoShapeList tg     = new TopoShapeList();
            GPntList      points = new GPntList();

            using (var sr = new StreamReader(GetResourcePath("data/Stage4_Rotor4_Profile.curve")))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    if (line.StartsWith("# Profile"))
                    {
                        if (points.Count > 0)
                        {
                            var temp2 = SketchBuilder.MakeBSpline(points);
                            if (temp2 != null)
                            {
                                tg.Add(temp2);
                            }
                        }

                        points = new GPntList();
                    }
                    else
                    {
                        var temp = line.Split('\t');
                        points.Add(new GPnt(double.Parse(temp[0]), double.Parse(temp[1]), double.Parse(temp[2])));
                    }
                }
            }


            var shape = FeatureTool.Loft(tg, true, true);

            //2. Compute Curvature
            var material = BasicMaterial.Create("vertex-color");

            material.SetVertexColors(true);
            material.SetFaceSide(EnumFaceSide.DoubleSide);

            var bs = new BufferShape(shape, material, null, 0.01f);

            bs.Build();

            ColorLookupTable clt = new ColorLookupTable();

            clt.SetColorMap(ColorMapKeyword.Create(EnumSystemColorMap.Rainbow));

            float scale = 100;

            clt.SetMinValue(-0.2f * scale);
            clt.SetMaxValue(scale);

            for (uint ii = 0; ii < bs.GetFaceCount(); ++ii)
            {
                var sc = new SurfaceCurvature(bs);
                if (sc.Compute(ii, EnumCurvatureType.MeanCurvature))
                {
                    Console.WriteLine("{0}, {1}", sc.GetMinValue(), sc.GetMaxValue());
                    var colorBuffer = sc.ComputeColors(clt, scale);
                    bs.SetVertexColors(ii, colorBuffer);
                }
            }

            // 3. Show it!
            var node = new BrepSceneNode(bs);

            render.ShowSceneNode(node);
        }
        public override void Run(RenderControl render)
        {
            string filepathp = GetResourcePath(@"data\blade_p.dat");             // p侧字符型数据

            string[] data_p    = File.ReadAllLines(filepathp, Encoding.Default); // 1行    2401列,
            string   filepaths = GetResourcePath(@"data\blade_s.dat");           // s侧字符型数据

            string[] data_s = File.ReadAllLines(filepaths, Encoding.Default);
            //
            // p侧的曲线
            double[,] curvee = new double[(data_p.GetUpperBound(data_p.Rank - 1) + 1), 3]; //建立数组,n行3列,
            for (int i = 0; i < (data_p.GetUpperBound(data_p.Rank - 1) + 1); i++)          //
            {
                data_p[i].Split();
                string[] split = data_p[i].Split(new Char[] { ' ' });
                curvee[i, 0] = double.Parse(split[0]);
                curvee[i, 1] = double.Parse(split[1]);
                curvee[i, 2] = double.Parse(split[2]);
            }
            //
            // s侧的曲线,
            double[,] curvee1 = new double[(data_p.GetUpperBound(data_p.Rank - 1) + 1), 3]; //建立数组,n行3列,
            for (int i = 0; i < (data_p.GetUpperBound(data_p.Rank - 1) + 1); i++)           //
            {
                data_s[i].Split();
                string[] split = data_s[i].Split(new Char[] { ' ' });
                curvee1[i, 0] = double.Parse(split[0]);
                curvee1[i, 1] = double.Parse(split[1]);
                curvee1[i, 2] = double.Parse(split[2]);
            }
            int n_jie    = (int)curvee1[0, 1];          // 截面数
            int n_points = (int)curvee1[0, 0];          // 点数
            // topolist
            TopoShapeList spline = new TopoShapeList(); //进行拓扑list的生成,

            for (int nn = 0; nn < n_jie; nn++)          // 循环截面数,
            {
                //int nn = 0;
                GPntList points = new GPntList();
                // s侧
                for (int mm = nn * n_points + 1; mm < (nn + 1) * n_points; mm++)     // 循环截面所对应的点数范围,
                {
                    GPnt P0 = new GPnt(curvee[mm, 0], curvee[mm, 1], curvee[mm, 2]); //   需要进行添加的点,
                    points.Add(P0);
                }
                // p侧
                for (int mm = (nn + 1) * n_points; mm > nn * n_points + 1; mm--)        // 循环截面所对应的点数范围,
                {
                    GPnt P0 = new GPnt(curvee1[mm, 0], curvee1[mm, 1], curvee1[mm, 2]); //   需要进行添加的点,
                    points.Add(P0);
                }
                // var quxian = SketchBuilder.MakePolygon(points, true);  //生成拓扑,
                var quxian = SketchBuilder.MakeBSpline(points, true);
                //mRenderView.ShowShape(quxian, Vector3.Red);
                spline.Add(quxian);
            }
            var shape = FeatureTool.Loft(spline, true, false);

            //创建一个体进行布尔运算
            GPntList points_shroud = new GPntList();
            GPnt     P10           = new GPnt(170, 0, 0);
            GPnt     P11           = new GPnt(170, 0, 200);
            GPnt     P12           = new GPnt(250, 0, 200);
            GPnt     P13           = new GPnt(250, 0, 0);

            points_shroud.Add(P10);
            points_shroud.Add(P11);
            points_shroud.Add(P12);
            points_shroud.Add(P13);
            var quxian1 = SketchBuilder.MakePolygon(points_shroud, true);
            var face    = SketchBuilder.MakePlanarFace(quxian1);
            var feature = FeatureTool.Revol(face, new GAx1(new GPnt(0, 0, 0), GP.DZ()), 0);

            var cut = BooleanTool.Cut(shape, feature);   // 求差  保留前面的一个

            if (cut != null)
            {
                render.ShowShape(cut, Vector3.Green);
            }

            //var cut2 = BooleanTool.Cut(feature, shape);
            //if (cut2 != null)
            //    render.ShowShape(cut2, Vector3.Blue);
        }