| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. |
| |
 | KISTERS 3DViewStation: Schutz sensibler 3D CAD Daten, egal von wo Sie arbeiten, eine Pressemitteilung
|
Autor
|
Thema: Makro Laufzeit (1054 / mal gelesen)
|
Manjyzz Mitglied
 Beiträge: 5 Registriert: 09.11.2016 Catia_R24_SPK4_HF78
|
erstellt am: 27. Jan. 2017 11:34 <-- editieren / zitieren --> Unities abgeben:         
Hallo Ich habe ein Makro programmiert, das Copy Flächen aus verschiedene Geo Sets von ein Part und Paste diese Flächen abhängig von seinen jeweiligen Farben in einem neue Geo Set eines neues Part. Ich verstehe nicht, wieso die Laufzeit des Makro (für dasselbe Part) nicht immer dieselbe ist. Normalerweise das erste mal ist schneller als die folgende. Einige Ideen? Gruß Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Mitglied Freiberuflicher Konstrukteur
   
 Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 27. Jan. 2017 12:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Manjyzz
|
Manjyzz Mitglied
 Beiträge: 5 Registriert: 09.11.2016 Catia_R24_SPK4_HF78
|
erstellt am: 27. Jan. 2017 12:38 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von joehz:
Show me yours and I'll show you mine.
Jawohl!
Code:
Option ExplicitSub CATMain() CATIA.HSOSynchronized = False CATIA.RefreshDisplay = False Dim StartTime As Date StartTime = Time Dim oDocuments As Documents Set oDocuments = CATIA.Documents Dim oPartDocument, RGBDocument As Document Set oPartDocument = CATIA.ActiveDocument Dim AliasPart, oPart As Part Set AliasPart = oPartDocument.Part Dim AliasHybridBodies, oHybridBodies As HybridBodies Set AliasHybridBodies = AliasPart.HybridBodies Dim AliasHybridBody, oHybridBody, FarbeHybridBody As HybridBody Set RGBDocument = oDocuments.Add("Part") Set oPart = RGBDocument.Part Set oHybridBodies = oPart.HybridBodies Dim oSelection, RGBsel As Selection Set RGBsel = RGBDocument.Selection Dim oName As String Dim r, g, b As Long Dim i, j, k, l, m As Integer Dim newLayerSet, newSet As Boolean Dim oVisproperties As VisPropertySet Dim oHybridShape As HybridShape Set oHybridBody = oHybridBodies.Add() oHybridBody.Name = AliasHybridBodies.Item(1).Name
'Loop for sorting Layer as Original_Layer and Color For i = 1 To AliasHybridBodies.Count
newLayerSet = True For j = 1 To oHybridBodies.Count If AliasHybridBodies.Item(i).Name = oHybridBodies.Item(j).Name Then Set oHybridBody = oHybridBodies.Item(j) newLayerSet = False End If Next j If newLayerSet = True Then Set oHybridBody = oHybridBodies.Add() oHybridBody.Name = AliasHybridBodies.Item(i).Name End If 'Loop for each HybridShape of the Layer For l = 1 To AliasHybridBodies.Item(i).HybridShapes.Count Set oHybridShape = AliasHybridBodies.Item(i).HybridShapes.Item(l) oPartDocument.Selection.Add oHybridShape Set oSelection = oPartDocument.Selection Set oVisproperties = oSelection.VisProperties oSelection.VisProperties.GetRealColor r, g, b oSelection.Copy oSelection.Clear oName = CStr(r) + " " + CStr(g) + " " + CStr(b) newSet = True If oHybridBody.HybridBodies.Count > 0 Then For m = 1 To oHybridBody.HybridBodies.Count If oHybridBody.HybridBodies.Item(m).Name = oName Then newSet = False Next m End If If newSet = True Then Set FarbeHybridBody = oHybridBody.HybridBodies.Add() FarbeHybridBody.Name = r & " " & g & " " & b RGBsel.Add FarbeHybridBody RGBsel.PasteSpecial "CATPrtResultWithOutLink" Else RGBsel.Add oHybridBody.HybridBodies.Item(r & " " & g & " " & b) RGBsel.PasteSpecial "CATPrtResultWithOutLink" End If RGBsel.Clear Next l Next i CATIA.StartCommand ("collapse all") oPart.Update CATIA.HSOSynchronized = True CATIA.RefreshDisplay = True MsgBox "Total time: " & Format(Time - StartTime, "hh:mm:ss"), vbOKOnly End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Mitglied Freiberuflicher Konstrukteur
   
 Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 27. Jan. 2017 13:33 <-- editieren / zitieren --> Unities abgeben:          Nur für Manjyzz
|
roccat Mitglied Konstrukteur
 
 Beiträge: 175 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 27. Jan. 2017 13:48 <-- editieren / zitieren --> Unities abgeben:          Nur für Manjyzz
Hallo Mario, die unterschiedlichen Laufzeiten resultieren Wahrscheinlich aus dem sich füllenden Arbeitsspeicher (Undo) und beim zweiten Lauf ist auch das Zielpart größer. Wenn es darum geht das Makro schneller zu machen würde ich versuchen erst alle Elemente eines Typs in die Selektion zu packen und dann komplett zu kopieren. Alternativ kannst du auch ein selection.search nach Farben innerhalb eines Selektierten Sets versuchen. Das muß aber nicht zwingens schneller sein. mfG Mario ------------------ Wenn das die Lösung sein soll, will ich mein Problem zurück !! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manjyzz Mitglied
 Beiträge: 5 Registriert: 09.11.2016 Catia_R24_SPK4_HF78
|
erstellt am: 27. Jan. 2017 14:12 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von joehz: Die meisten Dims sind unsauber.Anstatt zB. Dim i, j as integer zu schreiben müsstest Du, falls i und j integer sein sollen Dim i as integer, j as integer schreiben. Weiterhin: Die Zeilen haben innerhalb einer Schleife nix verloren:
Code:
Set oSelection = oPartDocument.Selection Set oVisproperties = oSelection.VisProperties
Statt
Code: oPartDocument.Selection.Add oHybridShape
kannst dann auch Code: oSelection.Add oHybridShape
Danke! Die Tipps haben die Laufzeit gekürzt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |