| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | MySolidWorks: Online Lernen & Recherchieren rund um SOLIDWORKS >> (SOLIDWORKS) |
Autor
|
Thema: API: AddTrimmingLoop (1926 mal gelesen)
|
Jan Boettcher Mitglied
Beiträge: 184 Registriert: 22.06.2005 NX 7.5 - NX 2306 SolidWorks 2006 - 2021 Win 10
|
erstellt am: 16. Jun. 2011 14:44 <-- editieren / zitieren --> Unities abgeben:
Hallo an Alle, SolidWorks 2010: Ich versuche seit geraumer Zeit per API einen Volumenkörper (Würfel) zusammenzubauen. Code: public void createSampleVolume1(SldWorks.PartDoc swPart) { SldWorks.Body2 swBody = swPart.CreateNewBody(); int nCrvs = 4; int[] vOrder = new int[nCrvs]; int[] vDim = new int[nCrvs]; int[] vPeriodic = new int[nCrvs]; int[] vNumKnots = new int[nCrvs]; int[] vNumCtrlPoints = new int[nCrvs]; for (int i = 0; i < nCrvs; i++) { vOrder[i] = 2; vDim[i] = 2; vPeriodic[i] = 0; vNumKnots[i] = 4; vNumCtrlPoints[i] = 2; } double[] vKnots = new double[4 * nCrvs]; for (int i = 0; i < vKnots.Length; i+=4) { vKnots[i] = 0.0; vKnots[i+1] = 0.0; vKnots[i+2] = 1.0; vKnots[i+3] = 1.0; } double[] vCtrlPointDbls = new double[2 * 2 * nCrvs]; vCtrlPointDbls[0] = 0.0; vCtrlPointDbls[1] = 0.0; vCtrlPointDbls[2] = 10.0; vCtrlPointDbls[3] = 0.0; vCtrlPointDbls[4] = 10.0; vCtrlPointDbls[5] = 0.0; vCtrlPointDbls[6] = 10.0; vCtrlPointDbls[7] = 10.0; vCtrlPointDbls[8] = 10.0; vCtrlPointDbls[9] = 10.0; vCtrlPointDbls[10] = 0.0; vCtrlPointDbls[11] = 10.0; vCtrlPointDbls[12] = 0.0; vCtrlPointDbls[13] = 10.0; vCtrlPointDbls[14] = 0.0; vCtrlPointDbls[15] = 0.0; SldWorks.Surface swSurface = null; swSurface = swBody.CreatePlanarSurface(new double[] { 0.0, 0.0, 0.0 }, new double[] {1.0,0.0, 0.0 }); swSurface.AddTrimmingLoop2(nCrvs, vOrder, vDim, vPeriodic, vNumKnots, vNumCtrlPoints, vKnots, vCtrlPointDbls, new double[] { 0.0, 1.0, 0.0, 1.0 }); swBody.CreateTrimmedSurface(); swSurface = swBody.CreatePlanarSurface(new double[] { 10.0, 0.0, 0.0 }, new double[] { 1.0, 0.0, 0.0 }); //Das folgende zerreisst ihn --> swSurface.AddTrimmingLoop2(nCrvs, vOrder, vDim, vPeriodic, vNumKnots, vNumCtrlPoints, vKnots, vCtrlPointDbls, new double[] { 0.0, 1.0, 0.0, 1.0 }); swBody.CreateTrimmedSurface(); ... swBody.CreateBodyFromSurfaces(); }
Dabei komme ich bis zum zweiten AddTrimmingLoop2. Dort ist dann Schluss. Die erste Fläche wird korrekt erstellt. Die Reihenfolge spielt keine Rolle. vertausche ich die beiden Flächen ist der Effekt der gleiche. Hat jemand eine Idee, was ich falsch mache?Viele Grüße Jan ------------------ Jan Böttcher www.ib-boettcher.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mmac Mitglied Dipl.-Ing. (FH) - Maschinenbau
Beiträge: 30 Registriert: 01.08.2005 SW2018
|
erstellt am: 19. Jun. 2011 13:43 <-- editieren / zitieren --> Unities abgeben: Nur für Jan Boettcher
Hallo Jan, versuche es mal mit folgendem Code: Bevor du die Routine startest, bitte ein leeres Teil öffnen. Option Explicit Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub wuerfel() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc boolstatus = Part.Extension.SelectByID2("Oben", "PLANE", 0, 0, 0, False, 0, Nothing, 0) Part.SketchManager.InsertSketch True Part.ClearSelection2 True Dim vSkLines As Variant vSkLines = Part.SketchManager.CreateCenterRectangle(0, 0, 0, -0.04923228944968, 0.04450598966251, 0) Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0.009058741258741, 0, -0.0464752812405, False, 0, Nothing, 0) Dim myDisplayDim As Object Set myDisplayDim = Part.AddDimension2(0.00315086652478, 0, -0.07010678017635) Part.ClearSelection2 True Dim myDimension As Object Set myDimension = Part.Parameter("D1@Skizze1") myDimension.SystemValue = 0.1 Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("Line4", "SKETCHSEGMENT", -0.05002000608088, 0, -0.006301733049559, False, 0, Nothing, 0) boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", -0.0161481909395, 0, -0.04332441471572, True, 0, Nothing, 0) Part.SketchAddConstraints "sgSAMELENGTH" Part.ClearSelection2 True Part.ShowNamedView2 "*Trimetrisch", 8 Part.ClearSelection2 True Dim myFeature As Object Set myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, False, 0, 0, 0.1, 0.01, False, False, False, False, 0.01745329251994, 0.01745329251994, False, False, False, False, True, True, True, 0, 0, False) Part.SelectionManager.EnableContourSelection = False boolstatus = Part.Extension.SelectByID2("Beschriftungen", "DCABINET", 0, 0, 0, False, 0, Nothing, 0) Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("D1@Aufsatz-Linear austragen1@Teil1.SLDPRT", "DIMENSION", -0.001082759148177, 0.00659327962091, -0.01424121124893, False, 0, Nothing, 0) boolstatus = Part.Extension.SelectByID2("Kantenlaenge@Skizze1@Teil1.SLDPRT", "DIMENSION", 0.0530276165198, 0.01690905842211, -0.04980290688007, False, 0, Nothing, 0) boolstatus = Part.Extension.SelectByID2("D1@Aufsatz-Linear austragen1@Teil1.SLDPRT", "DIMENSION", 0.002292908206587, 0.006364040091994, -0.01586676295184, False, 0, Nothing, 0) boolstatus = Part.Extension.SelectByID2("Kantenlaenge@Skizze1@Teil1.SLDPRT", "DIMENSION", 0.03735745856307, 0.02218156758716, -0.04511604300893, False, 0, Nothing, 0) Part.ClearSelection2 True Part.DeleteAllRelations Dim swEquationMgr As Object Set swEquationMgr = Part.GetEquationMgr() swEquationMgr.Add -1, """D1@Aufsatz-Linear austragen1"" = ""Kantenlaenge@Skizze1""" Part.ShowNamedView2 "*Isometrisch", 7 End Sub Viel Erfolg und Gruß Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jan Boettcher Mitglied
Beiträge: 184 Registriert: 22.06.2005
|
erstellt am: 19. Jun. 2011 17:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Martin, Danke für Deine Antwort. Ja so geht es mit dem Würfel. Leider kann ich das so aber nicht machen. Der Würfel ist nur der Versuchsballon. Ich habe einen Körper aus 3000 bis 8000 Polygonen, den ich aufbauen muss. Mit so vielen Skizzen wird das nichts. Ich muss den Weg über den Direktimport der Flächen gehen. Aber ich bin schon ein bisschen weiter: Wenn ich der Surface-Variablen vor jedem Durchlauf null zuweise und die Garbage-Collection explizit aufrufe, dann überlebt und arbeitet das Programm (fast immer). Das ist fachlich unbefriedigend und deutet auf irgend einen grundsätzlichen Fehler hin, den ich vermutlich noch mache, aber es reicht mir zunächst, da es mir im wesentlichen um den Import geht und nicht darum, ein bombensicheres Programm zu erstellen. Vielen Dank aber noch mal für die Hilfe. Jan
------------------ Jan Böttcher www.ib-boettcher.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkkk Mitglied
Beiträge: 105 Registriert: 04.03.2005
|
erstellt am: 20. Jun. 2011 08:18 <-- editieren / zitieren --> Unities abgeben: Nur für Jan Boettcher
|
mkkk Mitglied
Beiträge: 105 Registriert: 04.03.2005
|
erstellt am: 20. Jun. 2011 08:20 <-- editieren / zitieren --> Unities abgeben: Nur für Jan Boettcher
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|