Autor
|
Thema: Distance bemessen (5916 mal gelesen)
|
barbara_ Mitglied
Beiträge: 53 Registriert: 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 mfG Barbara
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
louis Mitglied Geschäftsführer
Beiträge: 93 Registriert: 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 document Set document = CATIA.ActiveDocument Dim selection 'As selection Set selection = document.selection Dim TheSPAWorkbench As SPAWorkbench Dim TheMeasurable 'As Measurable Dim referenceObject As Reference Dim coords(2) As Variant Do Call selection.Clear Dim str str = selection.SelectElement(montab, "Please select an object", True) If str = "Normal" Then Dim count count = selection.count Dim Reference As Reference Dim 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 yesOrNo yesOrNo = MsgBox("Would you like to continue selecting object?", 4, "Selection Option") If (yesOrNo = 7) Then str = "Cancel" End If selection.Clear Loop While str = "Normal" Gruss Louis Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
barbara_ Mitglied
Beiträge: 53 Registriert: 26.03.2003
|
erstellt am: 04. Jul. 2003 13:53 <-- editieren / zitieren --> Unities abgeben:
|
barbara_ Mitglied
Beiträge: 53 Registriert: 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.Part Set 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 point1 myHBody.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. mfG Barbara
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
barbara_ Mitglied
Beiträge: 53 Registriert: 26.03.2003
|
erstellt am: 23. Jul. 2003 09:47 <-- editieren / zitieren --> Unities abgeben:
|
louis Mitglied Geschäftsführer
Beiträge: 93 Registriert: 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 1 Select 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: 53 Registriert: 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. mfG Barbara Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
louis Mitglied Geschäftsführer
Beiträge: 93 Registriert: 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 SPAWorkbench Dim 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: 53 Registriert: 26.03.2003
|
erstellt am: 29. Jul. 2003 18:48 <-- editieren / zitieren --> Unities abgeben:
|
louis Mitglied Geschäftsführer
Beiträge: 93 Registriert: 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: 53 Registriert: 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. mfG Barbara Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
msk74 Mitglied Student
Beiträge: 3 Registriert: 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 Part Dim 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.Part Set 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 P1 Bauteil.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: 321 Registriert: 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: 148 Registriert: 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: 118 Registriert: 05.05.2009 XP 64Bit CATIA V5R19SP4 MS Office 2003
|
erstellt am: 07. Mai. 2010 12:37 <-- editieren / zitieren --> Unities abgeben: Nur für barbara_
|
JoFa97 Mitglied Student
Beiträge: 7 Registriert: 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: 11901 Registriert: 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 |