| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Technikerschüler der staatlichen Feintechnikschule Schwenningen zu Besuch bei SolidCAM GmbH in Schramberg |
Autor
|
Thema: Makro Block einfügen (1822 mal gelesen)
|
remtc Mitglied
Beiträge: 34 Registriert: 18.09.2017 Solidworks Prof. 2023SP3 x64 auf Win 10
|
erstellt am: 17. Jul. 2019 11:57 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich steh (mal wieder) vor einem Problem bei der Programmierung von einem Makro in Solid works. mein Makro soll eine Kombination aus annotation (myNote) und einem Block aus dem Sketchmanager an einem von der Maus gesezten Punkt erzeugen... dies funktioniert bei einem leeren Blatt mit Rahmen ohne Probleme. Wenn eine Zeichenansicht (View) bei dem makro durch die Maus aktiviert wird, wird die Annotation richtig gesetzt jedoch nicht der Block - dieser verschwindet in der Pampa. ich bin mit meinem latein am Ende. gibt es die Möglichkeit die view-Aktivierung zu ignorieren oder das Koordinatensystem der View zu ignorieren und immer das Koordsystem des Blattformates zu benutzen? oder ein Setpositon des "MakeSketchBlockFromFile" ohne mathPoint (ich vermute da liegt die Krux)? oder irgendwas anderes? Code: If UserForm1.OptionButton7.Value = True Then zaehler = 7 X_ = X + 0.00525 Y_ = Y + 0.0095 End If 'Debug.Print zaehler 'Debug.Print nenner Angle_user = nenner * zaehler If Not myNote Is Nothing Then myNote.Angle = 0 boolstatus = myNote.SetBalloon(0, 0) Set myAnnotation = myNote.GetAnnotation() pt(0) = X pt(1) = Y pt(2) = 0 Set swMathUtil1 = swApp.GetMathUtility 'Debug.Print "-------------------" 'Debug.Print "ix: " & ix 'Debug.Print "iy: " & iy 'Debug.Print "X: " & X 'Debug.Print "Y: " & Y 'Debug.Print "Z: " & Z 'Debug.Print "-------------------" If Not myAnnotation Is Nothing Then longstatus = myAnnotation.SetLeader2(False, 0, True, False, False, False) boolstatus = myAnnotation.SetPosition(X_, Y_, Z) Dim vAttachPos As Variant Dim vAnnPos As Variant vAttachPos = myNote.GetAttachPos vAnnPos = myAnnotation.GetPosition Debug.Print " Layer = " & myAnnotation.Layer Debug.Print " AttachPos = (" & vAttachPos(0) * 1000# & ", " & vAttachPos(1) * 1000# & ", " & vAttachPos(2) * 1000# & ") mm" Debug.Print " AnnPos = (" & vAnnPos(0) * 1000# & ", " & vAnnPos(1) * 1000# & ", " & vAnnPos(2) * 1000# & ") mm" Set swMathPoint = swMathUtil1.CreatePoint((pt)) Set newBlockDefinition = swModel.SketchManager.MakeSketchBlockFromFile(swMathPoint, "F:\Solidworks\Vorlagen\Macros\Sicherheitskopie\stempel\stempel.SLDBLK", False, 1, Angle_user) 'http://help.solidworks.com/2014/English/api/sldworksapi/Get_Names_of_Sketch_Segments_Example_VB.htm 'der Sketchmanger skizziert nach falschen koordinaten? boolstatus = myAnnotation.SetTextFormat(0, True, myTextFormat) End If End If
ich wäre für jede Hilfe dankbar! Grüße remtc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
swx-cad-nutzer Mitglied Konstr
Beiträge: 411 Registriert: 15.06.2011 SWX 2023 SP 4.0 64 bit
|
erstellt am: 17. Jul. 2019 12:06 <-- editieren / zitieren --> Unities abgeben: Nur für remtc
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 17. Jul. 2019 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für remtc
Hallo, mit "Block aus dem Sketchmanager" meinst du doch eine Skizze als Block? Wieso trennst du eigentlich die Beschriftung und den Block oder hab ich das nur falsch verstanden? Hast du dir schon mal überlegt das Symbol (falls es nicht zu komplex ist) in die gtol.sym mit aufzunehmen, für wirklich häufig verwendete Symbole hatte ich das in meiner alten Firma so gemacht? Vorteil das man diese auch einfach in Texten verwenden kann. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
remtc Mitglied
Beiträge: 34 Registriert: 18.09.2017 Solidworks Prof. 2023SP3 x64 auf Win 10
|
erstellt am: 17. Jul. 2019 12:48 <-- editieren / zitieren --> Unities abgeben:
Hallo SWX -cad-nutzer, bei dem verlinkten Problem geht es leider nicht um unabhängige Positionierung der Blöcke. Ich möchte sowohl auf dem Blattformat als auch in der Zeichnungsansicht den selben Block einfügen. Hallo bernd, ich betrachte text und Block voneinander getrennt, weil der Text im laufe der Programmierung hochgezählt wird. Und der Block ist tatsächlich nicht besonders umfangreich ein paar Linien 2 kreise und ein gefüllter Bereich - dadurch lässt sich der Block auf verschieden Layer mit unterschiedlichen Farben legen. Nein mit der gtol.sym hatte ich bisher noch nichts am Hut. Aber da wir mit 4 Rechnern im Netzwerk auf das Makro zugreifen werden dachte ich wäre sinnvoll es mit einem Block zu lösen. grüße remtc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 17. Jul. 2019 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für remtc
Hallo, die gtol.sym (Symbolbibliotheksdatei) kann auch auf einem Netzlaufwerk liegen und gemeinsam verwendet werden aber da du einen gefüllten Bereich hast ist die Variante über die gtol.sym hierfür uninteressant. Für das Hochzählen kannst du doch die Beschriftung auch in den Block packen diese Beschriftung dann als Block-Attribut definieren und entsprechend hochzählen. Mit SetAttributeValue Method (ISketchBlockInstance) kannst du den Wert des Attribut setzen. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht ---
Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 17. Jul. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
remtc Mitglied
Beiträge: 34 Registriert: 18.09.2017 Solidworks Prof. 2023SP3 x64 auf Win 10
|
erstellt am: 17. Jul. 2019 13:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, Zitat: Für das Hochzählen kannst du doch die Beschriftung auch in den Block packen diese Beschriftung dann als Block-Attribut definieren und entsprechend hochzählen. Mit SetAttributeValue Method (ISketchBlockInstance) kannst du den Wert des Attribut setzen.
dann wird aber der Text ebenfalls auf den farbigen Layer gelegt? jedoch wird mein Hauptproblem (Blockeinfügepunkt im Viewkoordinatensystem zu Blockeinfügepunkt im Rahmenkoordinatensystem) nicht gelöst... der Block in dem die "01" drin steht wurde als erstes neben der Ansicht eingefügt, der Block und die "02" wurden in der Zeichenansicht eingefügt. grüße remtc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 813 Registriert: 18.05.2005 SolidWorks 2022 x64 SP5.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 22H2 Microsoft 365 E5 Microsoft Visual Studio Enterprise 2022
|
erstellt am: 17. Jul. 2019 15:23 <-- editieren / zitieren --> Unities abgeben: Nur für remtc
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 17. Jul. 2019 15:54 <-- editieren / zitieren --> Unities abgeben: Nur für remtc
Hallo, die Frage ist wo die Blöcke liegen sollen, auf der aktivierten Ansicht oder auf dem Blatt, weil wenn sie grundsätlich auf dem Blatt liegen sollen könntest du als ersten Schritt einfach das "Blatt" als aktive Ansicht setzen, wenn dass der Fall ist sollte eigentlich die Umrechnung der Globalen in die Ansichts-Koordinaten entfallen. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
remtc Mitglied
Beiträge: 34 Registriert: 18.09.2017 Solidworks Prof. 2023SP3 x64 auf Win 10
|
erstellt am: 18. Jul. 2019 07:54 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, tatsächlich wäre es mir am liebsten wenn die Kombination aus Block und Text sich in der Zeichnungsansicht befindet. so lässt sich das Gesamtpaket bei Bedarf verschieben. Wenn es jedoch nicht möglich wäre wäre ich auch mit dem Rahmen zufrieden. Das gemeine ist aber das die Ansicht erst aktiviert wird wenn ich mit der Maus darüber fahre und klicke. Ebenso wäre es Möglich das sich 2 oder mehrere Ansichten der selben Baugruppe auf einem Blatt befinden und dadurch auch separiert werden müsste... :/ was ich benötigen würde wäre also ein Code der sagt Code: Wenn Ansicht durch Maus aktiviert wurde Nullpunkt der aktivierten Ansicht befindet sich auf Koordinate XY des Rahmens XY koordinate der Maus im Blattformat sind hier XYkoordinate Blattformat zu XY Koordinate Zeichenansicht umrechnen Block und Text setzen
Grüße remtc Hallo Andreas beide deiner Links verweisen auf das gleiche Dokument und es steht direkt drüber
Zitat: "This property is a get-only property. Set is not implemented. "
Grüße remtc
[Diese Nachricht wurde von remtc am 18. Jul. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 18. Jul. 2019 08:38 <-- editieren / zitieren --> Unities abgeben: Nur für remtc
Hallo, wie wäre es den wenn du dir als ersten Schritt alle Ansichtspositionen holst und dann deine aktuelle Mausposition mit den Ansichtspositionen vergleichst und die Ansicht die am nähesten an der Mausposition dran ist aktivierst und entsprechend die Umrechnung machst. 1. Ansichten Traversieren und Positionen holen 2. Prüfen welche Ansicht Type swDrawingSheet ist und welche Ansichten Position X=0 Y=0 haben. 3. Restlichen Ansichten mit Namen oder Count und Positionen in ein Arry schreiben (ohne die aus dem vorherigen Schritt) 4. Klickposition der Maus ermitteln 5. Klickposition über eine Schleife mit den Ansichtspositionen vergleichen 6. Nähste Ansicht aktivieren 7. Position entsprechend Umrechnen 8. Block und Beschreibungen einfügen Punkt 1. - 3. beim Initialisieren Punkt 4. - 8. im Maus Event Gruß Bernd
------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |