| |
| KISTERS 3DViewStation: Unterstützung für 3D CAD Kollaboration mit Lieferanten, eine Pressemitteilung
|
Autor
|
Thema: Translate bis Intersect / Kontakt (1272 mal gelesen)
|
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 20. Mrz. 2019 15:55 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe eine Frage an die Catia Experten. Ich möchte eine Fläche so lange translaten, bis ein intersect mit einer anderen Fläche entsteht. Also quasi eine Funktion "mache ein Translate mit 0,1mm; wenn Intersect nein, mache noch ein Translate mit 0,1mm, wenn Intersect nein, mache noch ein Translate mit 0,1mm usw. Ich habe an Checks bzw, Rules gedacht, aber kann man damit nach dem Prüfen, ob ein Kontakt vorliegt, ein Befehl hinterherschieben? Vielen Dank schonmal! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Mrz. 2019 18:12 <-- editieren / zitieren --> Unities abgeben: Nur für Desken
Servus Ist das Element groß genug dass du beim Translate "Bis zu Element" nutzen kannst? Oder ggf den Abstand messen und dann den Wert für den Translate nutzen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wolfi_z Moderator Konstrukteur
Beiträge: 2461 Registriert: 04.12.2004
|
erstellt am: 21. Mrz. 2019 06:16 <-- editieren / zitieren --> Unities abgeben: Nur für Desken
Wenn Du weisst, welcher Punkt auf Flaeche A der ist, der am naechsten zu Flaeche B liegt (funktioniert ggf. mit Extremum), dann kannst Du ja in diesem Punkt X eine Line normal to surface erstellen, und dann die Intersection mit B bilden (Y), und dann Translate point to point X -> Y durchfuehren. LG ... Wolfi ------------------ NX neun minus CATIA fuenf ergibt Hartz IV Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 21. Mrz. 2019 08:22 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antworten! Die Flächen sind groß genug, es soll ein Pendel simuliert werden, welche gegen ein Stoßfänger schlägt. Ich kenne den UptoElement Befehl nur beim Extrude, geht das denn auch beim Translate? Da das Pendel nicht aus ebenen Flächen besteht, wird deine Idee mit einer Linie normal to Surface leider auch nicht funktionieren, Wolfi. Das Pendel wird aus verschiedenen vorgegebenen Winkeln "Geschossen" und es soll dann ermittelt werden, wo es als erstes aufschlägt. Meine Idee war es, dass zunächst eine Genauigkeit (0,1mm) als Parameter eingegeben wird und dieser Wert dann in die ganzen Translates eingelesen werden. Es ensteht somit ein Raster aus Translateflächen, bis ein Kontakt mit dem Stoßfänger vorliegt.. Kann man denn mit Rules oder anderen versteckten Befehlen eine If Then Schleife aufbauen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 21. Mrz. 2019 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für Desken
Servus Schon mal überlegt das in einer Baugruppe zu bestimmen: - zB mit "Manipulation bei Kollision stoppen" - oder in der Kinematik bzw Fitting Workbench Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 21. Mrz. 2019 09:10 <-- editieren / zitieren --> Unities abgeben:
|
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 21. Mrz. 2019 10:32 <-- editieren / zitieren --> Unities abgeben:
Wobei die Idee gar nicht so schlecht ist. Überlege gerade, die Prüfung doch ohne Powercopy zu machen, sondern nur mittels VBA Makro. Wäre es möglich, den Befehl Manipulation up to Clash mittels Macro auszuführen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 21. Mrz. 2019 13:42 <-- editieren / zitieren --> Unities abgeben:
Noch eine Idee, die mir eingefallen ist: Per Makro den Befehl Translate durchgeben und anschließend ein Intersect durchführen lassen. Mit einer If-Schleife soll der Vorgang wiederholt werden, wenn eine Fehlermeldung (Intersect nicht möglich, Update error)erscheint. Dies sollte solange durchgeführt werden, bis ein Intersect möglich ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 21. Mrz. 2019 14:41 <-- editieren / zitieren --> Unities abgeben: Nur für Desken
Servus Das sollte per Makro möglich sein. Ein Codebeispiel um zu prüfen ob sich zwei Elemente überschneiden findest du hier. Wenn du für Optimierungen eine Lizenz hast müsste es damit auch gehen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 21. Mrz. 2019 15:13 <-- editieren / zitieren --> Unities abgeben:
|
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 22. Mrz. 2019 08:24 <-- editieren / zitieren --> Unities abgeben:
Servus Bernd, ich bekomme es gerade nicht auf die Reihe, die Funktion aus deinem Link einzubinden. Er fordert vor der Function ein EndSub. Wird das gesetzt, wird das Makro wie gewohnt an der Stelle beendet und die Funktion wird ignoriert. Es wird vorher ein Geoset und ein Translate erzeugt. Dann soll mit der Funktion die Intersection geprüft werden. Mir fehlt da glaube ich noch ein Befehl wie Run Funktion() etc... Gruß Dennis Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 22. Mrz. 2019 08:28 <-- editieren / zitieren --> Unities abgeben: Nur für Desken
Servus Die Function muss außerhalb der Sub im Code stehen. In deinem Programm wird die Funktion dann nur aufgerufen (und entsprechende Objekte übergeben). ggf fehlen dir ein paar Grundlagen zu VB(A). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 22. Mrz. 2019 08:45 <-- editieren / zitieren --> Unities abgeben:
Da hast du recht, Grundlagen fehlen mir noch. Gerade im Bereich Functions Collections etc. Habe zwar schon ein kleines Tutorial durchlaufen. Kennst du noch eine gute Seite für mit Tutorials? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 22. Mrz. 2019 10:47 <-- editieren / zitieren --> Unities abgeben:
Ich habe die Funktion CheckIntersection soweit es geht an meinen Code angepasst, jedoch kommt die Fehlermeldung "Argument not optional", was mich gerade verzweifeln lässt. Ich habe schon recherchiert, aber noch keinen Hinweis gefunden. Scheinbar stimmt etwas mit meinen Parametern noch nicht: Hier ein Teil des Codes:
Code:
part1.UpdateDim Stoßfaenger As HybridShapeSurfaceExplicit Set Stoßfaenger = parameters1.Item("10A_807_109____DMU_TM__019_____TRAEGER_STOSSF-VO-_VZD5226") Dim hybridShapes2 As HybridShapes Set hybridShapes2 = hybridBody1.HybridShapes Dim Pendel As HybridShapeTranslate Set Pendel = hybridShapes2.Item("Translate.4") Debug.Print CheckIntersection 'Hier die Felhlermeldung
End Sub
Function CheckIntersection(Stoßfaenger As Variant, Pendel As Variant) As Boolean On Error GoTo Blast Dim TestInt As HybridShapeIntersection Set TestInt = hybridBody1.AddNewIntersection(Stoßfaenger, Pendel) CATIA.ActiveDocument.Part.UpdateObject TestInt CheckIntersection = True Exit Function Blast: CheckIntersection = False End Function
Über einen Hinweis wäre ich sehr dankbar! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 22. Mrz. 2019 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für Desken
Servus Wie wäre es so: Code: Dim Pendel As HybridShapeTranslate Set Pendel = hybridShapes2.Item("Translate.4")Debug.Print CheckIntersection Stoßfaenger, Pendel 'ggf mit Klammern End Sub Function CheckIntersection(Object1 As Variant, Object2 As Variant) As Boolean On Error GoTo Blast Dim TestInt As HybridShapeIntersection Set TestInt = MyHSFactory.AddNewIntersection(Object1, Object2) CATIA.ActiveDocument.Part.UpdateObject TestInt CheckIntersection = True Exit Function Blast: CheckIntersection = False End Function
Die Gültigkeit von Variablen scheint dir noch nicht klar zu sein. Vermutlich muss MyHSFactory (die HybridShapeFactory) als globale Variable deklariert und zuweisen sein. (oder Function entsprechend umbauen) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 22. Mrz. 2019 12:11 <-- editieren / zitieren --> Unities abgeben:
Es hat jetzt geklappt, es hat mit meiner hybridshapefactory noch nicht hingehauen und die Parameter wurden nochmal klarer definiert. Ich bin Schritt für Schritt den Code nochmal durchgegagen. Die Funktion wird nun verwendet und es wird geprüft, ob ein Intersect da ist. Die nächsten Schritte sind: Einbauen in eine Schleife, Einlesen des Translatebetrages über einen Parameter. Bis dahin schonmal Vielen Dank, ich melde mich garantiert nochmal Code:
Sub CatMain() Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument
Dim part1 As Part Set part1 = partDocument1.Part Dim hybridShapeFactory1 As HybridShapeFactory Set hybridShapeFactory1 = part1.HybridShapeFactory Dim hybridBodies1 As HybridBodies Set hybridBodies1 = part1.HybridBodies Dim hybridBody1 As HybridBody Set hybridBody1 = hybridBodies1.Item("Konstruktion") Dim hybridShapes1 As HybridShapes Set hybridShapes1 = hybridBody1.HybridShapes Dim hybridShapeIntersection1 As HybridShapeIntersection Set hybridShapeIntersection1 = hybridShapes1.Item("Intersect.1") Dim reference1 As Reference Set reference1 = part1.CreateReferenceFromObject(hybridShapeIntersection1) Dim hybridShapeDirection1 As HybridShapeDirection Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirection(reference1) Dim hybridShapeTranslate1 As HybridShapeTranslate Set hybridShapeTranslate1 = hybridShapeFactory1.AddNewEmptyTranslate() Dim hybridShapeTranslate2 As HybridShapeTranslate Set hybridShapeTranslate2 = hybridShapes1.Item("Translate.1") Dim reference2 As Reference Set reference2 = part1.CreateReferenceFromObject(hybridShapeTranslate2) hybridShapeTranslate1.ElemToTranslate = reference2 hybridShapeTranslate1.VectorType = 0 hybridShapeTranslate1.Direction = hybridShapeDirection1 hybridShapeTranslate1.DistanceValue = -5# hybridShapeTranslate1.VolumeResult = False Dim hybridBody2 As HybridBody Set hybridBody2 = hybridBodies1.Item("Translation") hybridBody2.AppendHybridShape hybridShapeTranslate1 part1.InWorkObject = hybridShapeTranslate1 part1.Update Dim parameters1 As Parameters Set parameters1 = part1.Parameters Dim Stoßfaenger As HybridShapeSurfaceExplicit Set Stoßfaenger = parameters1.Item("10A_807_109____DMU_TM__019_____TRAEGER_STOSSF-VO-_VZD5226") Dim hybridShapes2 As HybridShapes Set hybridShapes2 = hybridBody2.HybridShapes Dim Pendel As HybridShapeTranslate Set Pendel = hybridShapeTranslate1 Debug.Print CheckIntersection(Stoßfaenger, Pendel) End Sub Function CheckIntersection(Stoßfaenger As Variant, Pendel As Variant) As Boolean On Error GoTo Blast Dim TestInt As HybridShapeIntersection Set TestInt = hybridShapeFactory1.AddNewIntersection(Stoßfaenger, Pendel) CATIA.ActiveDocument.Part.UpdateObject TestInt CheckIntersection = True MsgBox "Yes" Exit Function Blast: CheckIntersection = False MsgBox "No" End Function
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Desken Mitglied
Beiträge: 24 Registriert: 12.03.2019 Intel Xeon Cpu E5-1620 32Gb Ram Catia V5
|
erstellt am: 28. Mrz. 2019 15:19 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, komme gerade bei der Weitergabe der Ergebnisse der Funktion (True/False) nicht weiter.. Die Funktion läuft super durch und definiert auch "Ergebnis" als "True bzw False" Verlasse ich nun die Funktion und gehe wieder ins Hauptsub, setzt er den Wert stets auf false, obwohl die Funktion True ausgegeben hat... Müsste ich das Ergebnis in der Funktion neu definieren oder doch in der Sub neu definieren? Code:
... Dim Ergebnis As Boolean If Ergebnis = False Then MsgBox "Hier kein Intersect" Else: MsgBox "jfjhgkjdfs" End If End Sub
Private Function CheckIntersection(MeineStrakflaechen As Variant, X As Variant) As Boolean
Dim MeinDokument As PartDocument Set MeinDokument = CATIA.ActiveDocument Dim MeinPart As Part Set MeinPart = MeinDokument.Part Dim MeineFactory As HybridShapeFactory Set MeineFactory = MeinPart.HybridShapeFactory Dim Ergebnis As Boolean Dim Bla As String On Error GoTo Blast Dim TestInt As HybridShapeIntersection Set TestInt = MeineFactory.AddNewIntersection(MeineStrakflaechen, X) CATIA.ActiveDocument.Part.UpdateObject TestInt Ergebnis = True MsgBox "Intersection!" Exit Function Blast: Ergebnis = False MsgBox "Keine Intersection!"
End Function
Kann man das Thema in ein anderen Forum (VBA-Programmierung)verschieben? Danke! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Mrz. 2019 18:21 <-- editieren / zitieren --> Unities abgeben: Nur für Desken
Servus Schau dir mal unbedingt die Grundlagen zu VB an. Im Speziellen die Sichtbarkeit/Gültigkeit von Variablen. Die ursprüngliche Funktion ist so aufgebaut dass durch einen Aufruf diese zB Code: if CheckIntersection(Stoßfaenger, Pendel) is false then 'oder = false?? 'weiterer Code end if
direkt ohne einen (globalen) Parameter diese verwendet werden kann. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |