| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Innovationstag mit SolidCAM und Plogmann bei HEDELIUS in Meppen |
Autor
|
Thema: Zeiger auf Fläche über den Namen! (771 mal gelesen)
|
Jens S. Mitglied Dipl.-Ing.
Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 23. Feb. 2005 16:29 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich stehe vor einen Problem. Ich versuche eine Fläche mit der Funktion GetEntityByName zu verzeigern. Jedoch ohne Erfolg. Ich habe der Fläche bereits einen Namen gegeben, aber irgendwie will es nicht funktionieren. Eine manuelle Selektion über den SelectionManager funktioniert, jedoch möchte ich dies automatisch, ohne vorheriges anklicken der Fläche, erreichen. Im zweite Schritt möchte ich dann über den gesetzten zeiger den Flächeninhalt auslesen. Hat jemand eine Idee? Freue mich über jeden Tipp!!! Gruß JENS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
d_b Mitglied vorhanden
Beiträge: 88 Registriert: 15.03.2001 42
|
erstellt am: 23. Feb. 2005 17:54 <-- editieren / zitieren --> Unities abgeben: Nur für Jens S.
Hallo Jens, so sollte es klappen bei einem offenen Part mit einer Fläche, die "fx" heisst : ---------------------------CUT Option Explicit Dim swApp As Object Dim Part As Object Sub main() Dim entx As Face2 Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc If Part Is Nothing Then Exit Sub Part.ClearSelection Set entx = Part.GetEntityByName("fx", 2) If Not entx Is Nothing Then entx.Select2 False, 0 MsgBox "Fläche: " & entx.GetArea & " qm" End If End Sub ------------------------CUT Gruß, d_b Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens S. Mitglied Dipl.-Ing.
Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 24. Feb. 2005 10:09 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielen Dank für die super schnelle Antwort!! Ich habe es ausprobiert und es funktioniert tadelos! Mein Fehler war folgender gewesen: Part.GetEntityByName("Name der Fläche, swSelFACES) Das swSelFACES ist durch eine 2 zu ersetzen! Warum dass so ist, weiss ich nicht. In der API steht da "nix"zu drin! :-) Zumindest habe ich es nicht gefunden. An dieser Stelle nocheinmal vielen DANK! Gruß JENS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
d_b Mitglied vorhanden
Beiträge: 88 Registriert: 15.03.2001 42
|
erstellt am: 24. Feb. 2005 10:46 <-- editieren / zitieren --> Unities abgeben: Nur für Jens S.
Hallo Jens, swSelFACES ist eine Konstante mit dem Wert 2, die nur dann definiert ist, wenn die "SolidWorks Constant type library" in das Makro eingebunden wird: Haken bei -> VBA-Editor->Tools->References. Weiterhin sollte man immer Option Explicit in der 1. Zeile benutzen, damit man Fehlermeldungen bei nicht definierten Konstanten bzw. Variablen bekommt. Gruß, d_b [Diese Nachricht wurde von d_b am 24. Feb. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens S. Mitglied Dipl.-Ing.
Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 24. Feb. 2005 12:31 <-- editieren / zitieren --> Unities abgeben:
Mahlzeit :-) Aha, danke für die Info! :-) Also, da ich mich erst 2,5 Wochen mit der API von Solidworks und VB6 beschäftige, sei mir folgende Frage gestattet: Bei einer reinen Makroprogrammierung ist die Geschichte mit "Option Explicit" umsetzbar, aber wie sieht es aus, wenn ich das nicht über ein Makro sondern ein externes VB6-Tool verwenden möchte? Zudem habe ich natürlich dann auch Probleme "DIM entx as Face2" zu definieren. In der API machen die das aber immer ganz gerne so, was ich natürlich dan nicht umsetzen kann. (Noch nicht :-)) Lieben Gruß JENS (bald ist Wochenende) :-)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kalle Mitglied Student
Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 25. Feb. 2005 06:46 <-- editieren / zitieren --> Unities abgeben: Nur für Jens S.
Aheu Jens, einerseits kannst Du allen Objekten die Deklaration 'DIM entx As Object' verpassen. Oder du kannst, um auf die SolidWorks Geschichten direkt zugreifen zu können, unter Projekt/Verweise die SolidWorks Type Libraries mit einbinden. Dann stehen Dir solche Sachen wie 'DIM entx as SldWorks.Face2' zur Verfügung. Die zweite Variante bringt auch dahingehend was, als dass Du dann in der VB-Oberfläche im Objektbrowser (F2 drücken) die SolidWorks eigenen Sachen angezeigt kriegst und auch IntelliSense damit arbeiten kann (d.h., dass mögliche Eigenschaften oder Methoden in diesem kleinen Auswahlfenster angezeigt werden, in dem z.b. auch bei Textfeldern dann die Sachen wie .Text usw. angezeigt werden). Ich hoffe, das war jetzt nicht zu verwirrend, ich bin noch nicht richtig wach (schau halt mal jemand auf die Uhr ). Bis dann, Kalle ------------------ ----------------------------------------- Es gibt immer mehr Lösungen als Probleme. [Diese Nachricht wurde von Kalle am 27. Feb. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens S. Mitglied Dipl.-Ing.
Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 28. Feb. 2005 10:10 <-- editieren / zitieren --> Unities abgeben:
Moin Jungs, Kalle, ich habe deine Antwort gelesen :-) Danke für die Info. Ich glaube, ich brauche nur noch wenige Wochen, um sie zu verstehen :-) Habe schon einige sehr gute Tipps von Euch allen verwerten können! Leider bin ich selber NOCH nicht in der Lage anderen Benutzern aus diesem Forum Helfen zu können, aber ich arbeite dran! Trotzdem noch eine Frage: Besteht die Möglichkeit bei einem Maus-Klick auf einen Punkt (der vorher definiert auf ein Modell gegeben wurde) diesen automatisch in eine VB-Tool zu importieren? Dabei meine ich nicht, das ich erst das Tool anwerfen muss um den Punkt auszulesen, sondern, dass dieser "automatisch" an mein Tool gesendet wird. So nach dem Motto, das mein Tool auf eine Punkt-Koordinaten-Übergabe von SolidWorks warte! Lieben Gruß JENS PS: Wünsche allen einen guten Wochenstart!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kalle Mitglied Student
Beiträge: 706 Registriert: 14.04.2002
|
erstellt am: 28. Feb. 2005 11:38 <-- editieren / zitieren --> Unities abgeben: Nur für Jens S.
Aheu Jens, du kannst dein Tool im Hintergrund laufen lassen und das PartDoc Event 'ModifyNotify' nutzen (in Baugruppen und Zeichnungen ist es komischerweise NewSelectionNotify). Das schickt dann Deinem Tool die Nachricht, dass irgendetwas selektiert worden ist. Was Du dann mit dieser Information anstellst ist dann Deine Sache. Dazu deklarierst Du Dim swApp As SldWorks.SldWorks Dim Model As SldWorks.ModelDoc2 Dim WithEvents Part As SldWorks.PartDoc Dim WithEvents Assy As SldWorks.AssemblyDoc Part und Assy kriegen ihre zuweisungen wie gewohnt (musst jetzt halt je nach Art des offenen Dokumets das richtigen nehmen - Fallunterscheidung mittles Model.GetType siehe API-Hilfe) Weiterhin gibt's dann in Deinem Programm die FUNKTIONEN (keine Subs!) Private Function Part_ModifyNotify() As Long und Private Function Assy_NewSelectionModify() As Long (und hier musst Du dann mit der Selektion arbeiten) Ich hoffe das hilft Dir etwas weiter. Ich kann keine 100%ige Garantie auf die Richtigkeit meiner Angaben geben, da ich bisher auch nur ein einziges Mal mit Events gearbeitet habe und meine etwas anderes gemacht haben. Ich hab mich aber an meinem alten Programm orientiert (zu finden unter [URL}http://ww3.cad.de/foren/ubb/Forum2/HTML/006719.shtml[/URL]) Da kannst Du auch mal reinschauen. Leider hat die API-Hilfe meines Wissens nach kein Beispiel für die Event-Geschichten, aber auf der Solidworks homepage habe ich mal irgendwo ein Beispielprogramm gefunden, welches alle möglichen Events abfängt und infos drüber ausgibt. Vielleicht findest Du es (irgendwo im API/Downloadbereich). Bis dann, Kalle ------------------ ----------------------------------------- Es gibt immer mehr Lösungen als Probleme. [Diese Nachricht wurde von Kalle am 28. Feb. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens S. Mitglied Dipl.-Ing.
Beiträge: 55 Registriert: 23.02.2005
|
erstellt am: 01. Mrz. 2005 11:27 <-- editieren / zitieren --> Unities abgeben:
Hallo Leuts, danke Kalle für deine Info. Jetzt weiss ich zumindest schon einmal, wo nach ich suchen muss :-) Auch wenn Ihr mich im Moment VB6/API-mässig intellektuell überfordert :-) Aber man wächst ja mit den Ansprüchen! Gruß an ALLE! JENS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |