| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | |  | SOLIDWORKS Flow Simulation, ein Seminar am 11.08.2025
|
Autor
|
Thema: API: Linenanfang in Skizze (1803 mal gelesen)
|
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 05. Aug. 2008 10:51 <-- editieren / zitieren --> Unities abgeben:         
Guten Tag! Ich habe eine Frage: Kann ich per API aus einer selektierten Skizze den Anfangspunkt, einer nicht geschlossenen Skizzenkontur, herausfinden? Was ich kann ist, ich kann die Anfangs- und Endpunkte aller Linien herausfinden. Das bringt mir aber nichts, denn ich muss eine Ebene (per CreatePlanePerCurveAndPassPoint3 sollte das keine grosse Sache sein, denke ich jetzt mal!) auf die Erste Linie (kann auch ein Bogen oder Spline sein) erstellen. Die Kontur der Skizze ist zu 99% nicht geschlossen, sollte diese aber aus irgend einem Grund geschlossen sein, kann ich einfach irgend eine Linie auswählen und deren Startpunkt benutzen - das ist einfach. Das funktioniert auch. (und sobald ich mal herausgefunden habe, wie ich den Name der Linie auch noch herausfinden kann, kann ich auch noch eine Ebene darauf erstellen!). Hat mir jemand, bitte, einen Ansatz, wie ich das angehen soll? Ich stehe nun wirklich auf dem Schlauch. Was ich möchte, kurz zusammengefasst: Eine Skizze auswählen, Start drücken, und eine Ebene auf dem Anfangspunkt einer Skizzenkontur durch Anfangspunkt und Anfangslinie wird automatisch erstellen. Vielen Dank für alle Ideen! ------------------ http://www.worldcommunitygrid.org Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stevieda Mitglied Dipl.-Ing.
 
 Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 05. Aug. 2008 11:29 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Hallo, Mir ist nicht bekannt, dass solch eine Funktion existiert, die generell einen Anfangspunkt eines Polygonzugs ermittelt. Es gibt zwar die Methode Sketch::GetPolylines aber leider ist in der Hilfe nicht dokumentiert, was man jetzt noch damit machen kann. Je nachdem wie in SWX Polylines definiert sind, könnte man evtl. ja auch noch mit Hilfe von Sketch::GetPolyLineCount die Anzahl der Punkte bestimmen. Wenn SWX eine Polylinie richtig erkennt, dann dürften auch die Punkte nicht doppelt gezählt werden, die übereinander liegen wenn zwei Elementendpunkte koinzident sind. Ist also der Polygonzug geschlossen, dann müsste es (mit n = Anzahl der Skizzenelemente) n Punkte geben. Ist er nicht geschlossen, dann müsste es n+1 Punkte geben. -------------------------------- Nachtrag: Das ist die Definition von Sketch::GetPolyLineCount Description: This method gets the number of polylines in this sketch. Syntax (OLE Automation) retval = Sketch.GetPolyLineCount ( PointCount) Output: (long*) PointCount Number of points in this sketch (<--- das hier meinte ich zur Ermittlung der Punkte) Return: (long) retval Number of polylines in this sketch -------------------------------- Wäre es nicht auch denkbar jedes Skizzenelement durchzulaufen und Punkte zu vergleichen? Also Voraussetzung ist meiner Meinung nach, dass ich in der Skizze nicht allzu viele Elemente habe (Performance!). Dann müsste ich wirklich jedes Skizzenelement durchlaufen und den Startpunkt mit jedem anderen Punkt vergleichen. Irgendwann müssten zwei Punkte übrigbleiben, die keinen Partner haben. Einer ist der Startpunkt, der andere der Endpunkt. Wäre das etwas?
------------------ Gruß, Stevie [Diese Nachricht wurde von stevieda am 05. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jens_oliver Mitglied Softwareentwickler
 
 Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 05. Aug. 2008 11:30 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Hi, du kannst mit 1) SketchSegment.GetCurve ( ) und 2) Curve.GetEndParams ( &start, &end, &isClosed, &isPeriodic ) und 3) Curve.Evaluate2 ( Parameter, NumberOfDerivatives ) alle Start- und Endpunkte der Skizzenelemente bestimmen. Gruß Oliver ------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 05. Aug. 2008 13:17 <-- editieren / zitieren --> Unities abgeben:         
|
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 05. Aug. 2008 13:19 <-- editieren / zitieren --> Unities abgeben:         
jens_oliver, Ja, soweit bin ich auch schon. Bringt mir nur leider nichts. Da ich nicht weiss, welches der Linien meine erste ist und welcher Punkt (0 oder 1) nun der Anfangspunkt ist. Ich habe mal eine Linie umgedreht und siehe da - Endpunkt war nun Anfangspunkt und der war mitten in meiner Polyline. :-\ ------------------ http://www.worldcommunitygrid.org Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 05. Aug. 2008 14:52 <-- editieren / zitieren --> Unities abgeben:         
|
jens_oliver Mitglied Softwareentwickler
 
 Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 05. Aug. 2008 16:16 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
irgendwie verstehe ich den Code nicht. Nimmst du jetzt nicht einfach den punkt, der im globalen Koordinatensystem den kleinsten x-wert hat? bei einer offenen kontur gibt es zwei punkte, die in allen sketchelementen nur einmal vorkommen. alle anderen punkte sind doppelt. man kann also eine schleife über alle skizzenelement programmieren und dann die beiden punkte (start und end) mit allen anderen punkten der andere skizzenelemente vergleichen. dabei wird es halt genau zwei punkte geben die nur in einem skizzenelement vorkommen. welcher davon nun der gewünschte start bzw. endpunkt ist, kann man damit zwar nicht bestimmen, aber immerhin grenzt mam das ergebnis auf zwei ein. wenn man die punkte (start und end eines skizenelementes, nicht der kontur) über die "Curve" berechnt, muss man halt nicht für jeden type eine eigene funktion schreiben. hoffe hab nicht schon wieder nur bekanntes geschrieben. Gruß Oliver ------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de [Diese Nachricht wurde von jens_oliver am 05. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 05. Aug. 2008 16:46 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von jens_oliver:
irgendwie verstehe ich den Code nicht. Nimmst du jetzt nicht einfach den punkt, der im globalen Koordinatensystem den kleinsten x-wert hat?
Jaja ... nörgel, nörgel!!!  Probleme habe ich breits schon damit! Ja, leider kann ich nicht von 100 Linien, Bögen etc. alle Anfangs- und Endpunkte miteinander vergleichen bis ich nur noch 2 übrig habe, welche nur einmal vorkommen. Dafür fehlts mir leider an Verständnis, wie ich ein solches Problem angehen soll - ist in dem Moment nicht mehr wirklich ein SolidWorks Problem... Das Makro geht alle Elemente einzeln durch, Bögen, Splines, Linien... und gibt mir XYZ von Anfangs- und Endpunkte aus. Wie kann ich die alle miteinander vergleichen und aussortieren? ------------------ http://www.worldcommunitygrid.org Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jens_oliver Mitglied Softwareentwickler
 
 Beiträge: 114 Registriert: 28.06.2005
|
erstellt am: 05. Aug. 2008 17:08 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
bei den punkten einfach die einzelnen werte vergleichen. allerdings immer mit einer genauigkeit.
Code: beispiel in C# (kein VB) public static bool arePointsEqual(Point p1,Point p2) { double acc=0.00000001; if ( Math.Abs(p1.x-p2.x)>acc) { return(false); } if ( Math.Abs(p1.y-p2.y)>acc) { return(false); } if ( Math.Abs(p1.z-p2.z)>acc) { return(false); } return(true); }
schleifen über die skizzenelemente Code: for i=0 to anzahl sketchelemente punkt p1=startpunkt von sketchelemen(i) punkt p2= endpunkt von sketchelement(i) foundstartpunkt=false foundendpunkt=false for j=0 to anzahl sketchelemente if i=j continue (die gleiche will man jan icht beachten) else punkt p3=startpunkt von sketchelemen(j) punkt p4= endpunkt von sketchelement(j) if p1=p3 oder p1=p4 (Koordinaten vergleichen!!) foundstartpunkt=true endif if p2=p3 oder p2=p4 foundendpunkt=true endif endif next j if foundstartpunkt=false then punkt gefunden endif if foundendpunktpunkt=false then punkt gefunden endifnext i
gruß ------------------ Software nach Maß für Ihr CAD-System www.ib-knepper.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stevieda Mitglied Dipl.-Ing.
 
 Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 05. Aug. 2008 17:25 <-- editieren / zitieren --> Unities abgeben:          Nur für G. Dawg
Du könntest Dir für jeden Typ eines Skizzenelements ein Feld anlegen. Also z.B. vLines, vArcs, vSplines, etc. Dort speicherst Du die Skizzenelemente ab, die Du ja abfragen kannst. Jetzt könntest Du Dir ja noch ein Feld für den Kurvenzug erstellen. Wenn Du nur den Start- oder Endpunkt suchst: Alle Punkte jedes Skizzenelements durchgehen und in der Kurvenzugliste abspeichern. Am Ende überprüfen welcher Eintrag nur einmal vorkommt. Falls keiner --> geschlossener Kurvenzug. Ich bin kein Informatiker, insofern sollte evtl. ein Programmierer meinen Vorschlag noch mal kritisch überprüfen. ------------------ Gruß, Stevie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 06. Aug. 2008 09:06 <-- editieren / zitieren --> Unities abgeben:         
jens_oliver, ich werde Dein Vorschlag mal verarbeiten. Muss mal den Code zuerst studieren... Da mein Progi zuerst die Linien, dann die Bogen usw. verarbeitet, muss ich das alles zuerst in einen Array murksen  ....ich muss mir da mal gründlich überlegen, wie ich das angehen soll.... Trotzdem, vielen Dank schon mal! ------------------ http://www.worldcommunitygrid.org Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
G. Dawg Ehrenmitglied V.I.P. h.c. Teamleiter FEM Simulation

 Beiträge: 2622 Registriert: 12.07.2004 SolidWorks_2o2o SP3.o Win10_x64, Quadro_P2ooo. VisualStudio_2o19_Pro. FEM: Forge_NxT_HPC, ANSYS_WB. 3D-Printer: Ultimaker_2, Tinker_Gnome.
|
erstellt am: 08. Aug. 2008 11:24 <-- editieren / zitieren --> Unities abgeben:         
So, endlich geschafft!! AArray = Alle meine Punkte aus Splines, Ellipsen, Linen und Bogen Als String "28.6146016085536, 12, -17.9294351218192" zusammengesetzt.
Code: x = 1 For x = LBound(AArray) To UBound(AArray) found = True StartPoint = AArray(x) For Y = LBound(AArray) To UBound(AArray) 'Debug.Print AArray(Y) If x <> Y Then If StartPoint = AArray(Y) Then found = False GoTo ende2 End If End If Next Y If found = True Then Debug.Print " " Debug.Print "### Unique: " & StartPoint Debug.Print "####################################################################" GoTo Ende End If ende2: Next x Ende:
Und wenn nichts gefunden wurde (Kontur geschlossen), wird der letzte Punkt auseinander genommen. StartPoint enthält dann zum Schluss soetwas: "28.6146016085536, 12, -17.9294351218192" Welches ich dann per "," explodiere und auch richtig als X, Y, Z verwenden kann. Wie immer: Danke an HenryV und allen anderen die geholfen haben!!! ------------------ http://www.worldcommunitygrid.org Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |