// 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; } } } }
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); }
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); }
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 }
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(); }
//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(); }