Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  minimale Distanz zwischen 2 CATProducts

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  minimale Distanz zwischen 2 CATProducts (3060 mal gelesen)
flyernb
Mitglied
Fertigungsplaner

Sehen Sie sich das Profil von flyernb an!   Senden Sie eine Private Message an flyernb  Schreiben Sie einen Gästebucheintrag für flyernb

Beiträge: 4
Registriert: 05.02.2007

erstellt am: 07. Jun. 2007 12:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 'selection1

Set 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 failed

Wer 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


Sehen Sie sich das Profil von noir333 an!   Senden Sie eine Private Message an noir333  Schreiben Sie einen Gästebucheintrag für noir333

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für flyernb 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von qli an!   Senden Sie eine Private Message an qli  Schreiben Sie einen Gästebucheintrag für qli

Beiträge: 13
Registriert: 16.04.2007

erstellt am: 08. Jun. 2007 11:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für flyernb 10 Unities + Antwort hilfreich

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

Sehen Sie sich das Profil von flyernb an!   Senden Sie eine Private Message an flyernb  Schreiben Sie einen Gästebucheintrag für flyernb

Beiträge: 4
Registriert: 05.02.2007

erstellt am: 11. Jun. 2007 12:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von qli an!   Senden Sie eine Private Message an qli  Schreiben Sie einen Gästebucheintrag für qli

Beiträge: 13
Registriert: 16.04.2007

erstellt am: 11. Jun. 2007 14:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für flyernb 10 Unities + Antwort hilfreich

Hi,

Bei mir geht nur wenn ich die oDistance so deklariere:

Dim oDistance

und nicht so:

Dim oDistance As Distance


qli

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

noir333
Mitglied
Ingenieur


Sehen Sie sich das Profil von noir333 an!   Senden Sie eine Private Message an noir333  Schreiben Sie einen Gästebucheintrag für noir333

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für flyernb 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von noir333 an!   Senden Sie eine Private Message an noir333  Schreiben Sie einen Gästebucheintrag für noir333

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für flyernb 10 Unities + Antwort hilfreich

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz