| | |
 | MuM Multitool for Inventor , eine App
|
|
Autor
|
Thema: Schraffur editieren und/oder Eigenschaften kopieren (200 / mal gelesen)
|
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13824 Registriert: 02.04.2004 Inventor 2025.2.1 Windows 11
|
erstellt am: 19. Jul. 2026 20:38 <-- editieren / zitieren --> Unities abgeben:         
Moin! Die von Inventor automatisch gewählten Einstellungen von Schraffuren sind ja oft sehr unpassend, und als wäre das nicht schon schlimm genug, ist auch der Dialog zum Ändern von Schraffureigenschaften äußerst unkomfortabel. Meine Frage daher: sind die Eigenschaften von Schraffuren in idw mit VBA greifbar? Ich fände ein Makro sehr nützlich, mit dem zumindest die bereits mühsam eingestellten Eigenschaften einer Schraffur auf eine andere übertragen werden können (so wie es das bei Maßen schon im Standard gibt). Schick wäre natürlich auch, mit einem Klick einer Schraffur voreingestellte Eigenschaften zuweisen zu können.
------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
  
 Beiträge: 788 Registriert: 19.09.2007 Inventor Professional 2025 Win11
|
erstellt am: 21. Jul. 2026 13:08 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
|
KraBBy Mitglied Maschinenbau-Ingenieur
  
 Beiträge: 788 Registriert: 19.09.2007 Inventor Professional 2025 Win11
|
erstellt am: 24. Jul. 2026 11:48 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
Hi, nun habe ich etwas mehr Zeit investiert und etwas herum probiert. Das scheint nur halbherzig implementiert zu sein. Ich wollte die Schraffuren auswählen (manuell vom Benutzer) und diese dann automatisch manipulieren, z.B. "alle gleich, wie die zuletzt markierte". Nur dass die markierten Objekte im SelectSet auf Nothing zeigen. Da geht also nix. kann man auch hier lesen: https://forums.autodesk.com/t5/inventor-programming-forum/selectionfilterenum-filter-for-hatch-selecting-with-quot-pick/td-p/13902688 Der Workaround, der dort angerissen wird, ging mir aber jetzt zu weit. Vielleicht führt es zu etwas, wenn Du mal genauer beschreibst, was du jeweils einstellst. Man könnte alle Schraffuren einer gewählten Ansicht beackern. Hilft evtl. falls Du immer das Muster für alle gleich einstellst o.ä. - alle Schraffuren komplett gleich ist quatsch, das weiß ich. ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13824 Registriert: 02.04.2004 Inventor 2025.2.1 Windows 11
|
erstellt am: 24. Jul. 2026 14:34 <-- editieren / zitieren --> Unities abgeben:         
Moin! Und Danke schon mal fürs weitere Forschen. Das größte Problem ist, dass die automatisch gewählte Schraffur für meinen Geschmack immer zu weit ist. Kleine Schnittflächen sind oft gar nicht mehr als solche erkennbar, und auch bei größeren Flächen wäre oft eine engere Schraffur besser. Aber an die Grundeinstellung dieser Automatik kommt man ja nicht ran. Wenn es nun aber doch nicht möglich oder zu schwierig ist, eine einzelne Schraffur im VBA anzupacken, muss ich die Idee wohl begraben. Im Übrigen müssten nicht nur alle Schraffuren einer Ansicht getrennt einstellbar sein, sondern auch alle Schraffuren eines Bauteils, denn bei Multibodies gibt es auch mehrere einzelne Schraffuren.
------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
  
 Beiträge: 788 Registriert: 19.09.2007 Inventor Professional 2025 Win11
|
erstellt am: 24. Jul. 2026 19:12 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
Servus nochmal, ich könnte mir vorstellen, alle Abstände in einer Ansicht (oder auch in allen Ansichten?) mit einem festen Faktor zu skalieren, z. B. halbieren. Evtl besser als nix...? ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13824 Registriert: 02.04.2004 Inventor 2025.2.1 Windows 11
|
erstellt am: 24. Jul. 2026 21:45 <-- editieren / zitieren --> Unities abgeben:         
|
KraBBy Mitglied Maschinenbau-Ingenieur
  
 Beiträge: 788 Registriert: 19.09.2007 Inventor Professional 2025 Win11
|
erstellt am: 26. Jul. 2026 14:15 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
Servus Roland, wie bestellt Code: Option Explicit ' Declare PtrSafe Function GetKeyState Lib "user32" (ByVal vKey As Integer) As Integer ' gehört zu dem unteren Teil (Tastendruck erkennen) ' Public Sub scaleHatch() ' in der markierten Ansicht alle Hatch mit einem Faktor skalieren ' neuer Scale = alter Scale * Faktor f ' läuft auch für mehrere markierte Ansichten ' UMSCHALT-Taste: Faktor wird für alle auf 1 zurückgesetzt
Dim f As Double: f = 1 / Sqr(2) '0.7071 ' ### hier ggf. den Faktor anpassen 'beim Aufruf gedrückte Shift-Taste erkennen Dim bShift As Boolean If ShiftPressed Then bShift = True Else bShift = False Dim oDoc As DrawingDocument Set oDoc = ThisApplication.ActiveDocument 'falls das aktive Doc etwas anderes ist als "Drawing" gibts einen Fehler - nicht abgefangen Dim oSel As SelectSet Set oSel = oDoc.SelectSet If 0 = oSel.Count Then MsgBox "Es muss mindestens eine Ansicht ausgewählt sein!", vbInformation, "nix markiert - abgebrochen" Exit Sub End If ' Den Ablauf in eine einzige Rückgängig-Aktion packen (ansonsten 1 Aktion pro Hatch) Dim oTxnMgr As TransactionManager Set oTxnMgr = ThisApplication.TransactionManager Dim oTxn As Transaction 'Start oTxn Set oTxn = oTxnMgr.StartTransaction(ThisApplication.ActiveDocument, "Makro 'scaleHatch'") 'Deklarationen, die in den Schleifen gebraucht werden Dim obj As Object, oDrwView As DrawingView Dim oHatch As DrawingViewHatchRegion 'Schleife durch alle Objekte der Auswahl For Each obj In oSel If TypeOf obj Is DrawingView Then Set oDrwView = obj 'Schleife durch alle Schraffuren der Ansicht For Each oHatch In oDrwView.HatchRegions oHatch.[Scale] = oHatch.[Scale] * f 'eckige Klammern sind auf der linken Seite erforderlich If bShift Then oHatch.[Scale] = 1 'Besonderheit für Shift-Taste Next 'oHatch Else 'markiertes obj ist kein drawingView ' nix tun - es geht mit dem nächsten weiter End If Next 'obj ' If False Then ' 'vor einem ExitSub die Transaction abbrechen! ### falls das mal nötig wäre ' oTxn.Abort ' Exit Sub ' End If ' '... 'Rückgängig-Aktion abschließen oTxn.End End Sub Public Function ShiftPressed() As Boolean 'Returns True if shift key is pressed ShiftPressed = GetKeyState(vbKeyShift) < 0 ' 16 = vbKeyShift End Function Public Function StrgPressed() As Boolean 'Returns True if Ctrl/Strg key is pressed StrgPressed = GetKeyState(vbKeyControl) < 0 ' 17 = vbKeyControl End Function
gedachter Ablauf: Ansicht markieren (oder auch gleich mehrere), Makro "scaleHatch" ausführen. Damit werden alle Schraffuren der Ansicht(en) mit einem Faktor skaliert. Als Zugabe noch die Funktion, alle Schraffuren wieder auf 1 zu setzen. Dazu muss nur beim Makro-Start die Umschalt-Taste gedrückt sein. Ggf. wären noch weitere Varianten denkbar (mit Strg und Kombinationen daraus). ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13824 Registriert: 02.04.2004 Inventor 2025.2.1 Windows 11
|
erstellt am: 26. Jul. 2026 15:26 <-- editieren / zitieren --> Unities abgeben:         
Moin! Das ist ja nett, Danke! Hab's aber noch nicht ausprobiert. Dafür ist mir gerade vorhin etwas Anderes, aber vermutlich Verwandtes aufgefallen: Manchmal geschieht es, dass Schraffuren aus Versehen unsichtbar geschaltet werden (direkt unter "edit" steht "hide"). Die betroffene Schraffur ist dann nicht mehr anklickbar, und wenn Du das nicht schnell genug merkst, bleibt nur mehrfaches "zurück" als sehr unwillkommene Lösung. Frage daher (nur aus Neugier, keine Bestellung): Sind auch die unsichtbar geschalteten Schraffuren in dem Auswahlset enthalten und könnten also auf dem gleichen Weg sichtbar gemacht werden? Und noch mal zusammengefasst, damit ich es richtig verstehe: Nach derzeitigen Stand der Dinge, lassen sich auf diesem Weg nur alle Schraffuren einer Ansicht gemeinsam behandeln. ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! [Diese Nachricht wurde von Roland Schröder am 26. Jul. 2026 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13824 Registriert: 02.04.2004 Inventor 2025.2.1 Windows 11
|
erstellt am: 26. Jul. 2026 15:46 <-- editieren / zitieren --> Unities abgeben:         
So, jetzt auch Test: Mit dem "getKeyState" komme ich nicht klar. Die Eröffnung "Declare..." steht nach dem Einfügen in den VBA-Editor dann vor dem Public-Sub-Trennstrich, wird daher mit F5 nicht ausgeführt, und dann gibt es Mecker, wenn nachher "getKeyState" benutzt werden soll. Wenn ich die Public Sub alleine in den VBA-Editor einfüge, funktioniert es, allerdings dann natürlich nur in die eine Richtung. Die mit GetKeyState beabsichtigte Möglichkeit des Rückgängig-Machens finde ich sehr gut, würde es aber eher als Umkehr formulieren, also Faktor 1,4142, das erweitert dann die Nutzungsmöglichkeit des Tools auf Vergrößern des Schraffurabstandes (das könnte ja auch mal gewünscht sein). [später]: und noch ein Argument für Faktor 1,4142 statt Festwert 1 bei Shift: wenn bei besonders kleinen Flächen die Schraffur manuell enger gestellt worden ist, bleibt dieser Unterschied erhalten. Der Fall, die Schraffur weiter zu stellen, ergibt sich z. B. dann, wenn der Maßstab einer Ansicht geändert wird. ------------------ Roland www.Das-Entwicklungsbuero.de
It's not the hammer - it's the way you hit! [Diese Nachricht wurde von Roland Schröder am 26. Jul. 2026 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
  
 Beiträge: 788 Registriert: 19.09.2007 Inventor Professional 2025 Win11
|
erstellt am: 26. Jul. 2026 18:18 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
Der Code sollte funktionieren, wenn er als Ganzes ist ein eigenes Modul eingefügt wird. Kann natürlich sein, dass ich noch einen Fehler gemacht habe... Das "Option Explicit" ist dann ganz zu Beginn, gefolgt von "Declare ...". Die Subs kommen danach. Diese Reihenfolge ist gefordert. (Die Reihenfolge der Subs selbst ist nicht relevant.) Falls Du den Code in ein bestehendes Modul eingefügt hast, ist das evtl. der Grund für 'gemecker'. Das mit der Umschalt-Taste funktioniert übrigens nicht im VBA-Editor (zumindest habe ich das nocht nicht zustande bekommen). Ich lege mir den Befehl auf die IV-Benutzeroberfläche - kennst Du bestimmt. Zu den weiteren Wünschen / Ideen, wie wäre folgender Vorschlag? - Umschalt-Taste benutzt den Faktor Wurzel(2), also Abstände vergrößern
- Strg-Taste setzt den Wert auf 1 fest
- eigenes Sub für "showAllHatches". Wäre auch mittels Strg&Shift denkbar, wäre mir aber zu anders, als das ich das in den gleichen Befehl packen würde.
in die innere Schleife gehört dann
Code: oHatch.Visible = True 'oder etwas eleganter If not oHatch.Visible then oHatch.Visible = true
------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
  
 Beiträge: 788 Registriert: 19.09.2007 Inventor Professional 2025 Win11
|
erstellt am: 26. Jul. 2026 18:54 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
meinen Vorschlag umgesetzt Code: Option Explicit ' Declare PtrSafe Function GetKeyState Lib "user32" (ByVal vKey As Integer) As Integer ' gehört zu dem unteren Teil (Tastendruck erkennen) ' Public Sub scaleHatch() ' in der markierten Ansicht alle Hatch mit einem Faktor skalieren ' neuer Scale = alter Scale * Faktor f ' läuft auch für mehrere markierte Ansichten ' UMSCHALT-Taste: Kehrwert des Faktors wird benutzt ' STRG-Taste: Faktor wird für alle auf 1 zurückgesetzt
Dim f As Double: f = 1 / Sqr(2) '0.7071 ' ### hier ggf. den Faktor anpassen 'beim Aufruf gedrückte Shift- u. Strg-Taste erkennen Dim bShift As Boolean, bStrg As Boolean If ShiftPressed Then bShift = True Else bShift = False If StrgPressed Then bStrg = True Else bStrg = False ' bShift = True 'zum Testen im VBA-Editor, Zeilen einzeln ein/auskommentieren ' bStrg = True 'so wäre die Abzweigung in anderes Sub möglich ### auskommentiert ' If bShift And bStrg Then 'bei Strg UND Shift ' Call showAllHatches 'Sub aufrufen ' Exit Sub 'dann hier raus ' End If 'Faktor ggf. verändern If bShift Then f = 1 / f Dim oDoc As DrawingDocument Set oDoc = ThisApplication.ActiveDocument 'falls das aktive Doc etwas anderes ist als "Drawing" gibts einen Fehler - nicht abgefangen Dim oSel As SelectSet Set oSel = oDoc.SelectSet If 0 = oSel.Count Then MsgBox "Es muss mindestens eine Ansicht ausgewählt sein!", vbInformation, "nix markiert - abgebrochen" Exit Sub End If ' Den Ablauf in eine einzige Rückgängig-Aktion packen (ansonsten 1 Aktion pro Hatch) Dim oTxnMgr As TransactionManager Set oTxnMgr = ThisApplication.TransactionManager Dim oTxn As Transaction 'Start oTxn Set oTxn = oTxnMgr.StartTransaction(ThisApplication.ActiveDocument, "Makro 'scaleHatch'") 'Deklarationen, die in den Schleifen gebraucht werden Dim obj As Object, oDrwView As DrawingView Dim oHatch As DrawingViewHatchRegion 'Schleife durch alle Objekte der Auswahl For Each obj In oSel If TypeOf obj Is DrawingView Then Set oDrwView = obj 'Schleife durch alle Schraffuren der Ansicht For Each oHatch In oDrwView.HatchRegions oHatch.[Scale] = oHatch.[Scale] * f 'eckige Klammern sind auf der linken Seite erforderlich If bStrg Then oHatch.[Scale] = 1 'Besonderheit für Strg-Taste Next 'oHatch Else 'markiertes obj ist kein drawingView ' nix tun - es geht mit dem nächsten weiter End If Next 'obj ' If False Then ' 'vor einem ExitSub die Transaction abbrechen! ### falls das mal nötig wäre ' oTxn.Abort ' Exit Sub ' End If ' '... 'Rückgängig-Aktion abschließen oTxn.End End Sub Public Sub showAllHatches() ' in der markierten Ansicht werden alle Hatches auf sichtbar geschalten ' läuft auch für mehrere markierte Ansichten
' UMSCHALT-Taste: [keine Funktion] ' STRG-Taste: [keine Funktion] 'beim Aufruf gedrückte Shift- u. Strg-Taste erkennen ' Dim bShift As Boolean, bStrg As Boolean ' If ShiftPressed Then bShift = True Else bShift = False ' If StrgPressed Then bStrg = True Else bStrg = False
Dim oDoc As DrawingDocument Set oDoc = ThisApplication.ActiveDocument 'falls das aktive Doc etwas anderes ist als "Drawing" gibts einen Fehler - nicht abgefangen Dim oSel As SelectSet Set oSel = oDoc.SelectSet If 0 = oSel.Count Then MsgBox "Es muss mindestens eine Ansicht ausgewählt sein!", vbInformation, "nix markiert - abgebrochen" Exit Sub End If ' Den Ablauf in eine einzige Rückgängig-Aktion packen (ansonsten 1 Aktion pro Hatch) Dim oTxnMgr As TransactionManager Set oTxnMgr = ThisApplication.TransactionManager Dim oTxn As Transaction 'Start oTxn Set oTxn = oTxnMgr.StartTransaction(ThisApplication.ActiveDocument, "Makro 'showAllHatches'") 'Deklarationen, die in den Schleifen gebraucht werden Dim obj As Object, oDrwView As DrawingView Dim oHatch As DrawingViewHatchRegion 'Schleife durch alle Objekte der Auswahl For Each obj In oSel If TypeOf obj Is DrawingView Then Set oDrwView = obj 'Schleife durch alle Schraffuren der Ansicht For Each oHatch In oDrwView.HatchRegions If Not oHatch.Visible Then oHatch.Visible = True Next 'oHatch Else 'markiertes obj ist kein drawingView ' nix tun - es geht mit dem nächsten weiter End If Next 'obj 'Rückgängig-Aktion abschließen oTxn.End End Sub Public Function ShiftPressed() As Boolean 'Returns True if shift key is pressed ShiftPressed = GetKeyState(vbKeyShift) < 0 ' 16 = vbKeyShift End Function Public Function StrgPressed() As Boolean 'Returns True if Ctrl/Strg key is pressed StrgPressed = GetKeyState(vbKeyControl) < 0 ' 17 = vbKeyControl End Function
------------------ Gruß KraBBy [Diese Nachricht wurde von KraBBy am 26. Jul. 2026 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13824 Registriert: 02.04.2004 Inventor 2025.2.1 Windows 11
|
erstellt am: 26. Jul. 2026 20:52 <-- editieren / zitieren --> Unities abgeben:         
|
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen

 Beiträge: 13824 Registriert: 02.04.2004 Inventor 2025.2.1 Windows 11
|
erstellt am: 26. Jul. 2026 21:55 <-- editieren / zitieren --> Unities abgeben:         
So, hab mal weiter probiert mit Macro-Aufruf aus dem GUI, dann kommt der zuvor erwähnte Fehler nicht mehr. Das ist also kein Thema. "Alle Schraffuren wieder sichtbar" geht auch. Allerdings ist das mit Shift und Ctrl noch nicht richtig. Ctrl macht keine Änderung, es wird also weiter immer enger, und Shift macht alles auf 1. Was mich sehr wundert, weil ich das so im Code nicht erkennen kann. Ich habe aber auch noch einen Wunsch: Ist es möglich, die Auswahl bestehen zu lassen? Faktor 0,7... finde ich nach wie vor richtig, aber manchmal ist es mehrfach erforderlich, und oft will ich auch wieder zurück (wie das bei grafischen Sachen oft so ist, dass ich das Ergebnis gar nicht mehr so toll finde, wenn ich es dann sehe.) ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
  
 Beiträge: 788 Registriert: 19.09.2007 Inventor Professional 2025 Win11
|
erstellt am: 26. Jul. 2026 22:55 <-- editieren / zitieren --> Unities abgeben:          Nur für Roland Schröder
Zitat: Original erstellt von Roland Schröder: Allerdings ist das mit Shift und Ctrl noch nicht richtig. Ctrl macht keine Änderung, es wird also weiter immer enger, und Shift macht alles auf 1.
Das klingt so, als ob es der ältere Code wäre. Ist der noch vorhanden? Zitat: Ich habe aber auch noch einen Wunsch: Ist es möglich, die Auswahl bestehen zu lassen?
Das wäre möglich. Ein einfaches rückgängig reicht nicht? ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |