| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. |
| |
 | KISTERS 3DViewStation optimiert die Lizenzverwaltung für ihre Kunden, eine Pressemitteilung
|
Autor
|
Thema: TheSPAWorkbench.GetMeasurable viel zu langsam (2709 mal gelesen)
|
HeWa Mitglied

 Beiträge: 11 Registriert: 07.06.2009
|
erstellt am: 03. Nov. 2010 09:15 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, habe massivs Perfomanceproblem (seltsames Verhalten) mit der Function '.GetMeasurable'. (Mit der Suche leider keine Lösungen dazu gefunden) - wenn im Part-modell nur wenige Elemente vorhanden sind ist die Geschwindigkeit noch in Ordnung - beim etwa größeren Part (obwohl ich die Referenzen explicit aus der Selection erstelle) wird der code grottenlangsam. Durch 'gebugen' die Problemstelle in der Zeile "Set TheMeasurable = TheSPAWorkbench.GetMeasurable(oSel.Item(i).Reference)" lokalisiert. Ist es möglich den Code irgendwie zu beschleunigen? Gruß Waldemar Hier der gesamte code ---------------------- Sub CATMain() Dim oDoc As PartDocument Set oDoc = CATIA.ActiveDocument Dim HybridShapeFact As HybridShapeFactory Set HybridShapeFact = oDoc.Part.HybridShapeFactory Dim oSel As Object 'als Selection deklariert --> Fehler?! Set oSel = oDoc.Selection Dim Filter(2) Filter(0) = "Sketch" Filter(1) = "HybridShapeExtract" Filter(2) = "HybridShapeCurveSmooth" oSel.Clear Status = oSel.SelectElement2(Filter, "Select Elements from tree: ", False) oSel.Search ("Topology.Edge;sel") Dim TheSPAWorkbench As Workbench Set TheSPAWorkbench = oDoc.GetWorkbench("SPAWorkbench") Dim TheMeasurable As Measurable For i = 1 To oSel.Count Set TheMeasurable = TheSPAWorkbench.GetMeasurable(oSel.Item(i).Reference) Debug.Print TheMeasurable.Length 'z.B. Längenmessung Next End Sub ---------------------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Ehrenmitglied V.I.P. h.c. Manager
     
 Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 03. Nov. 2010 09:29 <-- editieren / zitieren --> Unities abgeben:          Nur für HeWa
|
HeWa Mitglied

 Beiträge: 11 Registriert: 07.06.2009
|
erstellt am: 03. Nov. 2010 13:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo Daniel, leider bring die Einstellung "Catia.HSOSynchronized = false" in diesem Fall nichts. Wenn man den Code Schritt für Schritt mit "F8" ausführt, dann sieht man wie es in der Zeile "Set TheMeasurable = TheSPAWorkbench.GetMeasurable(oSel.Item(i).Reference)" regelrecht "hackt" Bin für weitere Vorschläge sehr dankbar. MfG Waldemar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
   
 Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 04. Nov. 2010 12:42 <-- editieren / zitieren --> Unities abgeben:          Nur für HeWa
bring mal oSel.Item(i).Reference in eine eigene Referenz, um das Problem besser bewerten zu können. Nimm#s also aus der Zeile raus um festzustellen, ob's an der Referenz oder an der Messung liegt. ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HeWa Mitglied

 Beiträge: 11 Registriert: 07.06.2009
|
erstellt am: 04. Nov. 2010 16:26 <-- editieren / zitieren --> Unities abgeben:         
habe den Code geändert. Es wird zuerst die Referenz und im 2. Schritt wird das Object "TheMeasurable" mit diser Referenz als Argument erstellt. --- Set oRef = oSel.Item(i).Reference Set TheMeasurable = TheSPAWorkbench.GetMeasurable(oRef) --- Im Debug-Modus mit 'F8' kann man schön sehen, wie es beim Initialisieren von 'TheSPAWorkbench.GetMeasurable(oRef)' hackt. Also würde ich sagen das Problem liegt in der Zeile 'Set TheMeasurable = TheSPAWorkbench.GetMeasurable(oRef)' Bin für weitere Vorschläge sehr dankbar. Gruß Waldemar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
   
 Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 04. Nov. 2010 16:31 <-- editieren / zitieren --> Unities abgeben:          Nur für HeWa
mach mal ein CATIA.RefreshDisplay = false catia.visible = false und selection.clear ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HeWa Mitglied

 Beiträge: 11 Registriert: 07.06.2009
|
erstellt am: 05. Nov. 2010 09:31 <-- editieren / zitieren --> Unities abgeben:         
CATIA.RefreshDisplay = False CATIA.Interactive = False CATIA.Visible = False hatte ich alles schon ausprobiert und es hat überhaupt nichts gebracht Dann habe ich mal ein bisschen rumgesponnen und in einer Schleife die Referenz mehrmals gesetzt. For i = 1 To 10 Set oRef = oSel.Item(1).Reference 'keine Geschwindigkeitseinbuße auch bei n=1000 Next For i = 1 To 10 Set TheMeasurable = TheSPAWorkbench.GetMeasurable(oRef) 'ab hier wird's sehr langsam Next Das Sonderbare an der Geschichte: wenn das part nur wenige Elemente hat läuft es wesentlich schneller als wenn das part aus vielen Elementen besteht, obwohl die Referenz auf das gleiche Element gesetzt wird!? Ich bin mit meinem Latein am Ende. PS. Eine andere Möglichkeit wäre es die Kurve z.B. Boundary zu zerlegen und die HybridShapes auszumessen. Geht viel schneller. Es ist leider nicht erwünscht in das part irgendwas einzufügen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Starbirth Mitglied Konstrukteur
 
 Beiträge: 119 Registriert: 22.10.2009 Catia V5-6 R24 Windows 7 64bit Intel Xeon (4x3,5GHz) 32B Ram Nvidia Quatro K4200
|
erstellt am: 05. Nov. 2010 14:01 <-- editieren / zitieren --> Unities abgeben:          Nur für HeWa
Was spricht dagegen im Zuge des Macros eine Geometrie zu erstellen, zu messen und diese danach wieder löschen zu lassen? Ist im Endeffekt ja so als wäre sie nicht da gewesen, aber du hast deine Daten. Oder besteht einfach ein generelles Verbot, was das Erzeugen von Geometrien an geht, warum auch immer? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HeWa Mitglied

 Beiträge: 11 Registriert: 07.06.2009
|
erstellt am: 08. Nov. 2010 09:14 <-- editieren / zitieren --> Unities abgeben:         
es besteht kein generelles Verbot, 'temporäre' Geometrie einzufügen. Nur ist diese Lösung, wie mein Chef zu sagen pflegt 'suboptimal'. :-) Aber was ich nicht verstehen kann und immer noch auf der Suche nach der Antwort bin: Wieso dauert es viel länger das selbe Element in einem part mit vielen Elementen zu vermessen, als wenn ich das zu vermessende Element in ein separates kopiere und dort messe. Gruß Waldemar Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
   
 Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 08. Nov. 2010 17:01 <-- editieren / zitieren --> Unities abgeben:          Nur für HeWa
Weil im CAA immer ein Body, und auch ein GeoSet ist ein HybridBody in einem BagRep komplett berechnet/addiert wird. Daher muss er immer alle Elemente duchackern. Willkommen in der Welt von CATIA!  Wir Entwickler fragen bei CATIA nicht mehr nach dem Warum. *g* ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HeWa Mitglied

 Beiträge: 11 Registriert: 07.06.2009
|
erstellt am: 09. Nov. 2010 09:15 <-- editieren / zitieren --> Unities abgeben:         
|