예제 #1
0
        //                                                    Operations


        void Mirror(SketchSegment axis)
        {
            Sketch sketch = (Sketch)Model.GetActiveSketch2();

            for (int k = iSegments - 2; k >= 0; k--)
            {
                clear();
                Segments[k].SelectByMark(true, 1);
                axis.SelectByMark(true, 2);
                Model.SketchMirror();

                dynamic segments = sketch.GetSketchSegments();
                for (int i = 0; i < segments.Length; i++)
                {
                    bool          OK        = true;
                    SketchSegment pretender = segments[i];
                    for (int j = 0; j < iSegments; j++)
                    {
                        if (pretender.GetName() == Segments[j].GetName())
                        {
                            OK = false; break;
                        }
                    }
                    if (OK)
                    {
                        Segments[iSegments++] = pretender;
                    }
                }
            }
        }
예제 #2
0
        private void b_create_Click(object sender, EventArgs e)
        {
            // Abfrage der Eingabe aus allen Textboxen.
            // TryParse probiert den String in eine double-Variable zu konvertieren.
            // Liefert true zurück, wenn String konvertiert werden konnte.
            // Konvertierter Wert wird in Variable kopiert durch das Wort out.
            if (double.TryParse(tb_breite.Text, out breite) == false ||
                double.TryParse(tb_laenge.Text, out laenge) == false ||
                double.TryParse(tb_hoehe.Text, out hoehe) == false) // ||
            //double.TryParse(tb_radius.Text, out radius) == false)
            {
                MessageBox.Show("Fehlerhafte Eingabe!");
                return;
            }

            // Werte müssen von mm in m konvertiert werden.
            breite /= 1000.0;
            laenge /= 1000.0;
            hoehe  /= 1000.0;
            radius /= 1000.0;

            // Anlegen eines neuen Bauteiles.
            ModelDoc2 swModel = swApp.NewPart();

            // Ebene oben wird selektiert und eine Skizze wird eingefügt.
            swModel.Extension.SelectByID("Ebene oben", "PLANE", 0, 0, 0, false, 1, null);
            swModel.InsertSketch2(true);

            // Skizze wird in Feature konvertiert, damit diese benannt werden kann.
            Sketch  swSketch = swModel.GetActiveSketch2();
            Feature swFeat   = (Feature)swSketch;

            swFeat.Name = "Grundflaeche";

            swModel.SketchRectangle(0, 0, 0, breite, laenge, 0, true);

            Feature swFeat2 = swModel.FeatureManager.FeatureExtrusion2(true, false, false, 0, 0, hoehe, 0, false, false, false, false, 0, 0,
                                                                       false, false, false, false, true, true, true, 0, 0, true);

            swFeat2.Name = "Quader";

            swModel.SaveAsSilent("C:\\temp\\Quader_L_" + tb_laenge.Text + "_B_" + tb_breite.Text + "_H_" + tb_hoehe.Text + ".SLDPRT", true);
        }
예제 #3
0
        private void b_cut_Click(object sender, EventArgs e)
        {
            if (double.TryParse(tb_radius.Text, out radius) == false)
            {
                MessageBox.Show("Fehlerhafte Eingabe!");
                return;
            }
            ModelDoc2 swModel = swApp.ActiveDoc;

            swModel.Extension.SelectByID2("", "FACE", 0.5 * breite, hoehe, -0.5 * laenge, false, 1, null, 0);

            swModel.InsertSketch2(true);

            Sketch swSketch = (Sketch)swModel.GetActiveSketch2();

            swModel.CreateCircleByRadius2(0.5 * breite, 0.5 * laenge, 0, radius);
            swModel.FeatureManager.FeatureCut3(true, false, false, 1, 1, 0.0, 0.0, false, false, false, false, 0, 0, false,
                                               false, false, false, false, true, true, false, false, false, 0, 0.0, false);

            swModel.SaveAsSilent("C:\\temp\\Quader_L_" + tb_laenge.Text + "_B_" +
                                 tb_breite.Text + "_H_" + tb_hoehe.Text + "_cut_R_" + tb_radius.Text + ".SLDPRT", true);
        }
예제 #4
0
        public static void MyVisualOutput_ComposedPatterns(List <MyComposedPattern> listOfOutputComposedPattern,
                                                           List <MyComposedPattern> listOfOutputComposedPatternTwo, SldWorks mySwApplication, ModelDoc2 SwModel)
        {
            SwModel.ClearSelection2(true);
            //SwModel.Insert3DSketch();

            int      nOfPatterns = 0;
            var      tolerance   = Math.Pow(10, -4);
            MyVertex headCentroidPattern;
            MyVertex backCentroidPattern;

            foreach (var composedPattern in listOfOutputComposedPattern)
            {
                nOfPatterns         = composedPattern.listOfMyPattern.Count;
                headCentroidPattern = composedPattern.listOfMyPattern[0].patternCentroid;
                backCentroidPattern = composedPattern.listOfMyPattern[nOfPatterns - 1].patternCentroid;
                if (composedPattern.pathOfMyComposedPattern.GetType() == typeof(MyLine))
                {
                    SwModel.GetActiveSketch2();
                    SwModel.CreateLine2(headCentroidPattern.x, headCentroidPattern.y, headCentroidPattern.z,
                                        backCentroidPattern.x, backCentroidPattern.y, backCentroidPattern.z);
                }
                else //typeof(MyCircumForPath)
                {
                    var pathObject   = (MyCircumForPath)composedPattern.pathOfMyComposedPattern;
                    var circumCenter = pathObject.circumcenter;
                    //SwModel.CreateArc2(pathObject.circumcenter.x, pathObject.circumcenter.y, pathObject.circumcenter.z,
                    //    headCentroidPattern.x, headCentroidPattern.y, headCentroidPattern.z,
                    //    backCentroidPattern.x, backCentroidPattern.y, backCentroidPattern.z, -1);   //o +1?

                    if (
                        Math.Abs(headCentroidPattern.Distance(backCentroidPattern) -
                                 composedPattern.constStepOfMyComposedPattern) < tolerance)
                    {
                        //SwModel.ClearSelection2(true);
                        SwModel.Insert3DSketch();
                        SwModel.GetActiveSketch2();
                        SwModel.CreateCircle2(circumCenter.x, circumCenter.y, circumCenter.z,
                                              headCentroidPattern.x, headCentroidPattern.y, headCentroidPattern.z);
                        //SwModel.InsertSketch();
                    }
                    else
                    {
                        //SwModel.ClearSelection2(true);
                        //SwModel.Insert3DSketch();
                        SwModel.GetActiveSketch2();
                        SwModel.Create3PointArc(headCentroidPattern.x, headCentroidPattern.y, headCentroidPattern.z,
                                                backCentroidPattern.x, backCentroidPattern.y, backCentroidPattern.z,
                                                composedPattern.listOfMyPattern[1].patternCentroid.x,
                                                composedPattern.listOfMyPattern[1].patternCentroid.y,
                                                composedPattern.listOfMyPattern[1].patternCentroid.z);
                        //SwModel.InsertSketch();
                    }
                }
            }

            foreach (var composedPattern in listOfOutputComposedPatternTwo)
            {
                headCentroidPattern = composedPattern.listOfMyPattern[0].patternCentroid;
                backCentroidPattern = composedPattern.listOfMyPattern[1].patternCentroid;
                SwModel.GetActiveSketch2();
                SwModel.CreateLine2(headCentroidPattern.x, headCentroidPattern.y, headCentroidPattern.z,
                                    backCentroidPattern.x, backCentroidPattern.y, backCentroidPattern.z);
            }
            SwModel.InsertSketch();

            #region esempio linea funzionante
            //ModelDoc2 SwModel = mySwApplication.ActiveDoc;
            //SwModel.ClearSelection2(true);
            //SwModel.Insert3DSketch();
            //SwModel.GetActiveSketch2();
            //SwModel.CreateLine2(0, 0, 0, 0, 0.1, 0.1);

            //SwModel.InsertSketch();
            #endregion
        }
예제 #5
0
        public void AddFeature(SldWorks SwApp, ModelDoc2 SwModel, Point2D P1, Point2D P2)
        {
            if (CheckUsing() == false)
            {
                return;
            }
            SwModel.ClearSelection2(true);
            Helper         helper         = new Helper(SwModel, SwApp);
            SelectionMgr   selectionMgr   = SwModel.SelectionManager;
            SketchManager  sketchManager  = SwModel.SketchManager;
            FeatureManager featureManager = SwModel.FeatureManager;
            const double   Aprox          = 0.0005; // needs to make correct theard
            Sketch         swSketch       = default(Sketch);

            double L = P2.x - P1.x;

            helper.select_feature("RefPlane", 2, false, 0);

            if (P1.x > 0)
            {
                SwModel.CreatePlaneAtOffset(P1.x, false);
            }


            sketchManager.InsertSketch(true);

            // create helix
            sketchManager.CreateCircleByRadius(0, 0, 0, P1.y);
            SwModel.InsertHelix(false, theardCW, false, true, 2, L, theardPinch, 0, 0, 0);
            SwModel.ClearSelection2(true);


            #region //Triangle profile

            if (theardType == (object)"Triangle")
            {
                double XL = (P1.y - theardR) / 2;      // haf of triangle base
                double YL = XL * (double)Math.Sqrt(3); // median of triangle

                helper.select_feature("RefPlane", 1, false, 0);
                sketchManager.InsertSketch(true);
                sketchManager.CreateLine((P1.x - XL + Aprox), P1.y, 0, (P1.x + XL - Aprox), P1.y, 0);
                sketchManager.CreateLine((P1.x - XL + Aprox), P1.y, 0, P1.x, (P1.y - YL), 0);
                sketchManager.CreateLine((P1.x + XL - Aprox), P1.y, 0, P1.x, (P1.y - YL), 0);
            }

            #endregion

            #region //Trapeze profile

            if (theardType == (object)"Trapeze")
            {
                helper.select_feature("RefPlane", 1, false, 0);
                sketchManager.InsertSketch(true);
                double H    = (P1.y - theardR) / 2;            // haf of trapaze top base and heigth
                double ctgA = 1 / Math.Tan(helper.ToRad(105)); // ctg value of bottom base angle
                double A    = 2 * (H - Aprox) + 4 * H * ctgA;

                sketchManager.CreateLine((P1.x - H / 2 + Aprox), P1.y, 0, (P1.x + H / 2 - Aprox), P1.y, 0);
                sketchManager.CreateLine((P1.x - H / 2 + Aprox), P1.y, 0, (P1.x - (A / 4)), P1.y - H, 0);
                sketchManager.CreateLine((P1.x + H / 2 - Aprox), P1.y, 0, (P1.x + (A / 4)), P1.y - H, 0);
                sketchManager.CreateLine((P1.x - (A / 4)), P1.y - H, 0, (P1.x + (A / 4)), P1.y - H, 0);
            }

            #endregion

            swSketch = SwModel.GetActiveSketch2() as Sketch;
            SwModel.EditRebuild3(); // model rebuild needs to make cutsweep feature avaible

            Entity ent = swSketch as Entity;
            ent.Select2(false, 1); // select sketch using mark 1 for sweep cut
            helper.select_feature("Helix", helper.get_features_count("Helix") - 1, true, 4);

            featureManager.InsertCutSwept4(false, true, 0, false, false, 0, 0, false, 0, 0, 0, 0, true, true, 0,
                                           true, true, true, false);

            helper.HidePlanes();
        }
예제 #6
0
        //This function prints the detected COMPOSED patterns of components (lines and circles).
        public static void ShowAndPrintResults_Assembly_ComposedPatterns(
            List <MyComposedPatternOfComponents> listOfOutputComposedPattern,
            List <MyComposedPatternOfComponents> listOfOutputComposedPatternTwo, ModelDoc2 SwModel, SldWorks swApplication)
        {
            SwModel.ClearSelection2(true);
            SwModel.Insert3DSketch();

            int      nOfPatterns;
            var      tolerance = Math.Pow(10, -4);
            MyVertex headCentroidPattern;
            MyVertex backCentroidPattern;

            foreach (var composedPattern in listOfOutputComposedPattern)
            {
                nOfPatterns         = composedPattern.ListOfMyPatternOfComponents.Count;
                headCentroidPattern = composedPattern.ListOfMyPatternOfComponents[0].patternCentroid;
                backCentroidPattern = composedPattern.ListOfMyPatternOfComponents[nOfPatterns - 1].patternCentroid;
                if (composedPattern.pathOfMyComposedPatternOfComponents.GetType() == typeof(MyLine))
                {
                    SwModel.GetActiveSketch2();
                    SwModel.CreateLine2(headCentroidPattern.x, headCentroidPattern.y, headCentroidPattern.z,
                                        backCentroidPattern.x, backCentroidPattern.y, backCentroidPattern.z);
                }
                else //typeof(MyCircumForPath)
                {
                    var pathObject   = (MyCircumForPath)composedPattern.pathOfMyComposedPatternOfComponents;
                    var circumCenter = pathObject.circumcenter;

                    if (
                        Math.Abs(headCentroidPattern.Distance(backCentroidPattern) -
                                 composedPattern.constStepOfMyComposedPatternOfComponents) < tolerance)
                    {
                        //SwModel.ClearSelection2(true);
                        //SwModel.Insert3DSketch();
                        SwModel.GetActiveSketch2();
                        SwModel.CreateCircle2(circumCenter.x, circumCenter.y, circumCenter.z,
                                              headCentroidPattern.x, headCentroidPattern.y, headCentroidPattern.z);
                        //SwModel.InsertSketch();
                    }
                    else
                    {
                        //SwModel.ClearSelection2(true);
                        //SwModel.Insert3DSketch();
                        SwModel.GetActiveSketch2();
                        SwModel.Create3PointArc(headCentroidPattern.x, headCentroidPattern.y, headCentroidPattern.z,
                                                backCentroidPattern.x, backCentroidPattern.y, backCentroidPattern.z,
                                                composedPattern.ListOfMyPatternOfComponents[1].patternCentroid.x,
                                                composedPattern.ListOfMyPatternOfComponents[1].patternCentroid.y,
                                                composedPattern.ListOfMyPatternOfComponents[1].patternCentroid.z);
                        //SwModel.InsertSketch();
                    }
                }
            }

            foreach (var composedPattern in listOfOutputComposedPatternTwo)
            {
                headCentroidPattern = composedPattern.ListOfMyPatternOfComponents[0].patternCentroid;
                backCentroidPattern = composedPattern.ListOfMyPatternOfComponents[1].patternCentroid;
                SwModel.CreateLine2(headCentroidPattern.x, headCentroidPattern.y, headCentroidPattern.z,
                                    backCentroidPattern.x, backCentroidPattern.y, backCentroidPattern.z);
            }
            SwModel.InsertSketch();
        }