| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Maßstäbe auslesen (2647 mal gelesen)
|
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 02. Apr. 2014 13:46 <-- editieren / zitieren --> Unities abgeben:
Hat jemand ein Schnippsel oder eine Hilfestellung wie man alle Maßstäbe der Ansichten auf dem aktuellen Blatt auslesen kann? Würde das dann gerne in ein Dropdown packen. ------------------ Grüße aus Wien Philipp http://black-evolution.de/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RolandD Mitglied
Beiträge: 533 Registriert: 07.01.2005 i7-9700k 32GB DDR4-RAM Nvidia RTX 2060 SSD 970 m.2 Win10-64 (21H2) AIP 2020.3 Dell U3417W
|
erstellt am: 02. Apr. 2014 18:10 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo Philipp, Such in der API nach DrawingView Object versuch mal: Code: MainScale = oDoc.ActiveSheet.DrawingViews(1).Scale 'Hauptmaßstab der 1. AnsichtFor i = 1 To oDoc.ActiveSheet.DrawingViews.Count IDW_Scale = oDoc.ActiveSheet.DrawingViews(i).Scale MsgBox "Maßstab: " + IDW_Scale Next i
------------------ Gruß Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 03. Apr. 2014 07:59 <-- editieren / zitieren --> Unities abgeben:
|
RolandD Mitglied
Beiträge: 533 Registriert: 07.01.2005 i7-9700k 32GB DDR4-RAM Nvidia RTX 2060 SSD 970 m.2 Win10-64 (21H2) AIP 2020.3 Dell U3417W
|
erstellt am: 03. Apr. 2014 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo, Ich nutze dazu eine Formatierung: Code: Private Function FormatScale(ByVal S As Double) As String If S >= 1 Then FormatScale = Format(S, "0") + ":1" Else FormatScale = "1:" + Format(1 / S, "0") End If End Function
------------------ Gruß Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 03. Apr. 2014 09:50 <-- editieren / zitieren --> Unities abgeben:
Super danke =) Gibt es auch einen einfachen Weg doppelte Einträge zu vermeiden? Weil ich lasse es ja in einer ComboBox auflisten und jz habe ich 3 mal 1:10 drinnen^^ ------------------ Grüße aus Wien Philipp http://black-evolution.de/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RolandD Mitglied
Beiträge: 533 Registriert: 07.01.2005 i7-9700k 32GB DDR4-RAM Nvidia RTX 2060 SSD 970 m.2 Win10-64 (21H2) AIP 2020.3 Dell U3417W
|
erstellt am: 03. Apr. 2014 17:47 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Logisch... Alle vorhandenen Maßstäbe als String in eine Liste. Dabei immer nur den aktuellen dazuschreiben, wenn er nicht schon vorhanden ist. Wozu brauchst du eigentlich die Liste der Maßstäbe? Dropdown - schon klar. Aber wozu das Dropdown Ich habe vor langer Zeit mal ein Makro z.T. aus dem Forum und z.T. aus den Beispielen der API übernommen, das den Hauptmaßstab und in Klammern () die "NebenMaßstäbe" in ein Benutzer iProp schreibt. Das zeige ich dann im Schriftfeld an. Die Aktualisierung mache ich immer direkt vor dem Drucken (PDF drucke ich über PDF-Drucker) Außerdem Plotdatum mit Datum und Uhrzeit. Edit: Ich krieg's nicht gebacken mit den Smileys ------------------ Gruß Roland [Diese Nachricht wurde von RolandD am 03. Apr. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 03. Apr. 2014 18:25 <-- editieren / zitieren --> Unities abgeben:
Und wie immer nur hinzufügen wenn er nicht schon vorhanden ist?^^ Ok den hauptmaßstab aber welcher ist der? Die erste ansicht ist es nicht immer zu 95% zwar schon aber halt nicht immer bis jetzt haben wir es händisch reingeschrieben. Meist haben wir auchnoch eine kleine 3d ansicht ineiner ecke wenn man die als erstes platziert kann man das ja nicht mehr nach der regel auslesen lassen darum das dropdown damit ich dann auswählen kann welcher der rchtige ist. In 99% der fälle sind eh nur 2 maßstäbe in der liste hauptansicht und 3d manchmaö dann noch ein detail. ------------------ Grüße aus Wien Philipp http://black-evolution.de/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SEHER Mitglied Systemanalytiker
Beiträge: 1203 Registriert: 13.03.2001
|
erstellt am: 04. Apr. 2014 10:43 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
|
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 07. Apr. 2014 09:55 <-- editieren / zitieren --> Unities abgeben:
|
RolandD Mitglied
Beiträge: 533 Registriert: 07.01.2005 i7-9700k 32GB DDR4-RAM Nvidia RTX 2060 SSD 970 m.2 Win10-64 (21H2) AIP 2020.3 Dell U3417W
|
erstellt am: 07. Apr. 2014 21:54 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo, Die Probleme liegen darin, dass für den Export zu DXF der Maßstab der 1. Ansicht genommen wird. Die "kleine 3D-Ansicht" macht da also Probleme, da der Maßstab der GESAMTEN DXF davon abhängt! In so einem Falle lösche ich die 3D-Ansicht und erstelle sie neu. Dadurch hat die DXF einen richtigen Maßstab, den ich über die Erstansicht beeinflussen kann. Zur Überprüfung, ob schon vorhanden: Code: 'Nur bisher nicht vorhandene actual_Scale in die ScaleListe eintragen For each Scale in ScaleListe 'bisherige Liste If actual_Scale = Scale Then 'dann ist er schon vorhanden actual_Scale = 0 ' 0 setzen Exit For EndIf Next Scale If actual_Scale <> 0 Then ScaleListe.add(FormatScale(actual_Scale))
Syntax habe ich nicht geprüft, ist nur aus dem Kopf geschrieben.. ------------------ Gruß Roland [Diese Nachricht wurde von RolandD am 07. Apr. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 14. Apr. 2014 08:14 <-- editieren / zitieren --> Unities abgeben:
Ich blicke jetzt nicht mehr durch irgendwie erkennt er das nicht als Array an oder? Code:
Public Sub GetScale() Set oDoc = ThisApplication.ActiveDocument Dim IDW_Scale As Double UserForm1.ComboBox2.Clear For i = 1 To oDoc.ActiveSheet.DrawingViews.Count IDW_Scale = oDoc.ActiveSheet.DrawingViews(i).Scale MsgBox ("Maßstab: " & FormatScale(IDW_Scale)) Next i On Error Resume Next 'Nur bisher nicht vorhandene actual_Scale in die ScaleListe eintragen For Each IDWScale In IDW_Scale 'bisherige Liste If actual_Scale = IDWScale Then 'dann ist er schon vorhanden actual_Scale = 0 ' 0 setzen Exit For End If Next IDWScale If actual_Scale <> 0 Then ScaleListe.Add (FormatScale(actual_Scale)) End Sub
------------------ Grüße aus Wien Philipp http://black-evolution.de/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RolandD Mitglied
Beiträge: 533 Registriert: 07.01.2005 i7-9700k 32GB DDR4-RAM Nvidia RTX 2060 SSD 970 m.2 Win10-64 (21H2) AIP 2020.3 Dell U3417W
|
erstellt am: 14. Apr. 2014 13:18 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Kann ja auch nicht anders sein, du definierst IDW_Scale als Double: Code:
Public Sub GetScale() Set oDoc = ThisApplication.ActiveDocument Dim IDW_Scale As Double UserForm1.ComboBox2.Clear
Aber dir fehlt noch die Scale_Liste in die du die gefundenen Maßstäbe einträgst. Mit der musst du vergleichen
------------------ Gruß Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 14. Apr. 2014 14:43 <-- editieren / zitieren --> Unities abgeben:
Und als was muss ich es definieren? Ich brauch doch ein Array oder? Code:
Public Sub GetScale() Set oDoc = ThisApplication.ActiveDocument Dim IDW_Scale IDW_Scale = Array() UserForm1.ComboBox2.Clear For i = 1 To oDoc.ActiveSheet.DrawingViews.Count IDW_Scale(i) = oDoc.ActiveSheet.DrawingViews(i).Scale 'Als Fehlermeldung kommt: Subscript out of range MsgBox ("Maßstab: " & FormatScale(IDW_Scale(i))) Next i On Error Resume Next 'Nur bisher nicht vorhandene actual_Scale in die ScaleListe eintragen For Each IDWScale In IDW_Scale 'bisherige Liste MsgBox ("For Each IDWScale: " & actual_Scale) If actual_Scale = IDWScale Then 'dann ist er schon vorhanden actual_Scale = 0 ' 0 setzen Exit For End If If actual_Scale <> 0 Then ComboBox2.AddItem (FormatScale(actual_Scale)) Next IDWScale 'If actual_Scale <> 0 Then ComboBox2.AddItem (FormatScale(actual_Scale)) End Sub
------------------ Grüße aus Wien Philipp http://black-evolution.de/ [Diese Nachricht wurde von axi92 am 14. Apr. 2014 editiert.] [Diese Nachricht wurde von axi92 am 14. Apr. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 25. Apr. 2014 12:57 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 25. Apr. 2014 21:54 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Hallo Meines Wissens stehen die Masstäbe als Double im Property Scale. Aber du willst doch in der zweiten Schleife prüfen ob der Maßstab der aktuellen Ansicht in deinem Dropdown ScaleList schon enthalten ist. Der Codeschnipsel wird vermutlich nicht lauffähig sein, da ich nicht weiß in welchem Format die Einträge in ScaleList sind. Wahrscheinlich müssen die Einträge vorher konvertiert werden. Code: For Each IDWScale In IDW_Scale '<--- IDW_Scale ersetzen durch ScaleListe ?!?!? If actual_Scale = IDWScale Then 'dann ist er schon vorhanden actual_Scale = 0 ' 0 setzen Exit For End If Next IDWScale If actual_Scale <> 0 Then ScaleListe.Add (FormatScale(actual_Scale))
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
axi92 Mitglied Konstrukteur
Beiträge: 685 Registriert: 20.02.2010 Inventor 2014 64bit SP2 Vault Basic 2014 64bit SP1 HP Z200 Win 7 64bit 16GB RAM CPU: i5 3,2GHz GPU: Nvidia Quadro K600
|
erstellt am: 30. Apr. 2014 15:41 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 01. Mai. 2014 07:34 <-- editieren / zitieren --> Unities abgeben: Nur für axi92
Moin Dann schau bitte mal nach seit wann VBA von Microsoft nicht mehr weiterentwickelt wird. Das beanwortet dir die Frage warum so viele Methoden anderer Sprachen nicht enthalten sind. Was actual_Scale ist bzw. sein soll mußt du uns sagen. Es ist dein Code. Wenn das als Public Property sonst wo definiert ist, woher sollen wir das wissen? Noch ein Tip, nutze "Option explicit". Dann fallen undeklarierte Variablen auf. Und lass die Finger von "On Error Resume Next". Zerlege deinen Code in kleine, überschaubare Funktionen. Das ist im ersten Moment etwas mehr Aufwand, aber wenn du in einem halben Jahr wieder drauf schaust, weißt du warum du dir die Arbeit gemacht hast. Ich würd's so versuchen. Code: Public Sub Traverse_DrawingSheets()Dim oSheet As Sheet Dim oDrawDoc As DrawingDocument Set oDrawDoc = ThisApplication.ActiveDocument For Each oSheet In oDrawDoc.Sheets Call Traverse_DrawingViews(oSheet) Next End Sub Public Sub Traverse_DrawingViews() Dim oDrawingView As DrawingView For Each oDrawingView In oSheet Call actual_Scale(oDrawingView.Scale) Next End Sub Public Sub GetScale(ByVal actual_Scale As Double) Dim IDWScale As String UserForm1.ComboBox2.Clear For Each IDWScale In UserForm1.ComboBox2 If actual_Scale = IDWScale Then 'dann ist er schon vorhanden actual_Scale = 0 ' 0 setzen Exit For End If Next IDWScale If actual_Scale <> 0 Then ComboBox2.AddItem (FormatScale(actual_Scale)) End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |