Autor
|
Thema: Elementen ausblenden über Hide Components (9302 mal gelesen)
|
Estafanos Mitglied
Beiträge: 27 Registriert: 17.07.2012 Catia V5 R22, Windows 7
|
erstellt am: 10. Jul. 2013 13:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich habe ein Makro geschrieben, um in einem Part oder Product alle Elementen unter alle selektierten Geomertical Sets auszublenden. Mein jetziges Makro selektiert Linien, Ebenen, Achsensystemen und Punkte und blendet diese aus. Es funktioniert sehr gut, aber bei Products dauert es sehr lang, da viele Elementen zu selektieren sind. Es gibt in CATIA eine sehr gute Funktion, wenn man ein Geometrical set selektiert und rechte Maustaste --> Geometrical set object (Name) --> Hide Components, dann werden alle Elemente sehr schnell ausgeblendet. Ich möchte gerne mein Makro optimieren, wie oder wo finde ich den Zugriffe auf Hide Components (Code)?
ich habe das makro aufgezeichnet, aber leider werden nur alle Geometrical sets selektiert und hört das aufzeichen auf.
hat jemand eine idee oder einen Vorschlag, wie man das Problem lösen kann? Vielen Dank im Voraus Mit freundlichen Grüßen Estafanos ----------
Anbei das aufgezeichntes Makro: Sub CATMain() Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = partDocument1.Selection selection1.Search "CATSpdSearch.OpenBodyFeature,all" 'Hide Components . . . . End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gladly Mitglied
Beiträge: 56 Registriert: 02.11.2007 Catia V5R19SP9HF40 64Bit Windows XP Pro x64
|
erstellt am: 10. Jul. 2013 15:44 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Moin, selektiere einfach das Geometrische Set und starte dann einfach den Hide-Components Befehl Also (freihand -nicht getestet)
Code:
Sub CATMain()Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = partDocument1.Selection selection1.clear selection1.add DEINBODY-OBJECT catia.startcommand "Hide Components" End Sub
[Diese Nachricht wurde von gladly am 10. Jul. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 10. Jul. 2013 16:00 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Hallo, nur als kleiner Tipp... Nicht die Suche, sondern die Selektion dauert so lange. Ich habe ebenfalls ein Makro geschrieben, welches aber schnell durchläuft. Code:
Sub CATMain() Dim actDoc 'As ProductDocument Dim oSel As Selection Dim oVisPropSet As VisPropertySet Dim oriCaption As String CATIA.Interactive = False Set actDoc = CATIA.ActiveDocument Set oSel = actDoc.Selection Set oVisPropSet = oSel.VisProperties oriCaption = CATIA.Caption CATIA.Caption = "Bedingungen werden ausgeblendet" DoEvents oSel.Search "(((((((CATProductSearch.MfConstraint + CATStFreeStyleSearch.MfConstraint) + CATAsmSearch.MfConstraint) + CATSketchSearch.MfConstraint) + CATDrwSearch.MfConstraint) + CATPrtSearch.MfConstraint) + CATSpdSearch.MfConstraint) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = "Achsensysteme werden ausgeblendet" DoEvents oSel.Search "((((CATStFreeStyleSearch.AxisSystem + CATPrtSearch.AxisSystem) + CATGmoSearch.AxisSystem) + CATSpdSearch.AxisSystem) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = "Ebenen werden ausgeblendet" DoEvents oSel.Search "((((CATStFreeStyleSearch.Plane + CATPrtSearch.Plane) + CATGmoSearch.Plane) + CATSpdSearch.Plane) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = "Skizzen werden ausgeblendet" DoEvents oSel.Search "(((CATPrtSearch.Sketch + CATGmoSearch.Sketch) + CATSpdSearch.Sketch) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = "Geometrische Sets werden ausgeblendet" DoEvents oSel.Search "((((CATStFreeStyleSearch.OpenBodyFeature + CATPrtSearch.OpenBodyFeature) + CATGmoSearch.OpenBodyFeature) + CATSpdSearch.OpenBodyFeature) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = oriCaption CATIA.Interactive = True End Sub
Du solltest also eher versuchen deine Selektion möglichst klein zu halten. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gladly Mitglied
Beiträge: 56 Registriert: 02.11.2007 Catia V5R19SP9HF40 64Bit Windows XP Pro x64
|
erstellt am: 11. Jul. 2013 09:51 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Auch wenn etwas spät... Falls es tatsächlich um die langsame Suche geht hilft eine Eigenschaft die ab der R19 (meine ich zumindest) erhältlich ist. Die deaktiviert die Synchronisierung der Selection des Makros mit dem Windows. Also es wird nicht alles "gehighlighted". Somit laufen Selection-Intensive (viele Selektierte Elemente) Makros um einiges Schneller. Code:
Catia.HSOSynchronized = False'nach dem Makro bzw. der Selection Catia.HSOSynchronized = True
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 11. Jul. 2013 10:17 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Zitat: Original erstellt von gladly:
Code:
Catia.HSOSynchronized = False'nach dem Makro bzw. der Selection Catia.HSOSynchronized = True
Ich kann da aktuell nur von abraten. Ich habe es selbst in einigen Makros drin gehabt und bin davon weg, da es sehr oft massive Probleme verursacht. Hierbei kann es zu CATVBA-Abstürzen bis hin zu CATIA-Fehlerverhalten kommen. Oftmals lässt es sich dann nicht mehr aktivieren oder die CATIA-Schnittstelle verweigert den Dienst. Ich habe wirklich versucht, anders zu programmieren und vermeide dementsprechende Selektionen oder versuche zumindest diese klein zu halten. In der Regel ist aber auch schon die Selektion über eine vernünftige Suche deutlich schneller, als die Selektion der Elemente nach und nach... ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gladly Mitglied
Beiträge: 56 Registriert: 02.11.2007 Catia V5R19SP9HF40 64Bit Windows XP Pro x64
|
erstellt am: 11. Jul. 2013 12:03 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Nur aus reiner Neugier - welche "Art" von Problemen? Ich nutze die Funktion mittlerweile in diversen Makros ohne (merkliche?!) Probleme. Ich habe auch ein Makro, welches jedes Face eines Flächenverbundes per Suche selektiert. Ohne abschalten der Selektion konnte man der Fläche zusehen, wie sich die selektionen verbreitet hat (also ein Face nach dem anderen gehighlighted wurde). Mit deaktivierung der Sync habe ich einen Zeitgewinn von zuvor 3min auf ca. 20sek verbuchen können. Bin über jede Info dankbar, dann werde ich das bei meinen Makros in nächster Zukunft genauer beobachten. mfg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 11. Jul. 2013 12:33 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Der Zeitgewinn ist riesig, das ist mir bewusst. Daher hatte ich auch diese Eigenschaft eigentlich in jeder mit Selektion defininierten Funktion verwendet. Allerdings ist der Zugriff der API nicht sicher. Ich weis nicht warum und wann das passiert, aber es gibt Momente, bei denen diese Eigenschaft schreibgeschützt ist bzw. nicht verändert werden kann. Dann fliegt das Makro oder Modul entsprechend auf die Nase und zieht dei Schnittstelle teilweise mit nach unten, sodass auch nach beenden des Makros und neuausführen diese Eigenschaft readonly ist und nur ein Neustart von CATIA das Problem beseitigt. Das habe ich genau analysiert und bin daher mehr als sicher, dass es an dieser Eigenschaft liegt. Ich hatte das Problem auch schon durchgängig vor SP08 Hotfix06, allerdings scheint das Problem nicht dauerhaft behoben zu sein. In wieweit das in höheren SP´s behoben ist, weis ich nicht, aber die Auswirkung kann doch sehr gravierend sein. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Estafanos Mitglied
Beiträge: 27 Registriert: 17.07.2012 Catia V5 R22, Windows 7
|
erstellt am: 17. Jul. 2013 12:43 <-- editieren / zitieren --> Unities abgeben:
Hallo gladly, hallo Zusammen, vielen herzlichen Dank für die sehr guten Informationen. leider konnte ich heute die Vorschläge erst testen, da ich mit anderen Makros gearbeitet habe. Code: catia.startcommand "Hide Components" hat sehr gut funktioniert . Ich glaube, dass es von der CATIA-Sprache abhängig. Man kann hier für die unterschiedlichen Sprachen so eine Unterroutine für die Spracherkennung reinbauen und mit eine If .. Else schleife z. B. für deutsch "catia.startcommand "Komponenten verdecken"" abfangen. Es läuft recht schnell, mehr als ich erhofft habe. Dieser Befehl läuft nur in „*.CATPart“ und nicht bei den Baugruppen „*.CATProduct“ . Ich habe diese Routine mit einer Selektion (Alle Geometrical Sets) unter CATVBA untersucht, und beim Add Watch... kommt die Selektion richtig an, aber "Hide Components" wird nicht ausgeführt. Code: Sub CATMain() Dim oProdukt Set oProdukt = CATIA.ActiveDocument Dim oSel As Selection Set oSel = oProdukt.Selection oSel.Search "(((CATStFreeStyleSearch.OpenBodyFeature + CATPrtSearch.OpenBodyFeature) + CATGmoSearch.OpenBodyFeature) + CATSpdSearch.OpenBodyFeature),all" CATIA.StartCommand "Hide Components" oSel.Clear End Sub Warum funktioniert das mit dem „Hide Components“ unter eine Bauguppe nicht? hat jemand eine Idee oder einen Vorschlag, wie man „Hide Components“ unter *.CATProduct ausführen kann? Vielen Dank im Voraus Mit freundlichen Grüßen Estafanos Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 17. Jul. 2013 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Hat sich eigentlich irgendwer mal meinen Code angeschaut... Startcommand ist immer schlecht, wenn du es vermeiden kannst, da es von der Sprache abhängig ist und frei definierbar. Wenn du so oder so eine Selection hast, kannst du auch "VisProperties" davon verwenden. Code: Sub CATMain() Dim oProdukt Dim oSel As Selection Dim oVisPropSet As VisPropertySet Set oProdukt = CATIA.ActiveDocument Set oSel = oProdukt.Selection oSel.Clear Set oVisPropSet = oSel.VisProperties oSel.Search "(((CATStFreeStyleSearch.OpenBodyFeature + CATPrtSearch.OpenBodyFeature) + CATGmoSearch.OpenBodyFeature) + CATSpdSearch.OpenBodyFeature),all" oVisPropSet.SetShow 1 oSel.Clear End Sub
Ich frage mich zwischenzeitlich echt, warum ich hier überhaupt was schreibe... ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Estafanos Mitglied
Beiträge: 27 Registriert: 17.07.2012 Catia V5 R22, Windows 7
|
erstellt am: 17. Jul. 2013 13:49 <-- editieren / zitieren --> Unities abgeben:
Hallo Herr Schulz, vielen vielen Dank für das Skript. In Unserer Firma arbeiten die Konstrukteure mit vielen vielen Elementen. Fahrzeuge, Getriebe und Motorenkomponenten. In meinem alten Skript habe ich genau so über eine Selektion programmiert. Leider gibt es in einigen Baugruppen bis zu 50.000 Elementen auszublenden. Wenn ich die ganzen Elementen über eine Selektion mache, dann dauert die Ausführungszeit etwa 3-4 min.. Ich glaube, dass es nicht zumutbar für die Anwender ist. Den riesigen Vorteil von ihnen, dass die Selektion so klein wie möglich zu machen, habe ich vorher nicht gewusst. Deswegen habe ich meinen Selektionsstring unterteilt und es läuft schneller. Die Anwender möchten gerne, dass alle Elemente unter allen Geometical Sets ausgeblendet werden. Sie möchten nicht, dass die Geometical sets selbst ausgeblendet werden. Ich habe es mir so vorgestellt, dass über den Befehl "Hide Components" gehen könnte. Der einzige Vorteil von diesem Befehl ist, dass es CAA programmiert wurde (Dassault Systemes) und läuft recht schnell. Ich gebe Ihnen vollkommen Recht, dass "Hide Components"-Befehl von der Sprache abhängig ist. Ich kann bei uns in der Firma sagen, dass alle Makros nur für z.B. Englisch und Deutsch auszuführen sind. Kann man diesen Befehl irgendwie in eine Baugruppe ausführen? Herzlichen Dank im Voraus Mit freundlichen grüßen Estafanos
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 17. Jul. 2013 13:58 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
|
Estafanos Mitglied
Beiträge: 27 Registriert: 17.07.2012 Catia V5 R22, Windows 7
|
erstellt am: 17. Jul. 2013 14:32 <-- editieren / zitieren --> Unities abgeben:
Ich möchte gerne alle Ebenen, Linien, Punkte, Achsensystemen, Kurven und Baugruppen-Bedingungen. in den Baugruppen ausblenden. Bei einer kleinen Baugruppe funktioniert mit Selektionen recht gut und schnell. Da wir sehr großen Baugruppen und keinen Hyprid konstruktion haben, denke ich, dass alle Ebenen, Linien und Punkten in den Geometical Sets sich befinden. Ich habe die o. g. Elementen über mehrere Selektionen, wie in deinem Skript, gemacht und habe eine Zeitfunktion geschrieben: Am Anfang des Skriptes Uhrzeit1 = Time . . . Am Ende des Skriptes Uhrzeit2 = Time A = DateDiff("s", Uhrzeit1, Uhrzeit2) MsgBox A Dann dauert die Selektion 3,3 min. Es liegt darin, dass es viele (50.000) Elementen zu selektieren sind. Herzlichen Dank im Voraus
Mit freundlichen grüßen Estafanos
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: 17. Jul. 2013 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Servus Und was dauert nun lange? Das suchen/selektieren oder das ausblenden? IMHO beansprucht das suche die meiste Zeit. Macht es einen unterschied ob du in die Baugruppe eingezoomt hast bei ausführen des Makros? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Estafanos Mitglied
Beiträge: 27 Registriert: 17.07.2012 Catia V5 R22, Windows 7
|
erstellt am: 17. Jul. 2013 15:15 <-- editieren / zitieren --> Unities abgeben:
Die gesamte Ausführungszeit vom Skript dauert sehr lange. Bei Ausführen habe ich keine Möglichkeit einzuzoomen oder irgendwas zu machen. Ich habe das Skript Herrn Schulz nach meinen Bedürfnisse geändert (Siehe Unten). Gibt es Möglichkeiten, um das skript zeitlich zu beschleunigen? Wie gesagt, es gibt in einigen baugruppen bis zu 50.000 Elementen. 'Code Sub CATMain()
Uhrzeit1 = Time
Dim actDoc 'As ProductDocument Dim oSel As Selection Dim oVisPropSet As VisPropertySet Dim oriCaption As String CATIA.Interactive = False Set actDoc = CATIA.ActiveDocument Set oSel = actDoc.Selection Set oVisPropSet = oSel.VisProperties oriCaption = CATIA.Caption CATIA.Caption = "Bedingungen werden ausgeblendet" DoEvents oSel.Search "(((((((CATProductSearch.MfConstraint + CATStFreeStyleSearch.MfConstraint) + CATAsmSearch.MfConstraint) + CATSketchSearch.MfConstraint) + CATDrwSearch.MfConstraint) + CATPrtSearch.MfConstraint) + CATSpdSearch.MfConstraint) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = "Achsensysteme werden ausgeblendet" DoEvents oSel.Search "((((CATStFreeStyleSearch.AxisSystem + CATPrtSearch.AxisSystem) + CATGmoSearch.AxisSystem) + CATSpdSearch.AxisSystem) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = "Ebenen werden ausgeblendet" DoEvents oSel.Search "((((CATStFreeStyleSearch.Plane + CATPrtSearch.Plane) + CATGmoSearch.Plane) + CATSpdSearch.Plane) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = "Skizzen werden ausgeblendet" DoEvents oSel.Search "(((CATPrtSearch.Sketch + CATGmoSearch.Sketch) + CATSpdSearch.Sketch) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = "Punkte werden ausgeblendet" DoEvents oSel.Search "((((CATStFreeStyleSearch.Point + CATPrtSearch.Point) + CATGmoSearch.Point) + CATSpdSearch.Point) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = "Kurven werden ausgeblendet" DoEvents oSel.Search "((((CATStFreeStyleSearch.Curve + CATPrtSearch.Curve) + CATGmoSearch.Curve) + CATSpdSearch.Curve) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = "Linien werden ausgeblendet" DoEvents oSel.Search "((((CATStFreeStyleSearch.Line + CATPrtSearch.Line) + CATGmoSearch.Line) + CATSpdSearch.Line) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear CATIA.Caption = oriCaption CATIA.Interactive = True Uhrzeit2 = Time
A = DateDiff("s", Uhrzeit1, Uhrzeit2) MsgBox A End Sub Danke und Gruß Estafanos Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 17. Jul. 2013 15:17 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Im Übrigens wäre das ein gute Ansatz, denn warum ist die Selektion so Zeitaufwendig? Weil die Selektion dargestellt wird. Diese Bildberechnung kostet zeit und kann mit HSOSynchronized = false deaktiviert werden birgt aber die von mir erwähnten Bugs. Ein weiterer Ansatz könnte es sein, CATIA unsichtbar zu schalten mit "CATIA.Visible = False" und nach der Bearbeitung wieder auf True zu setzen. Ob das etwas bringt weis ich allerdings nicht. Nur verstehe ich dann anscheinend immer noch nicht, wie du es machst. Der Beispielcode arbeitet auch immer mit einer Selection bzw. eine Sel.Search-Funktion, die ebenfalls eine Selection zur Folge hat. In meinem Beispiel is es genau die gleiche Funktion, nur das ich nicht per StartCommand, sondern per Visproperties arbeite. Daher ist mir aktuell unklar, wie deins schneller sein kann. BTW Wir arbeiten auch mit Baugruppen die zig tausend Obejekte beinhalten, also du redest hier nicht unbedingt mit einem, der nicht weis, wovon du redest. Ich weis daher nicht, warum der von mir dargelegte Code langsam sein sollte bzw. welcher Code bei dir schneller ist. Ich würde mich freuen, wenn du mir den schnelleren Code zeigen könntest. Im Übrigen wirst du bei sehr großen Datenmengen immer mit dementsprechend großer Verarbeitungszeit rechnen müssen. Du kannst zwar immer optimieren, aber z.B. Latebinding ist da nicht unbedingt sinnvoll und schon garnicht in Schleifen immer neu binden etc.. Wie auch immer, finde ich deinen Ansatz irgendwie nicht zielführend und deine Ansprüche leicht an der Realität vorbei geschossen. Außerdem habe ich noch keinen sinnvollen Code von dir gesehen, zu dem ich explizit etwas sagen könnte. Nur eine Aufgabenstellung und ein Startcommand fürs Produkt der im Übrigen "Verdecken/Anzeigen" lautet, dürfte die Sache kaum schneller machen, da du dafür trotzdem selektieren und / oder suchen musst. Ergänzung: Habe deine Antwort gelesen. Der Code ist so schon derbe optimiert. Mehr geht mit VBA-Mitteln eigentlich garnicht. Reinzoomen und CATIA-Fenster ausblenden bzw. minimieren geht aber alles per Code. Würde ich nur nicht machen, da das Probleme mit Windows und dem Treiber etc. der gesamten Verarbeitung geben kann. Wenn man dies tut, sollte man dem System zumindest durch z.b. "DoEvents" auch die Mittel und Möglichkeiten geben, diese Aktionen auszuführen, da diese im gleichen Thread abgehandelt werden. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Estafanos Mitglied
Beiträge: 27 Registriert: 17.07.2012 Catia V5 R22, Windows 7
|
erstellt am: 17. Jul. 2013 15:41 <-- editieren / zitieren --> Unities abgeben:
wenn ein Part mit 30.000 Elementen dauert die Ausführungszeit nur 3 Sec. aber leider weiß ich nicht, wie man das Skript unter einer Baugruppe funktionsfähig machen kann? Du kannst gerne für einen Part mit vielen Elementen ausprobieren. dann wirst du feststellen, dass es wissentlich schneller ist. Ich kann leider nicht sagen, an was das liegt. Diese Selektion betrifft nur die Geometrical sets, die sind bei mir nur 5 Geometical sets. Danach wird "Hide Components" ausgeführt. Bitte nach dem Ausprobieren Bescheid geben, ob es bei dir so schnell läuft? oder liegt das vielleicht an der Installation von Catia (bei Uns)? Mein Code lautet: Sub CATMain() Uhrzeit1 = Time Dim oProdukt Set oProdukt = CATIA.ActiveDocument Dim oSel As Selection Set oSel = oProdukt.Selection oSel.Search "(((CATStFreeStyleSearch.OpenBodyFeature + CATPrtSearch.OpenBodyFeature) + CATGmoSearch.OpenBodyFeature) + CATSpdSearch.OpenBodyFeature),all"
CATIA.StartCommand "Hide Components" oSel.Clear Uhrzeit2 = Time A = DateDiff("s", Uhrzeit1, Uhrzeit2) MsgBox A End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 17. Jul. 2013 16:10 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Ja ist schnell... ...und mein Beispiel... Code: Sub CATMain() Uhrzeit1 = Time Dim oProdukt Dim oVisPropSet As VisPropertySet Dim oSel As Selection Set oProdukt = CATIA.ActiveDocument Set oSel = oProdukt.Selection Set oVisPropSet = oSel.VisProperties oSel.Search "(((CATStFreeStyleSearch.OpenBodyFeature + CATPrtSearch.OpenBodyFeature) + CATGmoSearch.OpenBodyFeature) + CATSpdSearch.OpenBodyFeature),all" oVisPropSet.SetShow 1 oSel.Clear
Uhrzeit2 = Time A = DateDiff("s", Uhrzeit1, Uhrzeit2) MsgBox A End Sub
... ist schneller bzw. gleichschnell. Wo wir wieder bei dem Thema währen. Ich glaube wir reden etwas aneinander vorbei. Die Suche ist dein Problem. Die in meinem Beispiel definierten Suchen definieren exakt die Sachen, die immer ausgeblendet werden sollen. Darunter sind Part- und auch Produkt-elemente. Diese musst du deinen Wünschen anpassen. Allerdings geht es dann auch schon kaum noch schneller. Der Rest ist tatsächliche Berechnung vom System, welches ebenfalls alle Objekte innerhalb der Produktstruktur durchgehen muss. Dabei werden verschiedenste Objekte und Typen definiert und darauf verwiesen. Das bedeutet deutlich mehr Aufwand, als im Part alleine. Du suchst in deinem Fall nach offenen Körpern. Dies sollte alleine auch nicht lange dauern im Produkt. Mein oben genannter Code sucht aber nach deutlich mehr. Ebenen, Achsen, Coordsystemen, geo. Elementen, Bedingungen usw.... das ist eine ganz andere Hausnummer! Was du allerdings noch machst, ist alle zu suchen. Ich habe extra nur die gesucht, die sichtbar sind. Dadurch wird deutlich weniger selektiert... Versuch es mal mit folgendem Code:
Code:
Sub CATMain() Uhrzeit1 = Time Dim oProdukt Dim oVisPropSet As VisPropertySet Dim oSel As Selection Set oProdukt = CATIA.ActiveDocument Set oSel = oProdukt.Selection Set oVisPropSet = oSel.VisProperties oSel.Search "((((CATStFreeStyleSearch.OpenBodyFeature + CATPrtSearch.OpenBodyFeature) + CATGmoSearch.OpenBodyFeature) + CATSpdSearch.OpenBodyFeature) & Visibility=Shown),all" oVisPropSet.SetShow 1 oSel.Clear Uhrzeit2 = Time A = DateDiff("s", Uhrzeit1, Uhrzeit2) MsgBox A End Sub
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Estafanos Mitglied
Beiträge: 27 Registriert: 17.07.2012 Catia V5 R22, Windows 7
|
erstellt am: 17. Jul. 2013 16:58 <-- editieren / zitieren --> Unities abgeben:
Ich glaube, dass wir von unterschiedlichen Sachen reden. ich möchte alle Elementen unter alle Geometrical Sets ausblenden und nicht die Geometrical Sets selbst. Ich weiss, dass das Ergbnis auf den ersten Blick gleich aussieht. Es ist für die Konstrukteure von sehr hilfreich, wenn nur die Elemente ausgeblendet werden, dann bei Parents/Childern suche (Vor allem bei sehr verschalteten Geo sets), dann erreicht der Konstrukteur ganz schnell was er sucht. z. B. eine Skizze ist auf eine Ebene konstruiert wurde. Wenn der Konstrukteur „Parents/Childern“ von der Skizze sucht, dann kommt die in dem Fenster „Parents and Childern“ die Ebene. Die Ebene in deinem Fall (Skript) ist eingeblendet. Bei verschachtelten Geo Set ist sehr mühsam zuerst die richtige Geo Set einzublenden. Und wenn der Konstrukteur das richtige Geo set gefunden hat und einblendet, dann werden alle Elemente eingeblendet. Ich hoffe, meine Ausführungen die Unterschiede klarer gestellt haben. Hier dafür 2 Bilder von den Ergebnissen. Was ich gerne wissen möchte, kann man die "CATIA.StartCommand "Hide Components" für die Baugruppe funktionsfähig machen? Vielen Dank im Voraus Mit freundlichen Grüßen Estafanos Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 17. Jul. 2013 17:08 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
Dann verstehe ich dein Problem Du musst im Endeffekt alles auf Partebene machen. Sprich du musst die gesamte Baugruppenstruktur durchgehen jedes einzelene Part aktivieren, darin suchen und per Startcommand die Dinge ausblenden. Denn die in "Hide Components" enthaltene Funktion geht dann über alle Elemente und blendet diese einzeln aus. Das macht die im Produktdesign aber nicht und das dürfte nur mit der Selektion auf Partebene funktionieren. Wenn du die Elemente einzeln ausblenden möchtest, muss du diese natürlich auch gezielt selektieren und ausblenden, was wiederum aber nicht über das GeoSet funktioniert.
------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Estafanos Mitglied
Beiträge: 27 Registriert: 17.07.2012 Catia V5 R22, Windows 7
|
erstellt am: 19. Jul. 2013 10:12 <-- editieren / zitieren --> Unities abgeben:
|
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 19. Jul. 2013 11:39 <-- editieren / zitieren --> Unities abgeben: Nur für Estafanos
|