Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: AddTrimmingLoop

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von Jan Boettcher an!   Senden Sie eine Private Message an Jan Boettcher  Schreiben Sie einen Gästebucheintrag für Jan Boettcher

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von mmac an!   Senden Sie eine Private Message an mmac  Schreiben Sie einen Gästebucheintrag für mmac

Beiträge: 30
Registriert: 01.08.2005

SW2018

erstellt am: 19. Jun. 2011 13:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Jan Boettcher 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Jan Boettcher an!   Senden Sie eine Private Message an Jan Boettcher  Schreiben Sie einen Gästebucheintrag für Jan Boettcher

Beiträge: 184
Registriert: 22.06.2005

erstellt am: 19. Jun. 2011 17:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von mkkk an!   Senden Sie eine Private Message an mkkk  Schreiben Sie einen Gästebucheintrag für mkkk

Beiträge: 105
Registriert: 04.03.2005

erstellt am: 20. Jun. 2011 08:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Jan Boettcher 10 Unities + Antwort hilfreich

Deine Feldvariable sind vom falschen Typ.
vOrder, vDim, ... müssen vom Typ Double sein, so stehts in der API-Hilfe.
Mag sein, das hierbei Deine Probleme auftauchen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mkkk
Mitglied



Sehen Sie sich das Profil von mkkk an!   Senden Sie eine Private Message an mkkk  Schreiben Sie einen Gästebucheintrag für mkkk

Beiträge: 105
Registriert: 04.03.2005

erstellt am: 20. Jun. 2011 08:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Jan Boettcher 10 Unities + Antwort hilfreich

Nee, habe mich verlesen.
Typ 'int' muss korrekt sein.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz