Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Linenanfang in Skizze

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
  
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



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

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 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

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.


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

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 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 G. Dawg 10 Unities + Antwort hilfreich

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 SWXSolidWorks Polylines definiert sind, könnte man evtl. ja auch noch mit Hilfe von Sketch::GetPolyLineCount die Anzahl der Punkte bestimmen. Wenn SWXSolidWorks 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


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 05. Aug. 2008 11:30    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 G. Dawg 10 Unities + Antwort hilfreich

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



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

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 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

stevieda,
Vielen Dank für die Idee... ich werde dem mal nachgehen.

------------------

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



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

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 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

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



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

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 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


API_Linenanfang_in_Skizze_015720.txt

 
So... habe da mal was vorbereitet! 
Ist nicht schön, funktioniert aber zu meiner Zufriedenheit - bis jetzt! 

Wenn jemand einen anderen Vorschlag hat, oder etwas daran ändern möchte - nur zu!

------------------

http://www.worldcommunitygrid.org

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

jens_oliver
Mitglied
Softwareentwickler


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 05. Aug. 2008 16:16    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 G. Dawg 10 Unities + Antwort hilfreich

    

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



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

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 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

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


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

Beiträge: 114
Registriert: 28.06.2005

erstellt am: 05. Aug. 2008 17:08    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 G. Dawg 10 Unities + Antwort hilfreich

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
  endif

next 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.


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

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 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 G. Dawg 10 Unities + Antwort hilfreich

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



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

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 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

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



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

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 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

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 >>)

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