Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Name/ID Skizzenelemt und Skizze-DragDrop

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
  
Social Business Analyst liefert die Antworten auf Ihre wichtigsten geschäftlichen Fragen - natürlich in Echtzeit!
Autor Thema:  API: Name/ID Skizzenelemt und Skizze-DragDrop (1648 mal gelesen)
Stefan Ansgar Böttcher
Mitglied
Stundent und Hilfskraft in Konstr.Büro


Sehen Sie sich das Profil von Stefan Ansgar Böttcher an!   Senden Sie eine Private Message an Stefan Ansgar Böttcher  Schreiben Sie einen Gästebucheintrag für Stefan Ansgar Böttcher

Beiträge: 62
Registriert: 15.07.2003

erstellt am: 29. Jul. 2004 21:41    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

Hiho!

Ich bin beim Programieren auf zwei Probleme gestoßen, wofür ich leider keine Lösung im Forum oder auf der Examples-Seite, geschweige denn in der Doku gefunden hab:

(1)
Man kann ja in SWXSolidWorks eine Skizze öffnen, ein paar Skizzenelemente auswählen und dann Strg drücken und mit der Maus die selektierten skizzenelemente rüber in eine offene Skizze in einem anderen Teil ziehen. Das Ganze würde ich aber gerne per APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) machen. Wenn man allerdings mal einfach auf Aufnehmen drückt und das Ganze macht, so ist das aufgenommene Makro quasi leer! Part.EditCopy funktioniert genauso wenig, wie man das per Hand auch nicht mit Strg-C/V machen kann...
Weiß jemand, welche Methode man da verwenden muß?

(2)
Ich kann ja mit
boolstatus = Part.Extension.SelectByID("Line9", "SKETCHSEGMENT", -0.01138152336713, -0.01038719070744, 0.02176702600113, False, 0, Nothing)
ein Skizzenlement gezielt anwählen und dann damit was anstellen. Nun möchte ich aber gerne umgedreht wissen, welches SKETCHSEGMENT ich denn grade angewählt hab. D.h. ich zeichne per APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) ne Linie und möchte dann gesagt bekommen, daß das Line9 ist, damit ich damit dann weiterarbeiten kann. Z.B. die gerade gezeichnete Linie bemaßen und Beziehungen hinzufügen..
Ich hab da zwar nen paar Sachen gefunden, die was sein könnten, bin aber aus den Examples wie immer nicht besonders schlau geworden, bzw. funzt das nicht bei mir (vID = swSketchSeg.GetId, Set swFeat = swSelMgr.GetSelectedObject5())
Hat jemand sowas schonmal gemacht oder hat jemand nen Tipp für mich?


tööö
  Ansgar.

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

Rigobert
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 21.11.2001

SWX 2017x64-Edition SP 4.1

erstellt am: 04. Aug. 2004 08:39    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 Stefan Ansgar Böttcher 10 Unities + Antwort hilfreich

Hallo Ansgar,

ich verzweifle gerade an einem ähnlichen Problem. Hast Du mittlerweile eine Lösung gefunden, wie Du an die gewünschten Werte kommst ? Würde mich wirklich interessieren. Ich hab leider noch immer keinen Plan wie ich an irgendwelche Infos der Objekte kommen soll. Die Hilfe gibt´s nur selten und die Objekte verraten mir im Debugger leider auch nix.
Da war ACAD doch um einiges weiter.

Ich komm mir vor wie ein Detektiv nicht wie ein Programmierer.

Naja ,

trotzdem Gruß Andreas

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

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

JR
Mitglied
Konstrukteur


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

Beiträge: 106
Registriert: 21.10.2003

erstellt am: 04. Aug. 2004 10:42    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 Stefan Ansgar Böttcher 10 Unities + Antwort hilfreich

Hallo Ansgar und Andreas,
zu Punkt 2 hätte ich folgenden Vorschlag.
Code:

Option Explicit

Dim swApp  As SldWorks.SldWorks
Dim swPart As Object
Dim swItem As Object

Sub main()

  Dim vID   As Variant
  Dim sName As String
 
  ' SolidWorks
  Set swApp = Application.SldWorks
 
  ' Neues Bauteil erstellen (Pfad eventuell anpassen)
  Set swPart = swApp.NewDocument("c:\programme\solidworks\data\templates\Teil.prtdot", 0, 0, 0)
 
  ' Ebene oben auswählen
  swPart.Extension.SelectByID "Ebene oben", "PLANE", 0, 0, 0, False, 0, Nothing
 
  ' Neue Skizze einfügen
  swPart.InsertSketch2 True
  swPart.ClearSelection2 True
 
  ' Eine Linie erstellen
  Set swItem = swPart.CreateLine2(0, 0, 0, 0.05, 0.05, 0)
 
  ' ID's der Linie holen
  vID = swItem.GetId
 
  ' Typ des SketchSegments abfragen
  ' (Eigentlich nicht nötig, da es sich definitiv um eine Linie handelt)
  Select Case swItem.GetType
    Case swSketchLINE: sName = "Linie" & vID(1)
  End Select
 
  ' Name des Liniensegments ausgeben
  MsgBox sName
 
  ' Eine 2. Linie erstellen
  Set swItem = swPart.CreateLine2(0, 0, 0, 0.05, 0.05, 0)
 
  ' ID's der Linie holen
  vID = swItem.GetId
 
  ' Typ des SketchSegments abfragen
  ' (Eigentlich nicht nötig, da es sich  definitiv um eine Linie handelt)
  Select Case swItem.GetType
    Case swSketchLINE: sName = "Linie" & vID(1)
  End Select
 
  ' Name des 2. Liniensegments ausgeben
  MsgBox sName
 
  ' Skizze schließen
  swPart.InsertSketch2 True
 
End Sub


Meine Vermutung ist, dass die 2. ID von GetID() die Nummer hinter dem Objektnamen (z.B.: Linie) ist ???
Wenn dem so ist, muss man nur den Segmenttyp ermitteln und die entsprechende Bezeichnung (wie oben dargestellt) vor die Nummer setzen.

Ich hoffe es hilft euch schon mal weiter.

Gruss Jörn


[Diese Nachricht wurde von JR am 04. Aug. 2004 editiert.]

[Diese Nachricht wurde von JR am 04. Aug. 2004 editiert.]

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

Rigobert
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 21.11.2001

SWX 2017x64-Edition SP 4.1

erstellt am: 04. Aug. 2004 11:56    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 Stefan Ansgar Böttcher 10 Unities + Antwort hilfreich

Hallo Jörn,

Danke, das half schon mal ein ganzes Stück weiter.
Trotzdem irgendwie seltsam:

Für SelectbyID brauche ich den Namen, den Typ , die Koordinaten eigentlich alles außer der ID.

...und von einer Linie oder einem Punkt krieg ich keinen Namen rausgequetscht.Und eine sehr zweifelhafte ID.


Trotzdem Danke,


und irgendwann komm ich auch dahinter wie die anderen SWXSolidWorks programmieren. (Da muß doch ein Trick dahinter sein , oder viel Geduld)

Gruß Andreas

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

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

PASCAM
Mitglied
Diplom Informatiker


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

Beiträge: 67
Registriert: 25.11.2002

erstellt am: 05. Aug. 2004 09:41    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 Stefan Ansgar Böttcher 10 Unities + Antwort hilfreich

Hallo Ansgar,

Eine SkecthLinie ist ja auch ein SketchSegment und ein Sketchsegment kannst Du ja mit Select4 auch selektieren. Also wenn Du das Object schon  hast (weil Du es selber erzeugt hast), dann ist das eh die schnellste Möglichkeit.

Zu Deinem Problem 1:
Kopiere doch die ganze Skizze und lösche dann das wieder heraus, das Du nicht brauchst.

------------------
PASCAM Ralph Müller
Softwareentwicklung

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

Stefan Ansgar Böttcher
Mitglied
Stundent und Hilfskraft in Konstr.Büro


Sehen Sie sich das Profil von Stefan Ansgar Böttcher an!   Senden Sie eine Private Message an Stefan Ansgar Böttcher  Schreiben Sie einen Gästebucheintrag für Stefan Ansgar Böttcher

Beiträge: 62
Registriert: 15.07.2003

erstellt am: 05. Aug. 2004 17:42    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

Hiho!

Vielen Dank JR für den Tipp! Werde ich gleich mal ausführlich testen!

PASCAM> Kopiere doch die ganze Skizze und lösche dann das wieder heraus, das Du nicht brauchst.
Das will ich ja gerade nicht, weil es mir darauf ankommt, daß ich nicht immer für alle Austragungen jeweils ein Feature, sondern insgesamt nur eins haben will. Das bringt nämlich Performance-mäßig nen großen Vorteil. Was ich programmieren will, ist quasi nen teilweiser Ersatz für die tolle Feature-Palette. Und wenn ich da für jede Austragung oder so nen extra Feature wollte, dann kann ich gleich die FP benutzen...

Select4 hilft mir erstmal nichts, da ich erst z.b. mehrere Linien zeichnen muß, mir deren ID dabei merken muß, um dann die Linien in Beziehung zu setzen.

JRs Code geht da schon in genau die richtige Richtung. Werde berichten, was die Praxis sagt... 


töö
  Ansgar.

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

Stefan Ansgar Böttcher
Mitglied
Stundent und Hilfskraft in Konstr.Büro


Sehen Sie sich das Profil von Stefan Ansgar Böttcher an!   Senden Sie eine Private Message an Stefan Ansgar Böttcher  Schreiben Sie einen Gästebucheintrag für Stefan Ansgar Böttcher

Beiträge: 62
Registriert: 15.07.2003

erstellt am: 05. Aug. 2004 18: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

Hiho!

Hab jetzt JRs Code mal ausprobiert und es klappt!
Hier mal mein leicht abgewandelter Code (irgendweshalb funktionieren einige Sache bei mir so nicht. Das hatte ich auch schon öfter bei irgendwelchen Beispielpogrammen. Weiß jemand warum?)

Segmente auswählen und ne Beziehung setzen klappt dann auch ganz einfach...


----<snipp>-----


Dim swApp  As Object
Dim swPart As Object
Dim swItem As Object

Sub main()

  Dim vID  As Variant
  Dim sName1 As String, sName2 As String, vID1 As String, vID2 As String
 
  Dim retval
 
  ' Teil ist schon offen
 
  ' SolidWorks
  Set swApp = Application.SldWorks
  Set swPart = swApp.ActiveDoc
  boolstatus = swPart.Extension.SelectByID("Oben", "PLANE", 0, 0, 0, False, 0, Nothing)
 
  ' Neue Skizze einfügen
  swPart.InsertSketch2 True
  swPart.ClearSelection2 True

  ' Eine Linie erstellen
  Set swItem = swPart.CreateLine2(0, 0, 0, 0.05, 0.05, 0)

  ' ID's der Linie holen
  vID = swItem.GetId

  ' Name des Liniensegments ausgeben
  sName1 = "Linie" & vID(1)
  MsgBox sName1

  ' Eine 2. Linie erstellen
  Set swItem = swPart.CreateLine2(0, 0, 0, 0.05, -0.01, 0)

  ' ID's der Linie holen
  vID = swItem.GetId

  ' Name des 2. Liniensegments ausgeben
  sName2 = "Linie" & vID(1)
  MsgBox sName2

swPart.ClearSelection2 True
boolstatus = swPart.Extension.SelectByID(sName1, "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing)
boolstatus = swPart.Extension.SelectByID(sName2, "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing)
MsgBox "Selection"

swPart.SketchAddConstraints "sgPERPENDICULAR"
MsgBox "Beziehung gesetzt!"
  ' Skizze schließen
  swPart.InsertSketch2 True

End Sub

----<snipp>---

Und mein Dank und 10Us gehen an JR!


töö
Ansgar.

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

Stefan Ansgar Böttcher
Mitglied
Stundent und Hilfskraft in Konstr.Büro


Sehen Sie sich das Profil von Stefan Ansgar Böttcher an!   Senden Sie eine Private Message an Stefan Ansgar Böttcher  Schreiben Sie einen Gästebucheintrag für Stefan Ansgar Böttcher

Beiträge: 62
Registriert: 15.07.2003

erstellt am: 05. Aug. 2004 22:10    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

Hiho!

Soweit so gut. Nun hab ich aber versucht mal, nen Halbkreis per APIProgrammier- und Anwendungsschnittstelle (Application Programming Interface) zu zeichnen und egal wie ich es versuche, ich bekomme immer die Fehlermeldung "Objekt erforderlich". Weiß jemand rat?


Set swItem = swPart.CreateLine2(-0.05, 0.02, 0, -0.05, -0.03, 0)
Set swItem = swPart.CreateLine2(-0.03, 0.02, 0, -0.03, -0.03, 0)
funktionier noch...
Set swItem = swPart.CreateTangentArc(-0.05, 0.02, 0, -0.03, 0.02, 0)
oder
Set swItem = swPart.Create3PointArc(-0.05, 0.02, 0, -0.03, 0.02, 0, -0.04, 0.02, 0)
immer die Fehlermeldung...


töö
Ansgar.

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

JR
Mitglied
Konstrukteur


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

Beiträge: 106
Registriert: 21.10.2003

Alibre Design Expert V26
Keyshot 11.2

erstellt am: 06. Aug. 2004 06:38    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 Stefan Ansgar Böttcher 10 Unities + Antwort hilfreich

Moin Ansgar,
freut mich, dass es geklappt hat.
Bei  deinem obigen Beispiel erscheint die Fehlermeldung weil diese beiden Methoden kein Objekt, sondern einen boolschen Wert (True oder False) zurückliefern.

Code:

Dim bResult As Boolean
 
bResult = swPart.Create3PointArc(-0.05, 0.02, 0, -0.03, 0.02, 0, -0.04, 0.02, 0)
 
If bResult Then
  MsgBox "Ok"
Else
  MsgBox "Oops"
End If

Gruss Jörn

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

Stefan Ansgar Böttcher
Mitglied
Stundent und Hilfskraft in Konstr.Büro


Sehen Sie sich das Profil von Stefan Ansgar Böttcher an!   Senden Sie eine Private Message an Stefan Ansgar Böttcher  Schreiben Sie einen Gästebucheintrag für Stefan Ansgar Böttcher

Beiträge: 62
Registriert: 15.07.2003

erstellt am: 06. Aug. 2004 15:37    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

Hiho!

Ahso, stimmt...
Aber wie komme ich da dann an die ID? Hab in der Hilfe mal wieder nix gefunden...

Aber auch nochmal zurück zu meiner ganzanfänglichen Frage (1):
Ich bin da über den DragOperator in der Hilfe gestolpert. Allerdings bin ich mir nicht sicher, ob der dafür überhaupt anwendbar ist, da ich da ja nur Koordinaten und so angeben kann, aber kein Fenster oder so... Hat da jemand Erfahrung mit?


töö
  Ansgar.

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

JR
Mitglied
Konstrukteur


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

Beiträge: 106
Registriert: 21.10.2003

Alibre Design Expert V26
Keyshot 11.2

erstellt am: 09. Aug. 2004 06:35    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 Stefan Ansgar Böttcher 10 Unities + Antwort hilfreich

Hallo Ansgar,

Zitat:
Original erstellt von Stefan Ansgar Böttcher:

Aber wie komme ich da dann an die ID? Hab in der Hilfe mal wieder nix gefunden...

In dem Fall kommst Du wie folgt an die ID.

Code:

Dim swSelMgr as Object

...

' Auswahlmanager
Set swSelMgr = swPart.SelectionManager

...

' Wichtig !!
swPart.ClearSelection2 True
 
' Eine Linie erstellen
swPart.CreateLine2 0, 0, 0, 0.05, 0.05, 0
 
' Linie zuweisen (1. ausgewähltes Objekt)
Set swItem = swSelMgr.GetSelectedObject5(1)

' ID's der Linie holen
vID = swItem.GetId


Zu Punkt 1 kann ich leider gar nichts sagen 

Gruss Jörn

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

Stefan Ansgar Böttcher
Mitglied
Stundent und Hilfskraft in Konstr.Büro


Sehen Sie sich das Profil von Stefan Ansgar Böttcher an!   Senden Sie eine Private Message an Stefan Ansgar Böttcher  Schreiben Sie einen Gästebucheintrag für Stefan Ansgar Böttcher

Beiträge: 62
Registriert: 15.07.2003

erstellt am: 11. Aug. 2004 15:49    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

Hiho!

Vielen Dank JR!

zu (1): der apisupport sagt, daß der DragOperator nur für DragOperationen in einer Baugruppe da ist...

töö
  Ansgar.

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