Autor
|
Thema: Makro Bauteilbeschriftung (1885 / mal gelesen)
|
Mark1345 Mitglied Konstruktionsingenieur
Beiträge: 7 Registriert: 21.10.2019 V5 R21
|
erstellt am: 23. Okt. 2019 08:43 <-- editieren / zitieren --> Unities abgeben:
Moin, ich habe ein Makro zur Bauteilbeschriftung geschrieben, aber wenn die Beschriftung zu kurz ist, skaliert mir das Programm die Polylines viel zu groß (siehe Bsp im Anhang). Kann mir jemand sagen woran das liegt und wie ich das beheben kann? Anbei dann auch der betreffende Code, ich hoffe ihr könnt etwas damit anfangen. Ich habe ein Rechteck auf eine Fläche gelegt und daraus ein Fill als Referenz für die Sketch für die Bauteilnummer. Dann bekomme ich über vorher festgelegte Parameter die Lange und Höhe des Rechtecks und passé dann je nach Lange der Bauteilnummer die Schriftgröße an das Rechteck an, sodass die hineingeschrieben wird. Das funktioniert soweit auch, aber sobald die Nummer zu kurz wird macht das Programm Blödsinn... Danke und Gruß Mark Code:
wnmb = InputBox("Please insert the serial number(W-number)", "Input", "", 2500, 3000) Dim oFill1 As HybridShapeFill Set oFill1 = ohyShapes.Item("Fill_W_Number") Dim refFill1 Set refFill1 = oDoc.Part.CreateReferenceFromObject(oFill1) oDoc.Part.InWorkObject = refFill1.Parent Dim Sketch_W_Number As Sketch Set Sketch_W_Number = orderedGeoSet.OrderedSketches.Item("Sketch_W_Number") Dim StartPoint("RefPoint_W_Number") Set StartPoint = orderedGeoSet.HybridShapes.Item("RefPoint_W_Number") Dim refPoint1 As Reference Set refPoint1 = oDoc.Part.CreateReferenceFromObject(StartPoint) Dim pointarray1(2) StartPointW.GetCoordinates pointarray1 Dim W_Number_Length W_Number_Length = oPart.Parameters.Item("W_Number_Length").ValueAsString W_Number_Length = Left(W_Number_Length, Len(W_Number_Length) - 2) Dim W_Number_Height W_Number_Height = oPart.Parameters.Item("W_Number_Height").ValueAsString W_Number_Height = Left(W_Number_Height, Len(W_Number_Height) - 2) '''''''''''''''''''' Creating of Drw for W-Number '''''''''''''''''''' Dim DrwDoc1 As DrawingDocument Set DrwDoc1 = CATIA.Documents.Add("Drawing") Dim DrwSheet1 As DrawingSheet Set DrwSheet1 = DrwDoc1.Sheets.ActiveSheet Dim DrwView1 As DrawingView Set DrwView1 = DrwSheet1.Views.Add("W-Number") Dim DrwViewGenerativeBehavior1 As DrawingViewGenerativeBehavior Set DrwViewGenerativeBehavior1 = DrwView1.GenerativeBehavior DrwViewGenerativeBehavior1.DefineFrontView 1, 0, 0, 0, 1, 0 DrwView1.X = 0 DrwView1.Y = 0 DrwView1.Scale2 = 1 DrwView1.Activate Dim DrwText1 As DrawingText Set DrwText1 = DrwView1.Texts.Add(wnmb & "", 0, 0) 'how many characters does the W-Number have -> W = No. of characters Dim W Dim inStrPos1 As Integer Dim lastCell1 As Boolean W = 0 lastCell1 = False Do Until lastCell1 = True inStrPos1 = InStr(wnmb, "") If inStrPos1 = "0" Then lastCell1 = True Exit Do End If wnmb = Right(wnmb, Len(wnmb) - inStrPos1) W = W + 1 Loop 'which is the driving factor - height or length of the fill? (depends on number of characters of partnumber) Dim characterheight1 characterheight1 = (W_Number_Height - 0.2) Dim characterlength1 characterlength1 = ((W_Number_Length - 0.2) / W) / 0.87 Dim textsize1 If characterheight1 < characterlength1 Then textsize1 = characterheight1 Else textsize1 = characterlength1 End If DrwText1.SetFontSize 0, 0, textsize1 'save the drawing as ig2 file DrwDoc1.ExportData "S:\Temp\drawing1.ig2", "ig2" DrwDoc1.Close Dim Ig2Doc1 As Document Set Ig2Doc1 = CATIA.Documents.Open("S:\Temp\drawing1.ig2") ' Copy polylines from part number drawing Dim Ig2Selection1 As Selection Set Ig2Selection1 = CATIA.ActiveDocument.Selection Ig2Selection1.Search "Drafting.Polyline,all" Ig2Selection1.Copy oDoc.Activate ' create a sketch on the fill and put it in the PartBody Set TargetSketch1 = oPart.MainBody.Sketches.Add(refFill1) ' paste polylines from ig2 file (part number label) in the sketch TargetSketch1.OpenEdition oSelection3.Clear oSelection3.Add TargetSketch1 oSelection3.Paste oSelection3.Clear Dim myAxisCoordinate1(8) TargetSketch1.GetAbsoluteAxisData myAxisCoordinate1 myAxisCoordinate1(0) = (pointarray1(0) + 0.112) '0,1mm distance to left border myAxisCoordinate1(1) = pointarray1(1) myAxisCoordinate1(2) = (pointarray1(2) + (0.386 * textsize1) - 0.1) '0,1mm distance to upper border TargetSketch1.SetAbsoluteAxisData myAxisCoordinate1 oPart.Update TargetSketch1.CloseEdition oPart.Update ' close and delete ig2 document Ig2Doc1.Close CATIA.FileSystem.DeleteFile ("S:\Temp\drawing1.ig2")
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Okt. 2019 09:23 <-- editieren / zitieren --> Unities abgeben: Nur für Mark1345
Servus Mark Ich vermute dass das Problem ist, dass du mit einem String versuchst zu Rechnen (ValueAsString). Du könntest auch von den Parametern den Wert über .Value auslesen, dann hast du schon eine Double. Gruß Bernd PS: Deine Do-Until-Schleife könntest du ggf durch InStrRev ersetzen. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mark1345 Mitglied Konstruktionsingenieur
Beiträge: 7 Registriert: 21.10.2019 V5 R21
|
erstellt am: 23. Okt. 2019 10:01 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Okt. 2019 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für Mark1345
Servus Mark Wann tritt das Problem auf? (Beispiel welcher Wert klappt und welcher nicht) Was für Werte hat dann characterheight1 und characterlength1? Sind diese plausibel? Für was steht die Variabel W? (welchen Zweck hat diese) Gruß Bernd PS: Ich empfehle als Variablen/Objekte "richtig" zu dimensionieren (zB textsize1 als Double). Dann haut dir das Makro auf die Finger falls die Dimension nicht zusammenpassen ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mark1345 Mitglied Konstruktionsingenieur
Beiträge: 7 Registriert: 21.10.2019 V5 R21
|
erstellt am: 23. Okt. 2019 12:50 <-- editieren / zitieren --> Unities abgeben:
Hi Bernd, der Faktor W gibt einfach die Anzahl der Buchstaben/Zahlen der Bauteilenummer wieder und characterheight und characterlength haben in meinem Beispiel Werte von 2-2.5 mm, also auch plausibel. Das Rechteck in meinem Beispiel hat eine Höhe von 2,5mm und eine Länge von 25mm. Dem entsprechend ist die characterheight 2,3mm und die characterlength ist abhängig von der Anzahl der Buchstaben. Ich habe herausgefunden, dass das ganze funktioniert, wenn die Bauteilnummer so lang ist, dass die characterlength entscheidend ist. Wenn die Nummer kürzer ist und damit die characterheight als textsize genommen wird tritt das Problem auf. Gruß Mark Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Okt. 2019 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für Mark1345
Servus Und was geht jetzt an den Problem nicht? (Schriftgröße? Ausrichtung?) Tritt der Fehler erst beim Importieren auf? Ist es in der Zeichnung noch korrekt? Ist es in der ig2 noch korrekt? Gruß Bernd PS: Warum ermittelst du W nicht einfach über Len? ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mark1345 Mitglied Konstruktionsingenieur
Beiträge: 7 Registriert: 21.10.2019 V5 R21
|
erstellt am: 23. Okt. 2019 13:56 <-- editieren / zitieren --> Unities abgeben:
hi Bernd, mmh, das Problem scheint im Übergang zwischen Drawing und Ig2 File zu liegen. Wenn der Name lang genug ist hat die Schrift die richtige Größe, aber wenn er zu kurz ist liegt die Schriftgröße plötzlich bei fast 60mm. Aber im Drawing hat die Schrift noch die richtige Größe. Die Ausrichtung stimmt, das einzige Problem ist die Schriftgröße. Ja du hast recht, Len erfüllt den gleichen Zweck und ist unkomplizierter, danke für den Tipp Gruß Mark Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Okt. 2019 14:10 <-- editieren / zitieren --> Unities abgeben: Nur für Mark1345
|
Mark1345 Mitglied Konstruktionsingenieur
Beiträge: 7 Registriert: 21.10.2019 V5 R21
|
erstellt am: 23. Okt. 2019 14:21 <-- editieren / zitieren --> Unities abgeben:
Hi Bernd, ich weiß ehrlich gesagt nicht genau, was du meinst, meine Optionen sehen so aus, wie im Bild im Anhang, da kann ich garr nichts mit Einheiten umstellen. Gruß Mark Edit: Ich habs, war IGES2D Und es funktioniert Vielen vielen Dank für deine Hilfe!! [Diese Nachricht wurde von Mark1345 am 23. Okt. 2019 editiert.] [Diese Nachricht wurde von Mark1345 am 23. Okt. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |