| | | 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
Beiträge: 62 Registriert: 15.07.2003
|
erstellt am: 29. Jul. 2004 21:41 <-- editieren / zitieren --> Unities abgeben:
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 SWX 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 API 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 API 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
Beiträge: 239 Registriert: 21.11.2001 SWX 2017x64-Edition SP 4.1
|
erstellt am: 04. Aug. 2004 08:39 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Ansgar Böttcher
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
Beiträge: 106 Registriert: 21.10.2003
|
erstellt am: 04. Aug. 2004 10:42 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Ansgar Böttcher
Hallo Ansgar und Andreas, zu Punkt 2 hätte ich folgenden Vorschlag. Code:
Option ExplicitDim 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
Beiträge: 239 Registriert: 21.11.2001 SWX 2017x64-Edition SP 4.1
|
erstellt am: 04. Aug. 2004 11:56 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Ansgar Böttcher
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 SWX 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
Beiträge: 67 Registriert: 25.11.2002
|
erstellt am: 05. Aug. 2004 09:41 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Ansgar Böttcher
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
Beiträge: 62 Registriert: 15.07.2003
|
erstellt am: 05. Aug. 2004 17:42 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 62 Registriert: 15.07.2003
|
erstellt am: 05. Aug. 2004 18:51 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 62 Registriert: 15.07.2003
|
erstellt am: 05. Aug. 2004 22:10 <-- editieren / zitieren --> Unities abgeben:
Hiho! Soweit so gut. Nun hab ich aber versucht mal, nen Halbkreis per API 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
Beiträge: 106 Registriert: 21.10.2003 Alibre Design Expert V26 Keyshot 11.2
|
erstellt am: 06. Aug. 2004 06:38 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Ansgar Böttcher
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
Beiträge: 62 Registriert: 15.07.2003
|
erstellt am: 06. Aug. 2004 15:37 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 106 Registriert: 21.10.2003 Alibre Design Expert V26 Keyshot 11.2
|
erstellt am: 09. Aug. 2004 06:35 <-- editieren / zitieren --> Unities abgeben: Nur für Stefan Ansgar Böttcher
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
Beiträge: 62 Registriert: 15.07.2003
|
erstellt am: 11. Aug. 2004 15:49 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|