Autor
|
Thema: minimale Distanz zwischen 2 CATProducts (3060 mal gelesen)
|
flyernb Mitglied Fertigungsplaner
Beiträge: 4 Registriert: 05.02.2007
|
erstellt am: 07. Jun. 2007 12:56 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Helferlein, ich habe ein Problem mit dem Makrorekorder von Catia V5 R16! Ich habe viele Beiträge zum Thema Messen (Schieblehre als Button) für Elemente gefunden. Man kann aber auch "NUR PRODUCTS" auswählen und bekommt den min. Abstand. Ich benötige die Funktion für eine iterative Kollisionsprüfung, d.h. ich möchte ein Teil zum Referenzteil solange verschieben, bis der Mindestabstand erreicht ist (0 heißt Kollision). Eigentlich sollte die Funktion CLASH dafür gehen, nur kann ich nicht feststellen, wie dicht ich die Teile noch zusammenschieben muss, damit die Werte erreicht werden. Deshalb dieser Weg. Hier nun die Frage: Was muss ich einstellen, wenn ich speziell Products auswähle? Es wurden 2 Products (CGR-Files) selektiert. Funktioniert mit der Schieblehre wunderbar, Makro wird nicht aufgezeichnet! Beispielcode:
Code: Set ref1 = CATIA.ActiveDocument.Selection.Item(1).Reference 'selection1Set ref1 = CATIA.ActiveDocument.Selection.Item(2).Reference 'selection2 Dim TheMeasurable As Measurable Dim TheSPAWorkbench As Workbench Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Set TheMeasurable = TheSPAWorkbench.GetMeasurable(ref2) MinWert = TheMeasurable.GetMinimumDistance(ref1)
Das Problem ist, dass die Funktion GetMinimumDistance einen Fehler meldet: Automation error (Error 440) Method of "GetMinimumDistance" of object "Measurable failedWer kann mir den entscheidenden Hinweis geben. Vielleicht auch noch den Hinweis, wie ich die Methode Code: GetMinimumDistancePoints
eingebunden werden muss.Vielen Dank für eure super Erhahrungen hoffe ich. Gruß flyernb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 07. Jun. 2007 19:22 <-- editieren / zitieren --> Unities abgeben: Nur für flyernb
Hallo flyernb, bist Du sicher, dass Du in den beiden Referenzen die Products hat? Wenn ja, befürchte ich "measurable" ist für cgr's nicht möglich, denn das wäre ja eine exakte Messung. CGR's beinhalten aber nur das Facettenmodell. Aber Du kannst das ja mal manuell mit "exakter Messung" ausprobieren. zu getminimumdistancepoints: Dim MDP(8) As Object TheMeasurable = TheSPAWorkbench.GetMeasurable(reference1) dist = TheMeasurable.GetMinimumDistance(reference2) TheMeasurable.GetMinimumDistancePoints(reference2, MDP) in MDP(0 bis 2) XYZ Koordinate auf reference1 in MDP(3 bis 5) XYZ Koordinate auf reference2 (Der Code ist für VB.Net, aber die Syntax kannst Du ja anpassen...)
------------------ ----------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
qli Mitglied
Beiträge: 13 Registriert: 16.04.2007
|
erstellt am: 08. Jun. 2007 11:06 <-- editieren / zitieren --> Unities abgeben: Nur für flyernb
Hallo flyernb, Wenn es um Produkts geht, ich habe so was programmiert (siehe code unten), um Distance zu messen. Es geht wie bei dir, um die Bewegung eines Produkts (der andere bleibt stehen). Wenn die Distance =0 wird ein Parameter incrementiert (bei mir). Vieleicht so etwas brauchst du auch! qli Dim oProduct3Var Set oProduct3Var = oProductLocal3 Dim oMoveObject 'As Move Set oMoveObject = oProduct3Var.Move Dim oMoveObject2 'As Move Set oMoveObject2 = oProduct3Var.Move Dim oGroups As Groups Set oGroups = oProductLocal1.GetTechnologicalObject("Groups") Dim oGroup1 As Group Set oGroup1 = oGroups.Add oGroup1.AddExplicit oProductLocal2 Dim oGroup2 As Group Set oGroup2 = oGroups.Add oGroup2.AddExplicit oProduct3Var 'oProductLocal3 Dim oDistances As Distances Set oDistances = oProductLocal1.GetTechnologicalObject("Distances") Dim MeasureType As CatDistanceMeasureType Dim oDistance As Distance Set oDistance = oDistances.Add oDistance.MeasureType = catDistanceMeasureTypeMinimum oDistance.ComputationType = catDistanceComputationTypeBetweenTwo oDistance.FirstGroup = oGroup1 oDistance.SecondGroup = oGroup2 Dim i As Double Dim j As Double Dim dIInterval As Long Dim dJInterval As Long dJInterval = (dCoordZExtremumZMax + dPrecision - dCoordZExtremumZMin) / dPrecision Dim dCounter As Double Dim TransformationMatrix(11) TransformationMatrix(0) = 1 TransformationMatrix(1) = 0 TransformationMatrix(2) = 0 TransformationMatrix(3) = 0 TransformationMatrix(4) = 1 TransformationMatrix(5) = 0 TransformationMatrix(6) = 0 TransformationMatrix(7) = 0 TransformationMatrix(8) = 1 TransformationMatrix(9) = 0 'Verschiebung in X TransformationMatrix(10) = 0 'Verschiebung in Y TransformationMatrix(11) = dPrecision 'Verschiebung in Z Dim dMinimumValue As Double Dim TransformationMatrix2(11) TransformationMatrix2(0) = 1 TransformationMatrix2(1) = 0 TransformationMatrix2(2) = 0 TransformationMatrix2(3) = 0 TransformationMatrix2(4) = 1 TransformationMatrix2(5) = 0 TransformationMatrix2(6) = 0 TransformationMatrix2(7) = 0 TransformationMatrix2(8) = 1 TransformationMatrix2(9) = 0 'Verschiebung in X TransformationMatrix2(10) = dPrecision 'Verschiebung in Y For i = dIMinLocal To dCoordYExtremumYMax + dPrecision Step dPrecision For j = dCoordZExtremumZMin To dCoordZExtremumZMax + dPrecision Step dPrecision oDistance.Compute dMinimumValue = oDistance.Value If dMinimumValue = 0 Then lAreaLocal = lAreaLocal + 1 End If oMoveObject.Apply TransformationMatrix Next TransformationMatrix2(11) = -(j - dCoordZExtremumZMin) 'Verschiebung in Z oMoveObject.Apply TransformationMatrix2 dIInterval = (i - dIMinLocal) / dPrecision + 1 dCounter = dJInterval * dIInterval If dCounter >= 100000 Then Exit For End If Next Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
flyernb Mitglied Fertigungsplaner
Beiträge: 4 Registriert: 05.02.2007
|
erstellt am: 11. Jun. 2007 12:17 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank an noir333 und an qli, ihr habt mir beide sehr weitergeholfen. Die Distanzmessung zwischen 2 Produkten scheitert wirklich an den CGR-Daten. Komischerweise geht es aber im CATIA selbst, aber nur wenn man angenähert auswählt. Gibt es vielleicht auch für die Distanzmessungen einen Schalter, um die Genauigkeit einzustellen? Ich habe nämlich das Problem, dass ich den minimalen Abstand zwischen einer Ebene und einem Product messen will. Wie könnte ich da denn sonst vorgehen? Vielen Dank auch für deinen Code, lieber qli! Ich habe die für mich wichtigen Teile verwendet. Ich möchte die Messung noch erweitern und das Delta pro Koordinate wissen. Leider funktioniert die Anweiung:
Code: dim oCoordinates(2) oDistance.GetFirstPointCoordinates oCoordinates
nicht! Die Fehlermeldung gibt wieder: Function or interface marked as resticted, or the function uses an Automation type not supported in Visual Basic Wer kann mir helfen? Gruß flyernb Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
qli Mitglied
Beiträge: 13 Registriert: 16.04.2007
|
erstellt am: 11. Jun. 2007 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für flyernb
|
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 13. Jun. 2007 12:08 <-- editieren / zitieren --> Unities abgeben: Nur für flyernb
Hallo flyernb, also: die angenäherte Messung, die man manuell in V5 durchführen kann, berechnet den Abstand zwischen den CGR-Modellen, die man auf dem Bildschirm sieht, und zwar im wahrsten Sinne des Wortes. Verändert man unter Tools-Optionen-Allgemein-Anzeige-Leistung-3D-Genauigkeit den Wert für "Feste Größe", kann man die Genauigkeit beeinflussen. Die max. Abweichung beträgt dann 2xWert. In der Regel ist der Fehler aber kleiner. Ob Du mit "Distance" auch so eine angenäherte Messung machen kannst, weiß ich nicht. Ich habe in der Automation-Hilfe die Eigenschaft "Distance.Accuracy" gesehen, habe aber keine Erfahrungen, was das bewirkt. Vielleicht weiß qli dazu was? ------------------ ----------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 13. Jun. 2007 14:16 <-- editieren / zitieren --> Unities abgeben: Nur für flyernb
Hallo zusammen, ich will man meine eigene Frage beantworten: Man muss zwischen "Messung" und "Abstand" unterscheiden. Sow weit ich weiss, gibt es für "Messung" keine Unterstützung in der API. Im Gegensatz zu "Abstand", was es aber nur in einem Product gibt und in der API den Namen "Distance" hat. Die "Distance.accuracy" ist nur die Darstellungsgenauigkeit für die Bandanalyse. Die Genauigkeit der Berechnung sollte so wie oben beschrieben eingestellt werden können, da "Abstand" auch nur auf das CGR-Facettenmodell zurückgreift. ------------------ ----------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|