| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Bechtle stärkt PLM-Geschäft mit Neugründung |
Autor
|
Thema: API - Stückliste auf automatische Spaltenbreite setzen (3519 mal gelesen)
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 25. Mrz. 2018 15:12 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin gerade an einem Makro dran, welches mir eine vorhandene Stückliste nach der verwendeten Konfig aktualisiert und die Zeilen sortiert. Jetzt suche ich noch den passenden Befehl, der mir die Spalten auf die automatische max. Spaltenbreite einstellt, ich finde aber keinen passenden Schnipsel dazu. Also entsprechend dem Doppelklick auf die Trennlinie zweier Spalten. Momentan kann ich mit diesem Code eine feste (40 mm) Spaltenbreite einstellen: Code:
Dim swBomFeat As SldWorks.BomFeature Dim vTables As Variant Dim swBomTable As SldWorks.BomTableAnnotation Dim boolstatus As BooleanswBomFeat.SetConfigurations False, vConfVis, vConfNames vTables = swBomFeat.GetTableAnnotations Set swBomTable = vTables(0) boolstatus = swBomTable.SetColumnWidth(-2, 0.04, 0) 'Spaltenbreite auf 40 mm Breite einstellen
Hat jemand eine Idee, ob dies überhaupt per Makro funktioniert? Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Torsten Niemeier Ehrenmitglied V.I.P. h.c. Maschinenbau Ingenieur
Beiträge: 3682 Registriert: 21.06.2001 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 25. Mrz. 2018 17:58 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 25. Mrz. 2018 18:33 <-- editieren / zitieren --> Unities abgeben:
|
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 26. Mrz. 2018 10:45 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 26. Mrz. 2018 10:59 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz, danke schön für deinen Beitrag, aber wenn ich das richtig sehe, bezieht sich dieser Thread auf Excel. Für Excel kenne ich die entsprechende Funktion. Code:
xlWs.UsedRange.EntireColumn.AutoFit 'Spaltenbreite automatisch anpassen
Aber bei diesem Problem befinde ich mich bei einer Stückliste auf einer SW-Zeichnung, sorry, wenn das nicht klar war. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 26. Mrz. 2018 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, ich hab Dich schon richtig verstanden Ich meinte auch die Lösung die als Antwort gepostet wurde damit liefert Dir "getLabelPixel(String)" einen Breitenwert, den Du dann als Breite für die Spalte verwenden kannst Natürlich musst Du zuerst den längsten Text bestimmen. Etwas umständlich, aber sonst habe ich in SWX dazu, bis jetzt, nichts gefunden #If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) Private Declare PtrSafe Function CreateDC Lib "gdi32.dll" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As Long Private Declare PtrSafe Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long Private Declare PtrSafe Function CreateFontIndirect Lib "gdi32.dll" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long Private Declare PtrSafe Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare PtrSafe Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long Private Declare PtrSafe Function GetTextExtentPoint32 Lib "gdi32.dll" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As SIZE) As Long Private Declare PtrSafe Function MulDiv Lib "kernel32.dll" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long Private Declare PtrSafe Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As Long, ByVal nIndex As Long) As Long Private Declare PtrSafe Function DeleteDC Lib "gdi32.dll" (ByVal hdc As Long) As Long #Else Private Declare Function CreateDC Lib "gdi32.dll" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As Long Private Declare Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long Private Declare Function CreateFontIndirect Lib "gdi32.dll" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long Private Declare Function GetTextExtentPoint32 Lib "gdi32.dll" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As SIZE) As Long Private Declare Function MulDiv Lib "kernel32.dll" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long Private Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As Long, ByVal nIndex As Long) As Long Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hdc As Long) As Long #End If Private Const LOGPIXELSY As Long = 90 Private Type LOGFONT lfHeight As Long lfWidth As Long lfEscapement As Long lfOrientation As Long lfWeight As Long lfItalic As Byte lfUnderline As Byte lfStrikeOut As Byte lfCharSet As Byte lfOutPrecision As Byte lfClipPrecision As Byte lfQuality As Byte lfPitchAndFamily As Byte lfFaceName As String * 32 End Type Private Type FNTSIZE cx As Long cy As Long End Type Public Function GetLabelPixelWidth(label As String) As Integer
Dim font As New StdFont Dim sz As FNTSIZE font.Name = "Arial Narrow" font.Size = 9.5 sz = GetLabelSize(label, font) getLabelPixelWidth = sz.cx End Function Public Function GetStringPixelHeight(text As String, fontName As String, fontSize As Single, Optional isBold As Boolean = False, Optional isItalics As Boolean = False) As Integer
Dim font As New StdFont Dim sz As FNTSIZE font.Name = fontName font.Size = fontSize font.Bold = isBold font.Italic = isItalics sz = GetLabelSize(text, font) GetStringPixelWidth = sz.cy End Function Public Function GetStringPixelWidth(text As String, fontName As String, fontSize As Single, Optional isBold As Boolean = False, Optional isItalics As Boolean = False) As Integer
Dim font As New StdFont Dim sz As FNTSIZE font.Name = fontName font.Size = fontSize font.Bold = isBold font.Italic = isItalics sz = GetLabelSize(text, font) GetStringPixelWidth = sz.cx End Function Private Function GetLabelSize(text As String, font As StdFont) As FNTSIZE Dim tempDC As Long Dim tempBMP As Long Dim f As Long Dim lf As LOGFONT Dim textSize As FNTSIZE
' Create a device context and a bitmap that can be used to store a ' temporary font object tempDC = CreateDC("DISPLAY", vbNullString, vbNullString, ByVal 0) tempBMP = CreateCompatibleBitmap(tempDC, 1, 1) ' Assign the bitmap to the device context DeleteObject SelectObject(tempDC, tempBMP) ' Set up the LOGFONT structure and create the font lf.lfFaceName = font.Name & Chr$(0) lf.lfHeight = -MulDiv(font.Size, GetDeviceCaps(GetDC(0), 90), 72) 'LOGPIXELSY lf.lfItalic = font.Italic lf.lfStrikeOut = font.Strikethrough lf.lfUnderline = font.Underline If font.Bold Then lf.lfWeight = 800 Else lf.lfWeight = 400 f = CreateFontIndirect(lf) ' Assign the font to the device context DeleteObject SelectObject(tempDC, f) ' Measure the text, and return it into the textSize SIZE structure GetTextExtentPoint32 tempDC, text, Len(text), textSize ' Clean up (very important to avoid memory leaks!) DeleteObject f DeleteObject tempBMP DeleteDC tempDC ' Return the measurements GetLabelSize = textSize End Function ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 27. Mrz. 2018 01:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz, bei dieser Zeile bekomme ich eine Fehlermeldung "Benutzerdefinierter Typ nicht definiert"Code:
Private Declare PtrSafe Function GetTextExtentPoint32 Lib "gdi32.dll" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As Size) As Long
Ich schätze lpSize As Size macht hier Probleme. Als Variant deklariert, bekomme ich auch Ärger. Hast du eine Idee, woran das liegen kann? Wenn ich die Zeile auskommentiere, bekomme ich im Code weiter unten Probleme, wird also benötigt. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) [Diese Nachricht wurde von Andi Beck am 27. Mrz. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 27. Mrz. 2018 07:23 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 27. Mrz. 2018 08:00 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von nahe:
schläfst Du eigentlich auch mal? nofrown:Antwort um 01:13)
Moin Heinz, jo, zwischen den Zeilen, grins..... Ich glaube, in deinem Zip-Ordner ist nix drin und du bist noch nicht wach. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 27. Mrz. 2018 10:51 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 28. Mrz. 2018 00:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz, jetzt habe ich den Fehler gefunden. Der verbarg sich im Schreibfehler in deinem obigen veröffentlichen Massen-Code. Code:
Private Type FNTSIZE ' ist falsch, muss heißen "Private Type SIZE" cx As Long cy As Long End Type
Nun kann ich hier mal weiter rumprobieren, aber widerwillig, nur weil der passende Befehl hier fehlt. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 07. Apr. 2018 13:39 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Andi Beck:
Nun kann ich hier mal weiter rumprobieren, aber widerwillig, nur weil der passende Befehl hier fehlt.
Hallo Heinz, ich habe nun (mit Schwierigkeiten) einen brauchbaren Code aus deinem obigen Beispiel zusammengebastelt. Diese Routine gibt nur ungenaue Werte zurück, welche nicht dem tatsächlich Möglichen entspricht. Nach langem rumprobieren habe ich folgende Vorgehensweise gewählt: - beim auslesen der verwendeten Schriftgröße darf nicht nach Pt sondern muss nach mm ausgelesen werden. Erst dann muss von mm nach Pt umgerechnet werden. (Gibt sonst zu grobe Werte) - Bei der Verwendung der obigen Routine vergrößere ich zunächst die verwendete Schriftgröße um den Faktor 1000, um anschließend das Ergebnis wieder um den gleichen Wert zu verkleinern. (Gibt genauere Werte zurück) - Das erhaltene Ergebnis muss zum Schluss noch in mm umgerechnet werden. Leider hat sich hier kein passender pauschaler Wert gefunden. 3.76 für dpt bzw. 3.527 für pt bzw. 3.51 für ppt bzw. 2.5683186 für SolidWorks passen nicht Ich habe mir für jede Schriftgröße einen eigenen Divisor ermittelt. Zudem sollte zuvor noch ein Korrekturfaktor hinzugefügt werden. Solange als Schrifttype Arial verwendet wird, kommt meine Logik sehr dem Optimum nahe. Sobald eine andere Schrifttype verwendet wird, kann es passen, muss aber nicht. Hier wären eigene Korrekturfaktoren nötig. Dabei könnte es doch so einfach sein....:D Code:
xlWs.UsedRange.EntireColumn.AutoFit 'Spaltenbreite automatisch anpassen
Also, nochmals Danke für den Hinweis. Viele Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dimitrie Kuhn Mitglied Freiberuflicher Ingenieur
Beiträge: 13 Registriert: 05.11.2011 Win10 64bit SOLIDWORKS CAD 2018/19 SOLIDWORKS PDM 2019
|
erstellt am: 11. Apr. 2018 08:51 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, die "AutoFit"-Funktion in der API sollte für SWX kein Problem sein, im Userinterface, per Mausklick geht es ja problemlos. Möglicherweise implementiert SWX die Funktion irgendwann ... Ich hab dir ein Beispiel Makro angehängt. Hoffe es hilft dir. Viele Grüße Dimitrie ------------------ KUHN ENGINEERING OPTIMIERUNG & PARAMETRISIERUNG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 13. Apr. 2018 22:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Dimitrie, ein schönes Makro hast du hier geschrieben, allerdings ebenfalls sehr Aufwendig wie das meine. Und Prima, dass du auch meinen Beitrag im englischen Forum bemerkt hast. Im Geschäft hat es auch gleich wunderbar funktioniert und ein besseres Ergebnis erzeugt als mein Makro, jedoch noch nicht so gut wie der Doppelklick auf die Trennlinie. Wobei deine Iteration schon merkbar an Zeit benötigt. Aber zu Hause mit meiner Testzeichnung hat sich dein Makro in eine Endlosschleife begeben und ich musste SW abschießen. Ich benötigte ein wenig Zeit, um mich deiner Logik zu nähern. Ich habe dir 2 Bilder angehängt, um das Problem zu verdeutlichen. Im ersten Bild siehst du ein optimales Ergebnis. Im zweiten siehst du ein fehlerhaftes Ergebnis, da die Zelle "CM30-16BPP-KC1-." noch 2-Zeilig ist. Diese 2-Zeiligkeit führt zu der Endlosschleife beim Durchgang für die nächste Spalte. Die Zelle "CM30-16BPP-KC1-." hat genauso viele Buchstaben wie die Überschrift "Zeichnungsnummer", nach der die Spaltenbreite optimiert wurde. Offensichtlich benötigt die Zelle "CM30-16BPP-KC1-." aber etwas mehr Platz. Ich habe jetzt noch keinen schnellen Ansatz, um dies zu beheben. Evtl. muss man nochmals alle Zellen einer Spalte kontrollieren, ob sie tatsächlich 1-Zeilig formatiert sind, und wenn nicht, den Durchlauf mit der entsprechenden Zelle erneut durchführen, und dies sooft, bis alle Zellen 1-Zeilig sind. Aber evtl. fällt dir noch etwas besseres ein. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Daniel Kuhn Mitglied Freiberuflicher Ingenieur
Beiträge: 13 Registriert: 05.11.2011 Win10 64bit SOLIDWORKS CAD 2018/19 SOLIDWORKS PDM 2019
|
erstellt am: 14. Apr. 2018 09:46 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, wie gesagt, es handelt sich nur um einen Lösungsvorschlag auf deinen Forumsbeitrag. Es wurde von mir kaum getestet und soll keine fertige Lösung abbilden. Jedoch vielen Dank für deine Rückmeldung. Das 2-Zeilen-Problem: Ich habe deinen Fall nachgebildet und komme auch auf das 2-Zeilen-Problem. Für diesen Fall habe ich eine weitere Überprüfung eingebaut, es sollte jetzt passen. Die Endlosschleife: Bisher konnte ich bei allen Tests, in keine Endlosschleife kommen. Um die Endlosschleife jedoch sicher auszuschließen, habe ich eine Abbruchbedingung implementiert. Zur Laufzeit: Die Laufzeit kann durch die Konstante: Const stepSizeColumnWidth As Double = 0.001 ' [m] beeinflusst werden, ich habe diese jetzt auf 1 mm gesetzt und komme somit selbst bei großen Tabellen nicht auf über 2 Sekunden (hardwareabhängig). Diese Laufzeit kann jedoch, falls notwendig, weiter optimiert werden. Z. B. kann eine variable Schrittweite implementiert werden. Diese wählt zu Beginn sehr große Schritte, die hin zum Optimum kontinuierlich kleiner werden. Denke aber nicht, dass dies in diesem Beispiel notwendig ist. Ich hoffe, ich konnte helfen und freue mich auf deine Rückmeldung. Viele Grüße Dimitrie
------------------ KUHN ENGINEERING OPTIMIERUNG & PARAMETRISIERUNG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 14. Apr. 2018 19:12 <-- editieren / zitieren --> Unities abgeben:
Hallo Dimitrie, wau, sehr schnelle Reaktionszeit , danke für deine Vorschläge. Ja, jetzt hat es auch mit meiner Testzeichnung funktioniert. Das mit der Laufzeit war mir schon klar, dass ich das dort verändern kann. Allerdings hat deine Konstante mit 1mm ein etwas schlechteres Ergebnis als mit meinem Makro erbracht. Ich habe jetzt verschiedene Durchläufe gemacht, welche du in den Bildern sehen kannst. Die Summe der einzelnen Abmessungen entsprechen dem Optimum mit Doppelklick auf die Trennlinie. Das Maß 158,55 entspricht meinem Makro. Bild Stueckliste-Breite-0.0005 = 0,5mm in 2 Sekunden Bild Stueckliste-Breite-0.0002 = 0,2mm in 3 Sekunden Bild Stueckliste-Breite-0.0001 = 0,1mm in 6 Sekunden (nicht zu sehen) Bild Stueckliste-Breite-0.0001-B = 0,1mm in 25 Sekunden Das letzte Bild habe ich bei mehreren Durchläufen 2x gehabt. Das Feld "Kapazitiver Näherungssensor" ist dort 2-Zeilig und in der Folge sind die nächsten Spalten deutlich breiter als sie sollen. Hier wirkt sich deine Abbruchbedingung aus, und gäbe es die nicht, hätten wir hier wieder eine Endlosschleife. Mit 0,1mm Schritten kommt das Ergebnis schon fast dem Optimum nahe. Also nochmals, du hast da ein tolles Makro geschrieben und ich bin dir deinem Beitrag sehr dankbar. Schöne Grüße noch, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 18. Apr. 2018 19:18 <-- editieren / zitieren --> Unities abgeben:
ich nochmal, ich habe jetzt festgestellt, dass manche Zellen mit weniger Buchstaben als andere, dennoch mehr Platz benötigen können. Ich habe bisher die Zelle mit den meisten Buchstaben verwendet, und danach die Spaltenbreite eingestellt. Dies hat zuweilen zu Fehlergebnissen geführt. Ich glaube Dimitrie, du zählst (indirekt) ebenfalls die Anzahl der Buchstaben. Da ich sowieso eine Routine zur Ermittlung der Textlänge habe, suche ich jetzt die Zelle mit dem längsten Platzbedarf raus. Und da ist es egal, ob da mehr oder weniger Buchstaben dabei sind. Mein Ergebnis ist jetzt fast am Optimum, was die jeweilige Spaltenbreite angeht. Ich würde ja mein Makro hier anhängen, aber ich habe jetzt noch Probleme mit der Sortierung nach der richtigen Spalte. Aber dazu mache ich einen neuen Beitrag auf. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 26. Jun. 2018 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2572 Registriert: 02.10.2006 Firma: SW 2023-4.0 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2022-5.0 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 26. Jun. 2018 20:07 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von nahe: Hallo Andi,keine Ahnung ob das Thema noch aktuell ist
Hallo Heinz, für mich momentan nicht, da mein Makro inzwischen geräuschlos funktioniert und regelmäßig im Einsatz ist. Aber toll, dass du dich an diesen Beitrag erinnert hast und diese Routine hier anhängst. Wenn ich mal wieder Zeit habe, schaue ich mir das näher an, scheint wirklich Interessant zu sein. Aber zur Zeit habe ich, was Makros angeht, eine dickere Baustelle, die ist mir wichtiger. Liebe Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 14. Aug. 2018 11:05 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, da ich vor dem gleichen Problem stand, anbei nun eine Lösung mit SWX Api Bordmitteln Achtung: das ganze funktioniert nur, wenn ich jeder Zelle ein Text steht und wenn es nur " " ist Dim swApp As Object Sub main() Dim swmodel As ModelDoc2 Dim swdraw As DrawingDoc Dim tab1 As TableAnnotation Set swApp = Application.SldWorks Set swmodel = swApp.ActiveDoc Set swdraw = swmodel Set tab1 = swdraw.SelectionManager.GetSelectedObject6(1, 0) SetColumnWithAuto tab1 End Sub Sub SetColumnWithAuto(swTable As TableAnnotation) Dim index As Integer Dim swAnnotation As Annotation Dim swDislplayData As DisplayData Dim TextWidth As Double
Set swAnnotation = swTable.GetAnnotation Set swDislplayData = swAnnotation.GetDisplayData For i = 0 To swTable.ColumnCount - 1 For j = 0 To swTable.RowCount - 1 If swDislplayData.GetTextInBoxWidthAtIndex(index) > TextWidth Then TextWidth = swDislplayData.GetTextInBoxWidthAtIndex(index) End If index = index + swTable.ColumnCount Next swTable.SetColumnWidth i, TextWidth + 0.001, swTableRowColSizeChangeBehavior_e.swTableRowColChange_TableSizeCanChange TextWidth = 0# index = i + 1 Next End Sub
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 17. Aug. 2018 21:19 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|