Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Makro to measure the distance between Join(Part) and Surfaces (Product)

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:  Makro to measure the distance between Join(Part) and Surfaces (Product) (1521 mal gelesen)
ghfjdksla
Mitglied
Konstrukteur


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

Beiträge: 10
Registriert: 25.09.2020

CATIA V5/R19

erstellt am: 25. Sep. 2020 18:35    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


image006.png


image007.png


image005.png

 
Hallo Forum,


ich brauche eure Hilfe.
Ich bin neu in dem Forum und relativ neu im Thema Catia-Makro-Programmierung.


Ich möchte gern den Minimalabstand von einer bestimmten Fläche/Join zu jeder Bohrung eines Products messen. Diese Messung sollte am besten visuell im Modell dargestellt werden. Optimal wäre der "Fan-Mode" aus den "Measure-Tools", allerdings scheint das ja über Makroprogrammierung nicht zu funktionieren.


Ich habe bereits diverse Codeschnipsel zusammengefügt, komme aber nicht auf das gewünschte Ergebnis, evtl. könnt ihr mir ja weiterhelfen.

Vielen Dank schonmal

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 25. Sep. 2020 20:12    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 ghfjdksla 10 Unities + Antwort hilfreich

Servus

Willkommen im Forum.
Die Messung sollte per GetMeasurable gehen. Die Herausforderung ist wohl den "Pfad" zu den Geometrien für die Reference zu ermitteln.
IMHO ist die Abstände im 3D darstellen zu lassen nicht möglich (oder über extreme Umwege)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

ghfjdksla
Mitglied
Konstrukteur


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

Beiträge: 10
Registriert: 25.09.2020

CATIA V5/R19

erstellt am: 28. Sep. 2020 06:34    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


2020-09-2806_23_00-CATIAV5-PHS-Backen.CATProduct.png

 
Hallo bgrittmann,

den Wert aus GetMeasurable kann ich mir z.B. als Msgbox ausgeben lassen.
Mein Ziel wäre alle Messungen (die <10mm sind) visuell darzustellen.

Ich muss den Abstand mehrerer hundert Bohrungen aus mehreren Parts zu einer Formfläche abfragen.

Ich habe mir aus mehreren Foren eine Lösung über "Edit Distance and Band Analysis" zusammengebastelt. Allerdings funktioniert das nur über ganze Parts und nicht einzelne Flächen:

Code:
Sub CATMain()

    Dim oCATIA As Application
   
    ' ===== Check if CATIA is open >>>>>
    On Error Resume Next
        Set oCATIA = catia
        If Err.Number <> 0 Then
            MsgBox "Could Not Get CATIA Application, Exiting Sub."
            Exit Sub
        End If
    On Error GoTo 0
    ' <<<<< Check if CATIA is open =====
 
    ' ===== Get 1./2. Part >>>>>
    Dim oPartDocument As PartDocument
    Set oPartDocument = Get_PartDocument
 
    Dim oRootProduct As ProductDocument
    ' <<<<< Get 1./2. Part =====
 
    If Not oPartDocument Is Nothing Then
        On Error Resume Next
            Set oRootProduct = oCATIA.ActiveDocument
            If Err.Number <> 0 Then
                MsgBox "The Active Document In The Session Is Not An Assembly, Exiting Sub."
                Exit Sub
            End If
        On Error GoTo 0
        Make_RootNode_Active
    End If
 
    Dim RootGroups As Groups
    Set RootGroups = oCATIA.ActiveDocument.Product.GetTechnologicalObject("Groups")

    Dim oGroup1 As Group
    Set oGroup1 = RootGroups.AddFromSel
    CreateGroupFromSelection oGroup1

    Dim oGroup2 As Group
    Set oGroup2 = RootGroups.AddFromSel
    CreateGroupFromSelection oGroup2
 
    Dim oGroup3 As Group
    Set oGroup3 = RootGroups.AddFromSel
 
'    Dim MaxDistance As Double
'    MaxDistance = GetDistanceBetweenGroups(oGroup1, oGroup2, oGroup3, True)
'    MsgBox "Max Distance is : " & vbCrLf & MaxDistance & "mm" '& vbCrLf & MaxDistance / 25.4 & "in"
 
    Dim MinDistance As Double
    MinDistance = GetDistanceBetweenGroups(oGroup1, oGroup2, oGroup3, False)
    MsgBox "Min Distance is : " & vbCrLf & MinDistance & "mm" '& vbCrLf & MinDistance / 25.4 & "in"
   
    RootGroups.Remove oGroup1
    RootGroups.Remove oGroup2
    RootGroups.Remove oGroup3
 
End Sub

Private Function GetDistanceBetweenGroups(iGroup1 As Group, iGroup2 As Group, iGroup3 As Group, Max As Boolean) As Double

    Dim dMaximum As Double
 
    If Max = True Then
        dMaximum = 0
    Else
        dMaximum = 1000000000
    End If
 
    Dim iOuter As Integer
    Dim iInner As Integer
    Dim oProduct1 As Product
    Dim oProduct2 As Product
 
    Dim RootDistances As Distances
    Set RootDistances = catia.ActiveDocument.Product.GetTechnologicalObject("Distances")
    Dim oDistance As Distance
 
    For iOuter = 1 To iGroup1.CountExtract
        Set oProduct1 = iGroup1.ItemExtract(iOuter)
        iGroup3.AddExplicit oProduct1
     
        For iInner = 1 To iGroup2.CountExtract
            Set oProduct2 = iGroup2.ItemExtract(iInner)
            iGroup3.AddExplicit oProduct2
         
            Set oDistance = RootDistances.Add
            oDistance.FirstGroup = iGroup3
            oDistance.Compute
           
            If (oDistance.IsDefined = 1) Then
                If Max = True Then
                    If (oDistance.Value > dMaximum) Then
                        dMaximum = oDistance.Value
                    End If
                Else
                    If (oDistance.Value < dMaximum) Then
                        dMaximum = oDistance.Value
                    End If
                End If
            End If

'            RootDistances.Remove oDistance
'            iGroup3.RemoveExplicit 2
        Next
        iGroup3.RemoveExplicit 1
    Next
   
    'X = RootDistances.Count
    RootDistances.Item(RootDistances.Count).Name = Round(oDistance.Value, 3) & "mm: " & oProduct1.Name & " <-> " & oProduct2.Name
 
    GetDistanceBetweenGroups = dMaximum

End Function

Private Sub CreateGroupFromSelection(iGroup As Group)
    Dim ProductArray() As Product
    ProductArray = MultiSelection("Product")
    Dim iIndex As Integer
    Dim oProduct As Product
    For iIndex = 0 To UBound(ProductArray)
        Set oProduct = ProductArray(iIndex).Value
        iGroup.AddExplicit oProduct
    Next
End Sub

Private Sub Make_RootNode_Active()

    Dim oSelection As Selection
    If TypeName(catia.ActiveDocument) = "ProductDocument" Then
        Set oSelection = catia.ActiveDocument.Selection
        oSelection.Clear
        oSelection.Add catia.ActiveDocument.Product
        AppActivate ("CATIA V5")                                          'Activate the catia window
        SendKeys "c:" & "FrmActivate" & Chr(13), True
    End If
    oSelection.Clear
    Set oSelection = Nothing

End Sub

Private Function Get_PartDocument() As PartDocument

    Dim oCATIA As Application
    Dim oDocument As Document
    Dim oSelection As Selection
    Dim oPart As Part

    Set oCATIA = catia
    Set oDocument = oCATIA.ActiveDocument
    Set oSelection = oDocument.Selection
    oSelection.Clear
    '---------------------------------------------------'
    If (InStr(oDocument.Name, ".CATPart")) = 0 Then
        oSelection.Search ("type=Part,in")
        On Error Resume Next
            Set oPart = oSelection.FindObject("CATIAPart")
            If Err.Number <> 0 Then
                oSelection.Clear
                Exit Function
            End If
        On Error GoTo 0
    Else
        Set oPart = oDocument.Part
    End If
    oSelection.Clear
    '---------------------------------------------------'
    Set Get_PartDocument = oPart.Parent
 
    Set oPart = Nothing
    Set oSelection = Nothing
    Set oDocument = Nothing
    Set oCATIA = Nothing
 
End Function

Private Function MultiSelection(sSelectType As String)

    Dim Item() As AnyObject
    Dim oPartDocument As PartDocument
    Dim oSelection 'As Selection
    Dim sStatus As String
    Dim sInputObjectType(0)
    Dim oReference As Reference
    Dim iIndex
 
    Set oSelection = catia.ActiveDocument.Selection
    oSelection.Clear
 
    sInputObjectType(0) = sSelectType
    sStatus = oSelection.SelectElement3(sInputObjectType, "Select a " & sSelectType, True, CATMultiSelTriggWhenUserValidatesSelection, True)
 
    If ((sStatus = "Cancel") Or (sStatus = "Undo")) Then
        oSelection.Clear
        Exit Function
    End If
 
    If oSelection.Count2 > 0 Then
        For iIndex = 1 To oSelection.Count2
            ReDim Preserve Item(iIndex - 1)
            Set Item(iIndex - 1) = oSelection.Item2(iIndex)
        Next
    End If
 
    MultiSelection = Item
    oSelection.Clear
 
    Set oReference = Nothing
    Set oSelection = Nothing

End Function


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

ghfjdksla
Mitglied
Konstrukteur


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

Beiträge: 10
Registriert: 25.09.2020

CATIA V5/R19

erstellt am: 28. Sep. 2020 07:04    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


Formschnitt10mmRoughOffset.png


WallThicknessAnalysis.png


RoughOffset10mm.png

 
Andere Herangehensweisen die ich versucht habe:

1. Formbacke mit RoughOffset 10mm der Methodenfläche verschneiden/splitten -> Wall Thickness Analysis
2. RoughOffset 10mm der Methodenfläche auf extrahiertes Bohrbild legen

Problem daran ist das ich es zwar visuell sehe aber trotzdem jede einzelne Bohrung messen muss...

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 28. Sep. 2020 09:10    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 ghfjdksla 10 Unities + Antwort hilfreich


BandAnalysis.png

 
Servus

Meine Ideen wie du vorgehen könntest:

  • bei der Bandanalyse nur visuell prüfen (siehe Bild, Auswertung zB an der Formfläche: rot: Minmalabstand unterschritten, grün: Abstand OK, keine Farbe: keine Bohrung in dem Bereich)
    ggf ist der Rechenaufwand sehr hoch (Geometrie, Genauigkeit)
  • GetMeasureable nutzen: jede Bohrung messen, falls der Mindestabstand unterschritten wird versuchen einen Marker3D zu setzen
    eventuell dies in den Parts einzeln durchführen (übersichtlicher, Referenzbildung für Messung einfacher)
  • GetMeasureable nutzen: falls das mit dem Marker nicht klappt, Ergebnisse in einer Liste/Tabelle ablegen (ggf noch Screenshot ablegen, die richtige Zoomstufe zu wählen ist interessant)
Hast du mal geschaut ob es schon fertige Kauflösungen für dein Vorhaben gibt?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

ghfjdksla
Mitglied
Konstrukteur


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

Beiträge: 10
Registriert: 25.09.2020

CATIA V5/R19

erstellt am: 28. Sep. 2020 11:38    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


EditDistanceandBandAnalysis.png


Bild1.png

 
Die Bandanalyse ist eine gute Idee (hätte ich auch selber drauf kommen können...  )

Im Nachgang kann man die Fläche zu den roten Stellen der Bohrungen (<10mm) per FanMode einzeln messen.
Rechenaufwand hält sich in Grenzen... (ca. 5min)

Dadurch sehe ich auch Bereiche die z.B. >25mm Abstand haben.

Optimal wäre natürlich wenn die Messunger autom. erstellt und visuell dargestellt werden könnten.


Was ein Marker3D ist weiß ich leider nicht, konnte in Google auch nix schlaues finden was das ist bzw. wie ich das für mich verwenden kann.

Wo finde ich Kauflösungen und was kostet sowas?

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 28. Sep. 2020 11:51    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 ghfjdksla 10 Unities + Antwort hilfreich

Servus

Zu Marker3D siehe Doku (V5Automation.chm im Installationsverzeichnis)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

ghfjdksla
Mitglied
Konstrukteur


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

Beiträge: 10
Registriert: 25.09.2020

CATIA V5/R19

erstellt am: 28. Sep. 2020 12:25    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

also 3D-Annotations.

kann ich damit Messungen darstellen?

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 28. Sep. 2020 12:38    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 ghfjdksla 10 Unities + Antwort hilfreich

Servus

Du könntest ja messen und dann den Wert als Text des Marker3D verwenden und ggf noch zu den "Messpunkten" die "Hinweislinie" setzen (vermutlich über AddObject und SetObjectPositions)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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