Autor
|
Thema: Bounding Box (Länge, Breite, Höhe) (23380 mal gelesen)
|
Gepetto Mitglied Diplomand auf Arbeitssuche
Beiträge: 32 Registriert: 04.03.2009
|
erstellt am: 20. Apr. 2009 12:57 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, Ich muss mit einem Makro die Rohteilabmaße bestimmen. Dabei bin ich auf die Funktion Measure Inertia gestoßen. Ich habe aber noch nicht wirklich herausgefunden wie ich aus dieser die BoundingBox auslesen kann. Wenn man sich die "pricipalaxes" ausgeben lässt, gibt er leider nur die üblichen 9 Parameter aus. Wenn ich aber dort nun die Funktion "Export" verwende oder einfach auf "keep measure" klicke. Dann sind die Parameter BBLx, BBLy und BBLz vorhanden. Bei "Export" schreibt Catia diese hinter die 9 "Pricipalaxes" in der txt.Datei und bei "keep measure" werden diese als Parameter in "InertiaVolume" unter "Applications" angelegt. Also gibt es diese Parameter. Über: Dim oInertia As Object Set oInertia = CATIA.ActiveDocument.Product.GetTechnologicalObject("Inertia") Dim dMass As Double dMass = oInertia.Mass 'Masse Dim coordinates(2) oInertia.GetCOGPosition coordinates 'Center of Gravity Dim Matrix(15) oInertia.GetInertiaMatrix Matrix 'Massenträgheit Dim Values(2) oInertia.GetPrincipalMoments Values 'Hauptmomente Dim Components(15) oInertia.GetPrincipalAxes Components 'Hauptachsen lassen sich viele Informationen auslesen, aber an die BoundingBox komme ich so nicht! Bitte helft mir mal! Ich muss doch irgendwie an die BoundingBox kommen können! MfG Jan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11943 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Apr. 2009 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
|
Gepetto Mitglied Diplomand auf Arbeitssuche
Beiträge: 32 Registriert: 04.03.2009
|
erstellt am: 20. Apr. 2009 15:57 <-- editieren / zitieren --> Unities abgeben:
Ich hab das Script auch schon gefunden. Ich habe aber keinen Nutzen daraus ziehen können. Außerdem ist es nicht wirklich über die Funktion BoundingBox. Es wird ähnlich wie die Funktion, eine Box erstellt. Ich würde aber gerne die Parameter aus der Funktion "Inertia" auslesen. Wie kann ich das machen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 20. Apr. 2009 18:55 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo Jan, soweit ich weiß, gibt es in CATIA keine Möglichkeit den Boundingbox abzufragen. Man muss es, mit Geometrieerzeugung ermitteln. Die einzige Möglichkeit ohne Geometrie war es durch Schnitte (es gibt ein Beispiel dazu in der CATIA VBA Hilfe), da musst du aber die richtige Ebene für den Schnitt nehmen und es scheitert an diesen Punkt. Vielleicht weiß kennt aber jemand was besseres. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
denyo_1 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: 20. Apr. 2009 19:12 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo, ich geb dir recht wir hatten das Thema schon ein paar mal und sind immer hängen geblieben weil es keine Methode gibt die Box abzufragen. D.H. entweder du machst es über das schon existierende Makro oder die machst es mit dem Schnitt (würde ich aber nicht machen weil es sehr fehleranfällig ist ) ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gepetto Mitglied Diplomand auf Arbeitssuche
Beiträge: 32 Registriert: 04.03.2009
|
erstellt am: 21. Apr. 2009 09:47 <-- editieren / zitieren --> Unities abgeben:
Ich weiss es ist keine schöne Lösung, aber kann man nicht die Funktion "Measure Inertia" als solche aufrufen, dann den Haken bei "keep measure" setzen, "OK" klicken und dann die Parameter im Strukturbaum auslesen lassen? Es wird wahrscheinlich ein wirwar von StartCommands und SendKeys. Aber würde das gehen und wenn ja kann jemand mal nen Ansatz schreiben? MfG Jan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
denyo_1 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: 21. Apr. 2009 10:50 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo, das mit StartCommand fällt IMHO flach. Du wirst schon am zweiten Schritt verzweifel. Das Problem ist das du dem StartCommand Befehl kein Objekt übergeben kannst und somit brauchst du nach dem StartCommand erst mal einen Mausklick um ihm zu sagen wovon er überhaupt eine Trägheit messen soll. ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
.det Mitglied
Beiträge: 2 Registriert: 21.04.2009
|
erstellt am: 21. Apr. 2009 21:58 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo, wenn man es schaffen würde, alle Vertexes eines Bodies auszulesen, könnte man auch überlegen die bounding box selbst zu berechnen. Eine Achsen-Orientierte Bounding Box ist dabei recht einfach zu berechnen (suche kleinstes und größtes x/y/z, berechne anschließend Zentrum und Größe aus diesen Werten) und wäre vermutlich auch laufzeittechnisch schnell genug. mfg .det Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 22. Apr. 2009 16:54 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo .det, unter folgender Link findest du ein Algorithmus um sowas zu verwirklichen. mit Selection.Search kannst du eine Abfrage für alle Vertices machen, von jeden Vertex die Koordinaten auslesen. Ich bin aber der Meinung, für einen Part ist die Methode mit Geometrieerzeugung bedeutend einfacher (und wahrscheinlich auch schneller, da selection.search bei komplexe Sachen auch nicht gerade der schnellste ist). Algorithmus für Bounding Container in C++ Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied CAx-Spezialist
Beiträge: 1056 Registriert: 05.08.2000
|
erstellt am: 22. Apr. 2009 17:12 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
|
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 22. Apr. 2009 22:06 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo .get, falls du die Geometrieerzeugung unbedingt vermeiden willst, ist anbei ein CodeTeil, was alle Vertices sucht und in eine Schleife Min/Max in den 3 Achsenrichtungen bestimmt. Ist ziemlich einfach und unglaublich langsam. Es ist auch nicht zu erwarten, dass solche Programme schneller laufen, da eine Suche nach den Punkten und eine Messung auf jeden Punkt angewendet werden muss (und diese Operationen sind von einen Makro aus nicht besonders schnell). Die Vertexsuche lieferte bei mir allerdings auch ganz komische Ergebnisse. Ich empfehle dir nochmals diese Idee zu verwerfen. Wie Jens schon geschrieben hat, steht in sein Buch ja bereits die Lösung fertig drin. Code: Sub CATMain() Dim sStart As String sStart = Format(Now(), "HH:MM:SS") Dim adBoundingBoxCoordinates(5) As Double Dim adVertexCoordinates(2) Dim oSel As Selection Dim oActDoc As Document Dim i As Integer Dim oSelElement As SelectedElement Dim oSPAWorkbench As SPAWorkbench Dim oMeasurable 'As Measurable If CATIA.Documents.Count = 0 Then MsgBox ("No document!") Exit Sub End If Set oActDoc = CATIA.ActiveDocument Set oSel = oActDoc.Selection Set oSPAWorkbench = oActDoc.GetWorkbench("SPAWorkbench") oSel.Clear oSel.Search ("Topology.Vertex;all") If oSel.Count2 = 0 Then Exit Sub End If For i = 1 To oSel.Count2 Set oSelElement = oSel.Item2(i) Set oMeasurable = oSPAWorkbench.GetMeasurable(oSelElement.Reference) If oMeasurable.GeometryName = CatMeasurablePoint Then oMeasurable.GetPoint adVertexCoordinates 'hier müsste man ggf. in ein anderes Koordinatensystem umrechnen ' Debug.Print adVertexCoordinates(0), adVertexCoordinates(1), adVertexCoordinates(2) If i = 1 Then CheckForMinMax adVertexCoordinates, adBoundingBoxCoordinates, True Else CheckForMinMax adVertexCoordinates, adBoundingBoxCoordinates, False End If End If Next Debug.Print "X min max ", adBoundingBoxCoordinates(0), adBoundingBoxCoordinates(1) Debug.Print "Y min max ", adBoundingBoxCoordinates(2), adBoundingBoxCoordinates(3) Debug.Print "Z min max ", adBoundingBoxCoordinates(4), adBoundingBoxCoordinates(5) Debug.Print sStart, Format(Now(), "HH:MM:SS") End Sub Sub CheckForMinMax(ByRef adVertex, ByRef adMinMax, Init As Boolean) If Init Then adMinMax(0) = adVertex(0) adMinMax(1) = adVertex(0) adMinMax(2) = adVertex(1) adMinMax(3) = adVertex(1) adMinMax(4) = adVertex(2) adMinMax(5) = adVertex(2) Else adMinMax(0) = dMin(CDbl(adVertex(0)), CDbl(adMinMax(0))) adMinMax(1) = dMax(CDbl(adVertex(0)), CDbl(adMinMax(1))) adMinMax(2) = dMin(CDbl(adVertex(1)), CDbl(adMinMax(2))) adMinMax(3) = dMax(CDbl(adVertex(1)), CDbl(adMinMax(3))) adMinMax(4) = dMin(CDbl(adVertex(2)), CDbl(adMinMax(4))) adMinMax(5) = dMax(CDbl(adVertex(2)), CDbl(adMinMax(5))) End If End Sub Function dMin(dFirst As Double, dSecond As Double) As Double If dFirst < dSecond Then dMin = dFirst Else dMin = dSecond End If End Function Function dMax(dFirst As Double, dSecond As Double) As Double If dFirst > dSecond Then dMax = dFirst Else dMax = dSecond End If End Function
Gruß, Zoltan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gepetto Mitglied Diplomand auf Arbeitssuche
Beiträge: 32 Registriert: 04.03.2009
|
erstellt am: 23. Apr. 2009 09:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, dein Code ist sehr interessant. Ich hab nur eine Anmerkung: Was ist wenn beispielsweise wie beim Reichstag eine Kuppel ganz oben ist? Ich habe einen Test gemacht und ein verrundetes Bauteil in positiv z-Richtung als weitentfernteste Geometrie. Dann sind dort keine Vertex-Punkte die mit dem Makro erfasst werden können! Daher kann man nicht die exakte Dimension in Z erhalten. Vielleicht fällt dir noch was anderes ein! @Jens Hansen: In deinem Buch ist die Möglichkeit erklärt wie man es bei einem Partbody realisieren kann. Ich wollte aber eine Lösung für ein Produkt. Kann man die Erläuterungen aus deinem Buch auch darauf umändern? Ich hab leider nicht soviel Ahnung, dass ich das auf Anhieb überblicke! MfG Jan [Diese Nachricht wurde von Gepetto am 23. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied CAx-Spezialist
Beiträge: 1056 Registriert: 05.08.2000 CATIA V5 R32 VB.Net C# WPF
|
erstellt am: 23. Apr. 2009 11:57 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
|
Gepetto Mitglied Diplomand auf Arbeitssuche
Beiträge: 32 Registriert: 04.03.2009
|
erstellt am: 23. Apr. 2009 13:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Jens, leider habe ich Produkte mit teilweise 100 Einzelteilen. Ich will nicht 2min auf mein Makro warten. Daher fällt "generate CATPart from Product" raus! Hast Du evtl. eine andere Funktion, im Kopf mit der es schneller geht? Ich würde ja am liebsten eine Messung mit dem Produkt realisieren, aber nach ersten Recherchen geht das wahrscheinlich auch nicht! Bitte postet weitere Lösungsansätze! MfG Jan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11943 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Apr. 2009 13:20 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Servus Gibt es da nicht in der DMU-Umgebung (weiß nicht welcher Teil) ein Funktion dafür? Ist nur die Frage, ob sich für die Messung diese Lizenz rechnet. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 23. Apr. 2009 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo Gepetto, folgendes funktioniert gut und sogar relativ schnell: - du fängst an wie ursprünglich geplant und erzeugst dir über das TechnologicalObject "Inertia" die Hauptträgheitsachsen (GetPrincipalAxes) - du erzeugst ein neues Part, dessen AbsolutesAchsenSystem kongruent zu dem o.g. Hauptträgheitsachsen ist - du erzeugt eine hohlen Quader (d.h. eine Hüllkurve), der zu Beginn (in allen Richtungen) mittig zu dem Achsensytem ist. (Entwerder während der Laufzeit per Script oder du verbaust eine fertige Vorlage) - die Abstände der 6 Seiten (L1 bis L6) des Quaders lassen sich über einen Parameter steuern - der Quader ist zu Beginn hinreichend groß (also auf jeden Fall größer als die anderen Modelle - in einer Schleife Clash-Unetrsuchungen ausführen (2 Selectionen gegeneinander, der Quader + der Rest) - solange keine Kollision gefunden wird L1 bis L6 verringern - beim ersten Clash stop - CATIA gibt als Maß für die Größe der Kollison einen Abstand zurück (in mm) um den eins der beiden an der Kollision beteiligten Modelle verschoben werden muss, damit keine Kollision mehr auftritt. - Um diesen Mass + ein bischen (0,1mm) L1 bis L6 vergrößern, sodass keine Kollision mehr auftritt - dann L1 bis L6 einzeln auf die gleiche Weise nach und nach verringern - das geht relativ schnell, d.h. die Kollisionsuntersuchungen die zu keinen Clash führen benötigen fast keine Zeit. Im Idealfall hast du 7 Clashes (manchmal ein paar mehr). Du kannst manuell testen, wie lange das bei deinen Modellen dauert - Funktioniert auch im Cache-Modus (schneller) - Aufgrund der Definition des Massenträgheitsmomentes an sich ist immer BBLz < BBLy < BBLX. Das zu wissen hilft bei der Veränderung der Masse L1 bis L6 Einens solltest du noch beachten: bei der Berechung des Trägheitsmomentes (und damit der Ausrichtung des o.g. Achsenssytemes) werden alle Knoten im NoShow (Parts, Products etc) mitberechnet. D.h. es kann so was wie im Bild rauskommen (wenn das Volumen im NoShow sehr viel größer ist). Die Boundig-Box ist dann zwar i.O. aber die Ausrichtung der Achsen entspricht nicht mehr den der Trägheitsmomente. Gruß TomTom ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gepetto Mitglied Diplomand auf Arbeitssuche
Beiträge: 32 Registriert: 04.03.2009
|
erstellt am: 23. Apr. 2009 14:18 <-- editieren / zitieren --> Unities abgeben:
Der Ansatz gefällt mir! Hast Du evtl. schon so ein Makro programmiert und kannst mir hier den Quellcode zur Verfügung stellen? Wir hatten bei uns im Haus auch schon überlegt über Clasdetection zu gehen, wobei wir damit rechnen dass es lange dauern kann... Aber das würde ich dann gerne ausprobieren! MfG Jan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 23. Apr. 2009 16:07 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo Gepetto, ich kann dir helfen wenn du irgendwo nicht weiter kommst und spezielle Fragen hast. Aber ein fertiges Script werde ich hier nicht posten. Damit verdiene ich (unter anderem) meine Brötchen. Ich kann dir aber versichern das es so funktioniert wie oben beschrieben. Gruß TomTom ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
.det Mitglied
Beiträge: 2 Registriert: 21.04.2009
|
erstellt am: 23. Apr. 2009 23:06 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo zoltan, danke für Deinen interessanten code. Dass Makros, die die SPAWorkbench bemühen nicht besonders schnell sind, mußte ich leider an anderer Stelle feststellen. Stattdessen dachte ich daran, von den gefundenen Vertixes Referenzen zu erstellen, um diese dann auszulesen. also ungefähr folgendermaßen: oSelection.Search ("Topology.CGMVertex,sel") For i = 1 to oSelection.Count reftype = oSelection.Item(i).Type Select Case reftype Case "NotWireBoundaryMonoDimFeatVertex" Or "ZeroDimFeatVertexOrWireBoundaryMonoDimFeatVertex" refname = ExtractBRepName(oSelection.Item(i).Value.Name) Set ref4 = prt.CreateReferenceFromName(refname) Set hybShapePointExplicit = hybShapeFactory.AddNewPointDatum(ref4) hybShapePointExplicit.GetCoordinates(coord) Case "TriDimFeatVertexOrBiDimFeatVertex" End Select Next Private Function ExtractBRepName(s As String) As String Dim i, i2, n As Integer Dim tmp As String tmp = Replace(s, "Selection_", "") tmp = Replace(tmp, "_ResultOUT", "") i = InStrRev(tmp, ";") i = InStrRev(tmp, ";", i - 1) i = InStrRev(tmp, ";", i - 1) tmp = Left(tmp, i) tmp = tmp & "WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR14)" ExtractBRepName = tmp End Function Im Array coord würden dann die Koordinaten gespeichert werden. Geometrieerzeugung möchte ich unbedingt vermeiden, da die Teile einem Freigabeprozess unterliegen. Ich hoffe, daß dieser Weg eine bessere Laufzeit aufweist, allerdings werden die Modelle durch diese Weise wohl auch als modifiziert gelten. Kann man diese Änderungen noch rückgängig machen ? Gruß .det Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 24. Apr. 2009 09:25 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo .det, dein Code erzeugt auch Geometrie, obwohl es zu keinen Geometrical set hinzugefügt wird. Soweit ich die bisherige Ideen und Möglichkeiten sehe, wirst du Geometrieerzeugung kaum umgehen können. Mir persönlich gefällt die Idee von tomtom1972 am besten. Du kannst die Änderung bestehender Modelle evtl. umgehen, wenn die Modelle als Read-only geladen werden. Zu dein Code: Die Spielerei mit den Brep-Texten brauchst du wahrscheinlich nicht. Reicht die oSelection.Item2(i).Reference nicht aus? Beim Selection musst du Item2 und Count2 verwenden. Die anderen können problematisch funktionieren (auch laut Hilfe). Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gepetto Mitglied Diplomand auf Arbeitssuche
Beiträge: 32 Registriert: 04.03.2009
|
erstellt am: 30. Apr. 2009 11:59 <-- editieren / zitieren --> Unities abgeben:
|
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 04. Mai. 2009 07:24 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
|
Gepetto Mitglied Diplomand auf Arbeitssuche
Beiträge: 32 Registriert: 04.03.2009
|
erstellt am: 04. Mai. 2009 08:57 <-- editieren / zitieren --> Unities abgeben:
Hallo TomTom Ich bin ähnlich deiner Vorgabe vorgegangen. - Als erstes habe ich den Schwerpunkt ermittelt. Die Trägheitsachsen habe ich nicht berücksichtigt, weil mir die Ausrichtung im im Space wichtig ist. - Im Schwerpunkt habe ich dann einen Part erstellt, der Flächen bei +/- 10000mm besitzt. Jeweils Parallel zu den 3 Ebenen macht das einen großen Flächenwürfel. - Dann habe ich erst alle Flächenabsaände verringert und immer mit Clash auf Kontakt geprüft. Dabei habe ich eine Schleife genommen um die Abstände solange zu verringern bis ein Kontakt zustande kommt. - Die Flächen wurden dann über die Überschneidung zurückgesetzt und dann das ganze für jede Fläche einzeln erneut durchgeführt. - dann brauchte ich nur noch die Abstände messen und es war erledigt. Die Zeit für eine Berechnung hängt dabei ganz von den unterschiedlichen geometrischen Abmaßen in x,y,z ab. Damit meine ich, dass ein Würfel schneller als ein Besen berechnet ist. Ich denke Du weisst was ich meine... Danke nochmal für die guten Ratschläge MfG Jan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Maetes Mitglied Student
Beiträge: 118 Registriert: 05.05.2009 XP 64Bit CATIA V5R19SP4 MS Office 2003
|
erstellt am: 24. Apr. 2012 14:31 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo zusammen! Sorry wenn ich das alte Thema wieder rauskrame, aber gibt es da schon Fortschritte? Man kann die Werte BBLx, BBLy und BBLz recht gut auslesen unter: ActiveDocument.Product.Parameters.Item(x) Hab aber noch nicht rausgefunden, wie man die Werte den Teilen zuordnen kann. Wenn man nur einen Wert hat, ist dies ja kein Problem, wenn man mehrere hat, dann schon :-/ [Diese Nachricht wurde von Maetes am 24. Apr. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sky Walker Mitglied
Beiträge: 13 Registriert: 24.07.2012
|
erstellt am: 24. Jul. 2012 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo Maetes, wenn Dein Vorschlag der ist, an dem ich mich auch gerade versuche, dann muss man zuerst über "Measure Inertia" und durch "Keep Measure" ein "InertiaVolume" im Strukturbaum erzeugen, oder? Weißt Du zufällig, wie ich diesen Vorgang (also das Messen und die Messung beibehalten) in die Makro einbauen kann? Vielen Dank im Voraus! Doris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IGELReiser Mitglied
Beiträge: 9 Registriert: 16.11.2012 V5R19
|
erstellt am: 16. Nov. 2012 13:09 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Zitat: Original erstellt von Sky Walker: Hallo Maetes, wenn Dein Vorschlag der ist, an dem ich mich auch gerade versuche, dann muss man zuerst über "Measure Inertia" und durch "Keep Measure" ein "InertiaVolume" im Strukturbaum erzeugen, oder? Weißt Du zufällig, wie ich diesen Vorgang (also das Messen und die Messung beibehalten) in die Makro einbauen kann?Vielen Dank im Voraus! Doris
genau DAS würde mich auch sehr interessieren Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11943 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 16. Nov. 2012 17:35 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Servus Hier findest du eine PowerCopy die dir eine solch ausgerichtete Box erstellt. Oder bist du um Product unterwegs? Gruß Bernd EDIT: Link korrigiert. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sylas Mitglied
Beiträge: 347 Registriert: 19.11.2012 Dell Precision T3500 Intel Xeon W3550 @ 3,07 GHz 12 GB RAM CATIA V5 R28
|
erstellt am: 20. Jul. 2018 10:34 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo Zusammen Ich habe solche Code auf Internet gefunden (Ich weiß nich ob ich kann das hier verlinken, deshalb copy+paste):
Code:
Sub CATMain()On Error Resume Next Dim oPartDoc As PartDocument Dim oCurrentDoc As Document Dim oPart As Product Dim oInertia As Inertia Dim InputObjectType(1) As Variant Dim Status As String Dim oSelection As Variant Dim bCloseDoc As Boolean Set oCurrentDoc = CATIA.ActiveDocument 'Exclude Drawings If Right(oCurrentDoc.Name, 4) = "wing" Then MsgBox "This function only operates on a part or product" Exit Sub End If Set oSelection = oCurrentDoc.Selection
If Right(oCurrentDoc.Name, 4) = "Part" Then Set oPart = oCurrentDoc.Product oSelection.Add oPart 'GoTo RunBBOpenWindow End If If Right(oCurrentDoc.Name, 4) = "duct" Then bCloseDoc = True InputObjectType(0) = "Part" InputObjectType(1) = "Product" oSelection.Clear Status = oSelection.SelectElement2(InputObjectType, "Pick a Part, Escape to Cancel", False) If Status = "Cancel" Then Exit Sub Set oPart = oSelection.Item2(1).LeafProduct.ReferenceProduct If oPart.Name = oCurrentDoc.Product.Name Then bCloseDoc = False 'GoTo RunBBOpenWindow End If CATIA.StartCommand "open in new window" End If
RunBBNewWindow: Set oPart = CATIA.ActiveDocument.Product Dim oSelection2 Set oSelection2 = CATIA.ActiveDocument.Selection oSelection2.Add oPart RunBBOpenWindow: CATIA.StartCommand "Measure Inertia"
Dim xDim As String Dim yDim As String Dim zDim As String xDim = oPart.Parameters.GetItem("BBLx").Value yDim = oPart.Parameters.GetItem("BBLy").Value zDim = oPart.Parameters.GetItem("BBLz").Value xDim = CStr(Round(xDim, 0)) yDim = CStr(Round(yDim, 0)) zDim = CStr(Round(zDim, 0)) Dim oMatParam As Parameter Dim sMatParam As String Set oMatParam = oPart.Parameters.GetItem("Definition") sMatParam = oMatParam.ValueAsString Dim oMassParam As Parameter Dim sMassParam As String Set oMassParam = oPart.UserRefProperties.GetItem("PDB_MASS") sMassParam = oMassParam.ValueAsString If sMassParam = "" Then sMassParam = "0"
If sMassParam = "0" Then sMassParam = "" If Right(CATIA.ActiveDocument.Name, 4) = "Part" Then Set oInertia = oPart.GetTechnologicalObject("Inertia") Select Case oInertia.Density Case 0 sMassParam = "" Case 1000 sMassParam = "" Case Else sMassParam = CStr(Round(oInertia.Mass, 1)) End Select End If End If CATIA.StatusBar = "Start Creating Params"
Call SetParam(oPart, "LENGTH", xDim) Call SetParam(oPart, "WIDTH", yDim) Call SetParam(oPart, "THICKNESS/DIAMETER", zDim) Call SetParam(oPart, "MATERIAL", sMatParam) Call SetParam(oPart, "MASS", sMassParam) MsgBox "Properties Applied:" & _ vbCrLf & "LENGTH: " & xDim & _ vbCrLf & "WIDTH: " & yDim & _ vbCrLf & "THICKNESS/DIAMETER: " & zDim & _ vbCrLf & "MATERIAL: " & sMatParam & _ vbCrLf & "MASS: " & sMassParam & _ vbCrLf & "Check Results Carefully!", vbOKOnly, oPart.Name
CATIA.DisplayFileAlerts = False CATIA.StartCommand "Save" 'CATIA.ActiveDocument.Save CATIA.DisplayFileAlerts = True If bCloseDoc = True Then CATIA.ActiveDocument.Close
CATIA.StatusBar = "Macro Finished" End Sub Sub SetParam(ByRef oPart As Product, Name As String, Value As String) 'On Error GoTo CreateParam Dim sParam As Parameter Err.Clear Set sParam = oPart.UserRefProperties.GetItem(Name) sParam.ValuateFromString CStr(Value) 'GoTo Finish CreateParam: oPart.UserRefProperties.CreateString Name, CStr(Value) Finish: End Sub
Das gibt mir werte vom BoundingBox aber ich will jetzt die Werte nach custom AxisSystem (die vom Pad Skizze) gemasst habe. Wie kann ich das machen? Gruß Lukas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11943 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Jul. 2018 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Servus Vermutlich hilft dir dieses Makro nicht weiter, da IMHO du per StartCommand nicht die Trägheitsmessung anpassen kannst. Also wird es komplexer: zB Geometrie erzeugen und die Überschneidung messen -> Geometrie anpassen und langsam annähern (wie weiter oben beschrieben). Oder von "extern" per WinAPI die Klicks der manuellen Messung nachstellen Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 01. Aug. 2018 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo, ich weiß nicht genau wozu du die BoundingBox brauchst. Aber für die Rohmaßbestimmung bin ich folgender Maßen vorgegangen. Ich habe Planes in allen Richtungen (XYZ in Plus und in Minus) erzeugt die definitiv weiter auseinander liegen als das Bauteil groß ist, Dann habe ich von den Planes zum zu Messenden Body jeweils die minimum Distanz ermittelt und Damit die Größe in X,Y und Z berechnet. Funktioniert für unseren Anwendungsfall problemlos. 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 |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 01. Aug. 2018 13:17 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo, das Problem ist dabei nur, das du diese Ebenen unabhängig von der Geometrie ausrichtetst (vermute ich jetzt mal) und bei komplexen Geometrien erhälst du dann nicht die "minimalen Abmaße" (eben die Bounding Box), sondern lediglichg die kleinsten Abmaße bezogen auf die Ausrichtung deiner Ebenen. Gruß ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 01. Aug. 2018 13:21 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
|
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 01. Aug. 2018 13:39 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo, jein, wie gesagt für unseren Anwendungsfall. Bei uns selektiert der Benutzer eine ebene Fläche am zumessenden Body (eine Aufschraubfläche gibt es bei uns immer) und eine zweite Fläche die 90° dazu gedreht ist ( also eine Anlagefläche (ist meistens vorhanden) oder eine Plane oder eine Achsensystemfläche (auf dem wird meistens konstruiert, also vorhanden)). Für diese zwei klicks bekommt er HxLxB als Fertigmaß sowie HxLxB mit Aufmaß das Fertiggewicht und das Rohgewicht. Ich wollte damit nur sagen dass es besser ist, die Minimum-Distanz von einer Plane zum Solid zu messen als aufwendig mit Clash in TryandFail-Verfahren zu einem Wert zukommen. 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 |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 10. Jun. 2021 07:49 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Moin, anbei eine Lösung für das BoundingBox Problem, welches im Forum ja in unterschiedlichen Posts diskutiert wurde, der Beitrag hier war imo bisher inhaltlich am besten. Funktioniert für Volumengeometrien von einzelnen Parts oder kmpl. Strukturen, berücksichtigt wird nur die sichtbare Geometrie. Es wird die in der Trägheitsmessung angezeigte Hüllgeometrie nachgebaut, d.h. Grundlage bildet die Annahme, das sich die BoundingBox immer nach der Trägheitsmatrix ausrichtet; mir ist bisher kein anderer Fall untergekommen. Im .CATScript ist die Verwendung eines Startmodells notwendig (im Anhang, bitte die Endung .txt entfernen, ich konnte kein .CATProduct direkt hochladen), was bei mir im VisualBasic sonst mittels einer Resource erfolgt (im Code ausgedimmt). Die Verknüpfung der Parameter (die Ausgelesen werden) zur Inertia-Messung dient lediglich der Beschleunigung des Scriptlaufs, das direkte Abgreifen der Messung selber ist elendig langsam. Gruß TomTom Code: Language="VBSCRIPT" '--------- 2021, tomtom1972Sub CATMain() Catia.DisplayFileAlerts = False sTemp = Catia.SystemService.Environ("tmp") Set oFileSystem = CreateObject("Scripting.FileSystemObject") sNow = Timer sStrNow = "tmp" & Replace(sNow, ",", "") sFilePath = sTemp & "\" & sStrNow & ".CATProduct" If Catia.Windows.Count > 0 Then If TypeName(Catia.ActiveWindow.Parent) = "PartDocument" Then Set oRoot = Catia.ActiveDocument Set oToAdd = oRoot.Part ElseIf TypeName(Catia.ActiveWindow.Parent) = "ProductDocument" Then Set oRoot = Catia.ActiveDocument Set oToAdd = oRoot.Product Else MsgBox "Root is not a Part- or Product Document " & vbLf & "Script aborted.", 48, "Error" Exit Sub End If Else MsgBox "No Document is opened " & vbLf & "Script aborted.", 48, "Error" Exit Sub End If For i = 1 To Catia.Windows.Count If Catia.Windows.Item(i).Parent Is oRoot Then Set oRootWindow = Catia.Windows.Item(i) Exit For End If Next If oRootWindow.Parent.FullName <> oRootWindow.Parent.Name Then If oFileSystem.FileExists(oRootWindow.Parent.FullName) Then Else MsgBox "Root Documents File does not exist " & vbLf & "Script aborted.", 48, "Error" Exit Sub End If Else MsgBox "Root Document is not saved " & vbLf & "Script aborted.", 48, "Error" Exit Sub End If ''----for CATScript with startmodell sStartMPath = CATIA.FileSelectionBox("Select the BoundingBox.CATProduct", "BoundingBox.CATProduct", CatFileSelectionModeOpen) If oFileSystem.FileExists(sStartMPath) Then oFileSystem.CopyFile sStartMPath, sFilePath Else MsgBox "BoundingBox.CATProduct could not be found " & vbLf & "Script aborted.", 48, "Error" Exit Sub End If ''----in VB6 with resource 'Dim b() As Byte 'b = LoadResData(101, "CUSTOM") ' Open sTemp & "\" & sStrNow & ".CATProduct" For Binary As #1 ' Put #1, , b() 'Close #1 Set oBoundingBoxProduct = Catia.Documents.Open(sFilePath) oBoundingBoxProduct.Product.PartNumber = sStrNow Dim aInsert(0) aInsert(0) = oRootWindow.Parent.FullName Set oProds = oBoundingBoxProduct.Product.Products oProds.AddComponentsFromFiles aInsert, "All" oBoundingBoxProduct.Product.Update Set oParams = oBoundingBoxProduct.Product.Parameters Set oRootParamSet = oParams.RootParameterSet Set oParameterSet = oRootParamSet.ParameterSets Set oInertiaParamSet = oParameterSet.Item("Parameters_Inertia") Dim aParam(14) Set aParam(0) = oInertiaParamSet.DirectParameters.Item("A1x_param") Set aParam(1) = oInertiaParamSet.DirectParameters.Item("A1y_param") Set aParam(2) = oInertiaParamSet.DirectParameters.Item("A1z_param") Set aParam(3) = oInertiaParamSet.DirectParameters.Item("A2x_param") Set aParam(4) = oInertiaParamSet.DirectParameters.Item("A2y_param") Set aParam(5) = oInertiaParamSet.DirectParameters.Item("A2z_param") Set aParam(6) = oInertiaParamSet.DirectParameters.Item("A3x_param") Set aParam(7) = oInertiaParamSet.DirectParameters.Item("A3y_param") Set aParam(8) = oInertiaParamSet.DirectParameters.Item("A3z_param") Set aParam(9) = oInertiaParamSet.DirectParameters.Item("BBOx_param") Set aParam(10) = oInertiaParamSet.DirectParameters.Item("BBOy_param") Set aParam(11) = oInertiaParamSet.DirectParameters.Item("BBOz_param") Set aParam(12) = oInertiaParamSet.DirectParameters.Item("BBLx_param") Set aParam(13) = oInertiaParamSet.DirectParameters.Item("BBLy_param") Set aParam(14) = oInertiaParamSet.DirectParameters.Item("BBLz_param") iCnt = oProds.Count If iCnt <> 1 Then MsgBox "Error " & vbLf & "Script aborted.", 48, "Error" Exit Sub End If Set oBBPart = oProds.AddNewComponent("Part", "BoundingBox_" & sStrNow) If oProds.Count <> 2 Then MsgBox "Error " & vbLf & "Script aborted.", 48, "Error" Exit Sub End If On Error Resume Next Set oSel = Catia.ActiveDocument.Selection Set oPartDoc = oBBPart.ReferenceProduct.Parent Set oPart = oPartDoc.Part Set oHBS = oPart.HybridBodies If Err.Number <> 0 Then MsgBox "Error " & vbLf & "Script aborted.", 48, "Error" Exit Sub End If Set oHB = oHBS.Add() oHB.Name = "BoundingBox.GS" Set oHS = oHB.HybridShapes Set oHSF = oPart.HybridShapeFactory Set oAxSys = oPart.AxisSystems Set oAS1 = oAxSys.Add() oAS1.OriginType = catAxisSystemOriginByCoordinates Dim aAS1(2) aAS1(0) = aParam(9).Value aAS1(1) = aParam(10).Value aAS1(2) = aParam(11).Value oAS1.PutOrigin aAS1 Dim aAxisSystX(2) Dim aAxisSystY(2) Dim aAxisSystZ(2) aAxisSystX(0) = aParam(0).Value aAxisSystX(1) = aParam(1).Value aAxisSystX(2) = aParam(2).Value aAxisSystY(0) = aParam(3).Value aAxisSystY(1) = aParam(4).Value aAxisSystY(2) = aParam(5).Value aAxisSystZ(0) = aParam(6).Value aAxisSystZ(1) = aParam(7).Value aAxisSystZ(2) = aParam(8).Value oAS1.XAxisType = catAxisSystemAxisByCoordinates oAS1.YAxisType = catAxisSystemAxisByCoordinates oAS1.ZAxisType = catAxisSystemAxisByCoordinates oAS1.PutZAxis aAxisSystZ oAS1.PutYAxis aAxisSystY oAS1.PutXAxis aAxisSystX oPart.UpdateObject oAS1 oAS1.Name = "BoundingBoxAS" oAS1.IsCurrent = True Set oRefX = oPart.CreateReferenceFromBRepName("FEdge:(Edge:(Face:(Brp:(BoundingBoxAS;1);None:();Cf11:());Face:(Brp:(BoundingBoxAS;3);None:();Cf11:());None:(Limits1:();Limits2:());Cf11:());WithPermanentBody;WithoutBuildError;WithInitialFeatureSupport;MFBRepVersion_CXR15)", oAS1) Set oHSPCoor = oPart.CreateReferenceFromBRepName("FVertex:(Vertex:(Neighbours:(Face:(Brp:(BoundingBoxAS;2);None:();Cf11:());Face:(Brp:(BoundingBoxAS;3);None:();Cf11:());Face:(Brp:(BoundingBoxAS;1);None:();Cf11:()));Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", oAS1) Set oHSDirX = oHSF.AddNewDirection(oRefX) Set oHSLPDir = oHSF.AddNewLinePtDir(oHSPCoor, oHSDirX, 0, aParam(12).Value, False) oHSLPDir.Name = "BoundingBoxXDir" Set oRefY = oPart.CreateReferenceFromBRepName("FEdge:(Edge:(Face:(Brp:(BoundingBoxAS;2);None:();Cf11:());Face:(Brp:(BoundingBoxAS;1);None:();Cf11:());None:(Limits1:();Limits2:());Cf11:());WithPermanentBody;WithoutBuildError;WithInitialFeatureSupport;MFBRepVersion_CXR15)", oAS1) Set oHSDirY = oHSF.AddNewDirection(oRefY) Set oHSExtr1 = oHSF.AddNewExtrude(oHSLPDir, aParam(13).Value, 0, oHSDirY) oHSExtr1.Name = "BoundingBoxXYSurf" Set oRefZ = oPart.CreateReferenceFromBRepName("FEdge:(Edge:(Face:(Brp:(BoundingBoxAS;3);None:();Cf11:());Face:(Brp:(BoundingBoxAS;2);None:();Cf11:());None:(Limits1:();Limits2:());Cf11:());WithPermanentBody;WithoutBuildError;WithInitialFeatureSupport;MFBRepVersion_CXR15)", oAS1) Set oHSDirZ = oHSF.AddNewDirection(oRefZ) Set oHSExtr2 = oHSF.AddNewExtrude(oHSExtr1, aParam(14).Value, 0, oHSDirZ) oHB.AppendHybridShape oHSExtr2 oHSExtr2.Name = "BoundingBox " & Round(aParam(12).Value, 3) & "mm x " & Round(aParam(13).Value, 3) & "mm x " & Round(aParam(14).Value, 3) & "mm" oPart.Update ''---- optinal with isolated surface 'Set oDatumRef = oPart.CreateReferenceFromObject(oHSExtr2) 'aIsolatedSurface = oHSF.AddNewDatums(oHSExtr2) 'If UBound(aIsolatedSurface) = 0 Then ' oHB.AppendHybridShape aIsolatedSurface(0) ' aIsolatedSurface(0).Name = "BoundingBox " & Round(aParam(12).Value, 3) & "mm x " & Round(aParam(13).Value, 3) & "mm x " & Round(aParam(14).Value, 3) & "mm" ' oPart.InWorkObject = aIsolatedSurface(0) 'Else ' For s = 0 To UBound(aIsolatedSurface) ' oHB.AppendHybridShape aIsolatedSurface(s) ' aIsolatedSurface(s).Name = "BoundingBox." & s + 1 ' oPart.InWorkObject = aIsolatedSurface(s) ' Next 'End If 'oHSF.DeleteObjectForDatum oDatumRef 'oPart.Update Set oVis = oSel.VisProperties oSel.Clear oSel.Add (oHB) oVis.SetRealColor 204, 255, 102, 1 oVis.SetRealOpacity 0, 1 oSel.Clear If Err.Number <> 0 Then oSel.Clear oSel.Add (oHB) oSel.Add (oAS1) oSel.Delete oSel.Clear oPart.Update oSel.Search "Name=*Inertia,in" oSel.Delete oSel.Clear oBoundingBoxProduct.Close MsgBox "An Error occured during script running " & vbLf & "Script aborted.", 48, "Error" Exit Sub Else oPartDoc.SaveAs (sTemp & "\" & oPart.Name) End If oSel.Search "Name=*Inertia,in" oSel.Delete oSel.Clear End Sub
------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoFa97 Mitglied Student
Beiträge: 17 Registriert: 24.10.2023 CATIA V5
|
erstellt am: 27. Mrz. 2024 14:26 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hi zusammen, ich probiere grade dieses Skript von tom aus (letzte Antwort auf den Beitrag), und kriege die Fehlermeldungen, die ich in Screenshots angehangen habe (der zweite ergibt sich, wenn ich beim ersten auf "ok" drücke). Ich weiß, Ferndiagnosen sind immer schwer. Ich dachte ich probiere es einfach mal, vllt. sind ist ja auch schon einmal jemand auf diesen Fehler gestoßen. Bei anderen Bauteilen kriege ich den selben Fehler. Das Starting-Product habe ich ebenfalls ihrem Beitrag entnommen. Kann mir da jmd weiterhelfen? Danke und Liebe Grüße Joshua ------------------ Joshua Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11943 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Mrz. 2024 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Servus Kommentiere mal testweise das On Error Resume next aus, und schau wo der Fehler auftritt. Bzw hat das Einfügen deines Parts im die "Messbaugruppe" geklappt? Kannst du einschränken wann der Fehler im Code etwa auftritt? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 04. Apr. 2024 12:43 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Moin, ohne weitere Infos und nur auf Grundlage deiner Screenshots ist ein Eingrenzen des Fehlers recht schwierig: - ich habe das nie in der deutschen Sprachumgebung getestet, nur in der engl. - du hast Freizeichen in der Namensgebung verwendet, das hat bei uns in der Vergangenheit zu Problemen geführt. Die BRep-Strings sind dann anders aufgebaut. - Ich vermute dein CATPart ist irgendwo abgespeichert und nicht neu erzeugt und nur in dem Fenster geöffnet? Wie Bernd schon geschrieben hat: Kommentiere das On Error Resume Next aus und teile uns mal mit, in welcher Zeile des Scripts der Fehler auftritt. Gruß tomtom ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoFa97 Mitglied Student
Beiträge: 17 Registriert: 24.10.2023 CATIA V5
|
erstellt am: 09. Apr. 2024 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Hallo ihr beiden, erstmal danke für eure Antwort, ich probiere grade eine andere Methode über Powercopy. Sollte das nicht gehen befasse ich mich wieder mit dem Skript. ------------------ Joshua Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11943 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Apr. 2024 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für Gepetto
Servus Joschua Zusätzlich zu der PowerCopy gibt es hier im Forum noch ein Makro das den Ablauf der PowerCopy direkt als Geometrie aufbaut. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |