|  |  | 
|  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | 
|  |  | 
|  | Schnell, effizient und günstig: Mit der Kisters 3DViewStation 3D Arbeits- und Reparaturanleitungen einfach erstellen und pflegen, eine Pressemitteilung 
 | 
| Autor | Thema:  Distance bemessen (6376 mal gelesen) | 
 | barbara_ Mitglied
 
 
  
 
      Beiträge: 53Registriert: 26.03.2003
 |    erstellt am: 27. Jun. 2003 15:32  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo, um den Distance zwischen beliebigen Elementen ist in CATIA das Befehl "Messen zwischen" verantwortlich. Weiß jemand wie kriege ich das Ergebnis einer Messung per Makro? Danke im Voraus für jeden Tipp mfGBarbara
 
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | louis Mitglied
 Geschäftsführer
 
  
 
      Beiträge: 93Registriert: 07.05.2001
 V5 R19/R2014, WIN7, Visual Basic6.0 SP6 |    erstellt am: 30. Jun. 2003 12:36  <-- editieren / zitieren -->    Unities abgeben:           Nur für barbara_   
  Hallo Barbara, in VB funktionierts wie unten angegeben. In VBA muss man ein paar Zeilen aendern. Funktioniert aber komischerweise nur auf 3D-Pkt und nicht auf 2D-Skizzenpunkte. Dim montab(1)
 Set CATIA = GetObject(, "CATIA.Application")
 montab(0) = "Point"montab(1) = "Point2D"
 Dim document 'As documentSet document = CATIA.ActiveDocument
 Dim selection 'As selectionSet selection = document.selection
 Dim TheSPAWorkbench As SPAWorkbenchDim TheMeasurable 'As Measurable
 Dim referenceObject As Reference
 Dim coords(2) As Variant DoCall selection.Clear
 Dim str
 str = selection.SelectElement(montab, "Please select an object", True)
 If str = "Normal" ThenDim count
 count = selection.count
 Dim Reference As ReferenceDim selectedElement As selectedElement
 Dim object
 Dim I
 For I = 1 To count
 Set selectedElement = selection.Item(I)
 Set referenceObject = selectedElement.Reference
 selection.EndSelectElement
 Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
 Set TheMeasurable = TheSPAWorkbench.GetMeasurable(referenceObject)
 Call TheMeasurable.GetPoint(coords)
 MsgBox "Measured Point, x= " & coords(0) & " y= " & coords(1) & " z= " & coords(2)
 Next
 Else
 MsgBox str
 End If
 Dim yesOrNoyesOrNo = MsgBox("Would you like to continue selecting object?", 4, "Selection Option")
 If (yesOrNo = 7) Thenstr = "Cancel"
 End If
 selection.ClearLoop While str = "Normal"
 Gruss Louis  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | barbara_ Mitglied
 
 
  
 
      Beiträge: 53Registriert: 26.03.2003
 |    erstellt am: 04. Jul. 2003 13:53  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | barbara_ Mitglied
 
 
  
 
      Beiträge: 53Registriert: 26.03.2003
 |    erstellt am: 22. Jul. 2003 14:17  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo Louis, ich habe mir Dein Beispielmakro ausprobiert und es hat mir wirklich weitergeholfen, also danke noch mal.  Trotzdem stelle ich weitere Fragen, weil mir immer noch Einiges unklar ist: 1.Müssen die Objekte, die man messen will unbedingt als Shapes appendiert werden?Ich habe nähmlich ein Punkt und eine Fläche erzeugt, und wollte den Abstand messen. Leider ist das Ergebnis 0, erst wenn ich die Methode AppendHybridShape benutze und auf die Objekte über FindObjectByName zugreiffe kriege ich die gewünschte Ergebnis.
 2.Ist es möglich auf die Objekte zugreiffen, die durch Methode AppendHybridShape hinzugefügt wurden, ohne die exakte Name zu kennen? Das ist mein Testmakro: Sub CATMain() Set part1 = CATIA.ActiveDocument.PartSet hybridbodies1 = part1.HybridBodies
 Set myHBody = hybridbodies1.Add()
 Set point1 = part1.HybridShapeFactory.AddNewPointCoord(10,50,50)Set plane1 = part1.HybridShapeFactory.AddNewPlaneEquation(1,2,3,5)
 myHBody.AppendHybridShape point1myHBody.AppendHybridShape plane1
 'Set point1 = part1.FindObjectByName("Punkt.1")'Set plane1 = part1.FindObjectByName("Ebene.1")
 set ref1 = part1.CreateReferencefromObject(plane1)set ref2 = part1.CreateReferencefromObject(point1)
 Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")Set TheMeasurable = TheSPAWorkbench.GetMeasurable(ref2)
 MinDist =  TheMeasurable.GetMinimumDistance(ref1)
 MsgBox MinDist
 End Sub Leider funktioniert es nicht.Erst wenn ich die Kommentierung weglasse, kriege ich das gewünschte Ergebnis.
 Vielleicht fällt Dir welche Lösung ein. mfGBarbara
 
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | barbara_ Mitglied
 
 
  
 
      Beiträge: 53Registriert: 26.03.2003
 |    erstellt am: 23. Jul. 2003 09:47  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | louis Mitglied
 Geschäftsführer
 
  
 
      Beiträge: 93Registriert: 07.05.2001
 V5 R19/R2014, WIN7, Visual Basic6.0 SP6 |    erstellt am: 24. Jul. 2003 17:32  <-- editieren / zitieren -->    Unities abgeben:           Nur für barbara_   
  Hallo Barbara, bin in letzter Zeit nicht zum programmieren gekommen und kann Dir deshalb Deine Fragen nicht beantworten - wahrscheinlich bist Du schon weiter wie ich !Ich versuche in einem Produkt den Abstand von 2 Flächen in 2 Parts zu messen - bisher ohne Erfolg! Hast Du messen im Produkt schon realisiert ?
 Select Flaeche 1Select Flaeche 2
 Messe Distanz
 Vielen Dank für Deine Mühe im Voraus Herzliche Grüsse Louis 
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | barbara_ Mitglied
 
 
  
 
      Beiträge: 53Registriert: 26.03.2003
 |    erstellt am: 25. Jul. 2003 10:37  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo Louis, den Abstand zwischen 2 Flächen kannst Du mit dem SPAWorkbench genauso bemessen. Als ref1 und ref2 können Referenzen auf verschieden Objekte sein, welche genau, weiß leider nicht bescheid, aber mit zwei Flächen geht's bestimmt: Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")Set TheMeasurable = TheSPAWorkbench.GetMeasurable(ref2)
 MinDist =  TheMeasurable.GetMinimumDistance(ref1)
 MsgBox MinDist
 Selektieren von Flächen efolgt mit Hilfe der interaktiven Methode SelectElement, die kennst du bestimmt. mfGBarbara
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | louis Mitglied
 Geschäftsführer
 
  
 
      Beiträge: 93Registriert: 07.05.2001
 V5 R19/R2014, WIN7, Visual Basic6.0 SP6 |    erstellt am: 29. Jul. 2003 17:49  <-- editieren / zitieren -->    Unities abgeben:           Nur für barbara_   
  Hallo Barbara, ich habe folgendes Test-Scrípt geschrieben, welches aber weder in VBA noch in VB laeuft.   Dim TheSPAWorkbench As SPAWorkbenchDim TheMeasurable 'As Measurable
 Dim mySel 'As selection
 Dim mySuchStr(0)
 mySuchStr(0) = "Vertex"
 Set mySel = CATIA.ActiveDocument.selection
 Call mySel.Clear
 myFeedback = mySel.SelectElement(mySuchStr, "P. 1", True)
 Set myRef1 = mySel.Item(1).Reference
 Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
 Set TheMeasurable = TheSPAWorkbench.GetMeasurable(myRef1)
 Call mySel.Clear
 myFeedback = mySel.SelectElement(mySuchStr, "P. 2", True)
 Set myRef2 = mySel.Item(1).Reference
 MinDist = TheMeasurable.GetMinimumDistance(myRef2)MsgBox MinDist
 Weisst Du (oder jemand anderes ) wo ich hänge ?? Vielen Dank im Voraus Louis Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | barbara_ Mitglied
 
 
  
 
      Beiträge: 53Registriert: 26.03.2003
 |    erstellt am: 29. Jul. 2003 18:48  <-- editieren / zitieren -->    Unities abgeben:            | 
                        | louis Mitglied
 Geschäftsführer
 
  
 
      Beiträge: 93Registriert: 07.05.2001
 V5 R19/R2014, WIN7, Visual Basic6.0 SP6 |    erstellt am: 30. Jul. 2003 08:07  <-- editieren / zitieren -->    Unities abgeben:           Nur für barbara_   
  Hallo Barbara, bei der Zeile: MinDist = TheMeasurable.GetMinimumDistance(myRef2) bekomme ich die Fehlermeldung: Laufzeitfehler ....Das Verfahren GetMinimumDistance ist fehlgeschlagen
 Vielen Dank und herzliche Gruesse Louis Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | barbara_ Mitglied
 
 
  
 
      Beiträge: 53Registriert: 26.03.2003
 |    erstellt am: 30. Jul. 2003 08:53  <-- editieren / zitieren -->    Unities abgeben:            
  Hallo Louis, vielleicht liegt das Problem an Referenzen. Ich hatte schon auch Problem damit. Versuch die Methode  MsgBox myRef2.DisplayName Wenn das String einfach die Name des Objektes representiert, dann soll funktioniert. Manchmal werden die Objekte von Selection anders referenziert,z.B. Selection_RSur Face Brp GSMBiDim.2);None ));GSMBiDim.2) Mit diesem Typ von Referenzierung schlagen die meisten Methoden fehl.Dafür habe ich leider keine Lösung gefunden.
 mfGBarbara
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | msk74 Mitglied
 Student
 
 
      Beiträge: 3Registriert: 01.08.2003
 |    erstellt am: 05. Aug. 2003 15:00  <-- editieren / zitieren -->    Unities abgeben:           Nur für barbara_   
  Hi, habe auch das "beduerfnis" verspuert distanzen zu messen.    ich will dabei die minimale distanz von einem 3d-punkt aus einem hybridbody mit dem mainbody (ohne hybridbodies!) messen lassen. leider gibt mir catia v5r11, deutsche version unter windows 2000 als ergebnis immer die distanz 0! nehme ich anstatt mainbody ein bestimmtes shape (z.b. einen existierenden Block über  Set Koerper = Bauteil.FindObjectByName("Block.1") Set BauteilRef = Bauteil.CreateReferenceFromObject(Koerper) ) dann funktioniert die distanzmessung. daher die frage an das forum:wie kann ich die minimale distanzmessung eines punktes zum <mainbody> berechnen lassen?
 oder alternativ:benutze ich evtl. die "falsche" referenz zum mainbody?
 habe mir alternativ ueberlegt ueber alle shapes, die unter mainbody liegen, zu iterieren und jeweils getminimumdistance() berechnen zu lassen und davon das "absolut"-minimum zu nehmen. dies waere wohl bei groesseren parts eine "kleine" performance bremse, oder?   zur anschauung mein beispielscript:--------------------
 Sub CATMain() Dim Bauteil As PartDim Wzk3D As Factory
 Dim HBody As HybridBody
 Dim P1 As HybridShapePointCoord
 Dim RefP1 As Reference
 Dim Koerper
 Dim BauteilRef As Reference
 Set Bauteil = CATIA.ActiveDocument.PartSet Wzk3D = Bauteil.HybridShapeFactory
 Set HBody = Bauteil.HybridBodies.Add
 Set P1 = Wzk3D.AddNewPointCoord(10, 10, 10)
 Set RefP1 = Bauteil.CreateReferenceFromObject(P1)
 Set Koerper = Bauteil.FindObjectByName("Block.1")          ' ergebnis minimum distanz!  'Set Koerper = Bauteil.MainBody                            ' ergebnis 0!
 'Set Koerper = Bauteil.FindObjectByName("Hauptkörper")     ' ergebnis 0!
 Set BauteilRef = Bauteil.CreateReferenceFromObject(Koerper)
 'MsgBox (Koerper.Name)
 HBody.AppendHybridShape P1Bauteil.Update
 Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")Set TheMeasurable = TheSPAWorkbench.GetMeasurable(RefP1)
 MinDist = TheMeasurable.GetMinimumDistance(BauteilRef)
 MsgBox ("Minimum Distanz ist: " & MinDist)
 End Sub-----------------------
 mfg shani Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | zoltan.bekesi Mitglied
 
 
   
 
      Beiträge: 321Registriert: 22.10.2006
 Job:CATIA V5R19 / XP 32bit
 MS Office 2003
 Microstation V8 2004 Edition
 DELL Precision M6300
 |    erstellt am: 01. Mai. 2008 21:44  <-- editieren / zitieren -->    Unities abgeben:           Nur für barbara_   
  Hallo, ich habe ein ähnliches Problem und bin auf dem oben beschriebenen Verhalten gestoßen.Hat jemand vielleicht schon ein Workaround gefunden?
 Es ist häßlich, dass solche Fehler auch noch nach 5 Jahren unverändert existieren... Gruß,Zoltan
 [Diese Nachricht wurde von zoltan.bekesi am 01. Mai. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | noir333 Mitglied
 Ingenieur
 
   
 
      Beiträge: 148Registriert: 27.01.2004
 Dell Precision 450 Dual Xeon, 2MB RAM,XP SP2, NX3
 V5R17SP3
 |    erstellt am: 05. Mai. 2008 19:53  <-- editieren / zitieren -->    Unities abgeben:           Nur für barbara_   
  Hallo barbara, msk74, IBM würde sagen: "Works as designed!". Zu Bodies kann man keinen Abstand messen, weil ein Body keine geometrische Einheit ist, sondern eine logische. Dazu können Ebenen, Linien, etc. gehören. Zu einem Volumen kann man einen Abstand messen! Dazu sollte man die den Körper kopieren und in einem neuen Körper "als Ergebnis" (AsResult) einfügen. Dann entsteht ein totes Volumen, zu dem man vermessen kann. Zu den "Selection_RSur Face Brp GSMBiDim.2);None ));GSMBiDim.2)": Dabei handelt es sich um Unterelemente von Objekten (Breps). Auch zu denen kann man Abstände messen, man muss aber Referenzen erzeugen mit CreateReferenceFromName oder CreateReferenceFromBrepName. Viel Spaß...   -----------------------------
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                        | Maetes Mitglied
 Student
 
   
 
      Beiträge: 118Registriert: 05.05.2009
 XP 64BitCATIA V5R19SP4
 MS Office 2003
 |    erstellt am: 07. Mai. 2010 12:37  <-- editieren / zitieren -->    Unities abgeben:           Nur für barbara_   | 
                        | JoFa97 Mitglied
 Student
 
  
 
      Beiträge: 32Registriert: 24.10.2023
 CATIA V5 |    erstellt am: 02. Jan. 2024 11:49  <-- editieren / zitieren -->    Unities abgeben:           Nur für barbara_   
  Hallo Barbara bzw. Hallo zusammen,  wie kriege ich den Code in VB denn ans laufen, wenn ich die Distance zwischen zwei CAT-Parts in einem Product messen will?  Liebe Grüße ------------------Joshua
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP | 
                       
 | bgrittmann Moderator
 Konstrukteur
 
         
 
      Beiträge: 12117Registriert: 30.11.2006
 CATIA V5R19 |    erstellt am: 02. Jan. 2024 12:05  <-- editieren / zitieren -->    Unities abgeben:           Nur für barbara_   
  Servus Joshua Willst du eine Messung verwenden oder einer "Distance"?Zu Distance hilft ggf dieser Code weiter (von mir nicht getestet)
 ggf machst du auch eine neu Frage auf (ggf mit deinem Code den du schon hast) GrußBernd
 ------------------Warum einfach, wenn es auch kompliziert geht.
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |