Autor
|
Thema: Makro geometrische Set (4935 mal gelesen)
|
Beemer328 Mitglied Konstrukteurin Dipl.Ing.(FH)
Beiträge: 104 Registriert: 22.10.2008
|
erstellt am: 30. Jan. 2009 08:24 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte in einem CATPart automatisch durch ein Makro geometrische Sets erstellen lassen. Ich kenne mich mit der Makroprogrammierung nicht gut aus und kann das nur über die Makroaufzeichnung. Dadurch habe ich es geschafft, dass ein Set erstellt wird aber es bekommt dann nicht den Namen, den ich bei der Aufzeichnung eingegeben habe. Was füge ich in das Makro ein, damit das neue Set einen Namen bekommt. Bisher sieht es so aus: Language="VBSCRIPT" Sub CATMain() Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim hybridBodies1 As HybridBodies Set hybridBodies1 = part1.HybridBodies Dim hybridBody1 As HybridBody Set hybridBody1 = hybridBodies1.Add() part1.Update End Sub Vielleicht gibt es auch eine elegantere Variante. Freue mich über jeden Vorschlag.
------------------ Grüße Julia ------------------------------- Click OK to terminate Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 30. Jan. 2009 08:38 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
|
denyo_1 Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 30. Jan. 2009 08:38 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
Hallo Julia, du hast schon alles richtig gemacht dir fehlt nur noch die Methode das geometrische Set (hybridBody1-Objekt) umzubenennen. Das geht in deinem Fall mit hybridBody1.Name = "TEST" Hier mal dein Code ein wenig übersichtlicher umgeschrieben: Code:
Sub CATMain()Dim oDoc As Document Dim oPart As Part Dim ohyBodies As hybridBodies Dim ohyBody As HybridBody Set oDoc = CATIA.ActiveDocument Set oPart = oDoc.Part Set ohyBodies = oPart.hybridBodies Set ohyBody = ohyBodies.Add() ohyBody.Name = "Test" 'Hier wird das Set umbenannt! oPart.Update End Sub
------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
denyo_1 Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 30. Jan. 2009 08:40 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
Zitat: Original erstellt von Jens Hansen: Hallo, den namen kannst du nachträglich vergeben.Dim hybridBody1 As HybridBody Set hybridBody1 = hybridBodies1.Add() hybridBody1.Name = "Ich_bin_Willi" SG Jens Hansen
Da hatte jemand flinkere Finger
------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beemer328 Mitglied Konstrukteurin Dipl.Ing.(FH)
Beiträge: 104 Registriert: 22.10.2008
|
erstellt am: 30. Jan. 2009 08:41 <-- editieren / zitieren --> Unities abgeben:
Ich nochmal. Habe in meinem Lieblingsforum (dieses hier) folgendes gefunden. Jetzt möchte ich nur noch die Sets an eine bestimmte Stelle z.B. unterhalb eines vorhandenen Sets erstellt haben. Kann man das da noch einbauen? sub CATMain() dim ar() set mypart = CATIA.ActiveDocument.Part pflichtnamen="Becks:Jever:Flens:Budwiser:Erdinger" set hybs = mypart.HybridBodies a = split(pflichtnamen,":") for j = 0 to UBound(a) if hybs.Count > 0 then found = 0 for i = 1 to hybs.Count if a(j) = hybs.Item(i).Name then found = 1 end if next end if if found = 0 then set newhb = mypart.HybridBodies.Add newhb.Name = a(j) end if next end sub ------------------ Grüße Julia ------------------------------- Click OK to terminate Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 30. Jan. 2009 08:44 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
|
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 30. Jan. 2009 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
|
Beemer328 Mitglied Konstrukteurin Dipl.Ing.(FH)
Beiträge: 104 Registriert: 22.10.2008
|
erstellt am: 30. Jan. 2009 08:55 <-- editieren / zitieren --> Unities abgeben:
Erstmal vielen Dank für die schnellen Antworten. Funktioniert auch super. Aber mit dem letzten komme ich nicht richtig zurecht. An welcher Stelle von dem Schleifenmakro mit den Biersorten muss das rein? (ihr seid so schnell, da kommen meine Fragen später als die Antworten ) ------------------ Grüße Julia ------------------------------- Click OK to terminate Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 30. Jan. 2009 09:14 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
|
Beemer328 Mitglied Konstrukteurin Dipl.Ing.(FH)
Beiträge: 104 Registriert: 22.10.2008
|
erstellt am: 30. Jan. 2009 09:22 <-- editieren / zitieren --> Unities abgeben:
Es gibt eine vorhandene Struktur mit Sets und Untersets. Und nun sollen in diese Sets und auch in manche Untersets neue Sets automatisch erzeugt und automatisch benannt werden. Könnte auch sein, dass die neu erzeugten Sets als "Vater" für vorhandene dienen müssen. Es ist also eine verschachtelte Struktur. Das Schleifenmakro muss nicht unbedingt sein, hat mir nur gefallen, weil es nur neue Sets erzeugt, wenn diese noch nicht vorhanden sind. ------------------ Grüße Julia ------------------------------- Click OK to terminate Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 30. Jan. 2009 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
Naja... es muss schon definiert sein, wann ein GS unterhalb eines anderen GS erzeugt werden soll und wann nicht. Generell ist es so, dass zu erst das "Vater"-Set angesprochen werden muss: bei neues GS mit: Set hb1 = part1.HybridBodies.Add bei bestehenden mit: Set hb1 = part1.HybridBodies.Item("Name_des GS_oder index") wobei das letztere sich auf die oberste Ebene bezieht. Tiefer verschaltet sieht es dann so aus: Set hb1 = part1.HybridBodies.Item(2).Hybridbodies.Item(1).Hybridbodies.Item("Name") Hier wären wir dann schon auf der 3. Unterebene Wenn unterhalb des ausgewählten GS ein weiteres GS hin soll dann gehts mit Set hb2 = hb1.HybridBodies.Add weiter Das war es schon ... SG Jens Hansen ------------------ Inoffizielle CATIA-Hilfeseite Private Seite Xing Kochbuch - CATIA V5 automatisieren
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
denyo_1 Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 30. Jan. 2009 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
Hi, hier habe ich mal ein kleines Beispiel. Ist kein geo-Set im Part vorhanden, wird ein eingefügt. Ist aber eins vorhanden, muss das Anwender das geo-Set auswählen unter dem er das neue einfügen will. Code:
Sub CATMain() Dim oDoc As Document Dim oPart As Part Dim ohyBodies As hybridBodies Dim ohyBody As HybridBody Dim oType(0) Dim Auswahl 'Dim oSel As Selection Set oDoc = CATIA.ActiveDocument Set oSel = oDoc.Selection Set oPart = oDoc.Part Set ohyBodies = oPart.hybridBodies If ohyBodies.Count = 0 Then Set ohyBody = ohyBodies.Add() ohyBody.Name = "Erste Stufe" 'Hier wird das Set umbenannt! Else oType(0) = "HybridBody" Auswahl = oSel.SelectElement2(oType, "Bitte wählen Sie den Hauptkörper aus", False) If Auswahl = "Normal" Then Set ohyBody = oSel.Item(1).Value 'Hier hole ich mit das obere geometrische Set oSel.Clear Set ohyBodies = ohyBody.hybridBodies 'Hier hol ich mir alle geo-Sets meines geo-Set Set myNewBody = ohyBodies.Add() 'Hier füg ich das neu geo-Set unterhalb dem alten myNewBody.Name = "Zweite Stufe" Else Box = MsgBox("Der Anwender hat die Selektion abgebrochen!" + Chr(10) + "das Makro wird beendet!", vbExclamation + vbOKOnly, "Abbruch durch Anwender") oSel.Clear Exit Sub End If End If oPart.Update End Sub
------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beemer328 Mitglied Konstrukteurin Dipl.Ing.(FH)
Beiträge: 104 Registriert: 22.10.2008
|
erstellt am: 30. Jan. 2009 09:36 <-- editieren / zitieren --> Unities abgeben:
Danke, werd gleich mal rumprobieren. Allerdings muss es gar nicht so aufwendig sein. Der Benutzer sollte keine Eingaben machen müssen / können. Die vorhandene Struktur steht fest und das Resultat seht ebenfalls fest. Soll nicht benutzerdefiniert erzeugt werden. ------------------ Grüße Julia ------------------------------- Click OK to terminate Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
denyo_1 Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 30. Jan. 2009 09:51 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
Hallo, ok aber mit dem Beispiel kommst du zurecht? Sonst beschreib hier mal kurz die Struktur mit den reallen Namen der Sets, dann mach ich dir ein anderes Beispiel. ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beemer328 Mitglied Konstrukteurin Dipl.Ing.(FH)
Beiträge: 104 Registriert: 22.10.2008
|
erstellt am: 30. Jan. 2009 10:20 <-- editieren / zitieren --> Unities abgeben:
Ein Beispiel: So sieht die Beispielstruktur vorher aus: Konstrution - Kunststoff - Flächen - Zusammenbau - Metall Fertigung - Werkstoff - Symmetrie und so soll das Beispiel danach aussehen: Bauteil - Konstruktion - Kunststoff - Flächen - Skizzen - Zusammenbau - Metall Fertigung - Werkstoff - Symmetrie - Beispiele ------------------ Grüße Julia ------------------------------- Click OK to terminate Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
denyo_1 Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 30. Jan. 2009 11:08 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
Hi, ich hoffe das Teil hier bringt dich weiter. Sollte jetzt auf deine Struktur abgestimmt sein. Abfragen sind auch verwirklicht (die Sets werden NICHT doppelt erzeugt und die Grundgeometrie wird mit einer Fehlerbehandlung abgefragt, falls die Vater/Mutter -Sets nicht exisitieren) Hier der Code: Code:
Sub CATMain() 'by denyo_1 Dim oDoc As Document Dim oPart As Part Dim ohyBodies As hybridBodies Dim ohyBody As HybridBody Dim oType(0) Dim Auswahl Dim Z As Integer Dim Check As Integer Dim mySkizBody As Object Check = 0 Z = 0 Set oDoc = CATIA.ActiveDocument Set oSel = oDoc.Selection Set oPart = oDoc.Part Set ohyBodies = oPart.hybridBodies 'Hier wird das geo-Set angesprochen in dem das neue eigefügt werden soll in dem Fall in "Kunststoff" On Error Resume Next Set myKunstBody = ohyBodies.GetItem("Konstruktion").hybridBodies.GetItem("Kunststoff") If Err.Number = 0 Then On Error GoTo 0 Check = Check + 1 Set myKunstBodies = myKunstBody.hybridBodies Set mySkizBody = myKunstBodies.GetItem("Skizzen") If mySkizBody Is Nothing Then Z = Z + 1 Set mySkizBody = myKunstBodies.Add() mySkizBody.Name = "Skizzen" End If Else Box = MsgBox("Das geometrische Set ==> Skizzen <== kann nicht eingefügt werden!" + Chr(10) + _ "Grund: Das geometrische Set ==> Kunststoff <== wurde nicht gefunden!", vbExclamation + vbOKOnly, _ "Geo-Set nicht gefunden") End If 'Hier wird das geo-Set angesprochen in dem das neue eigefügt werden soll in dem Fall in "Symetrie" On Error Resume Next Set mySymBody = ohyBodies.GetItem("Fertigung").hybridBodies.GetItem("Symetrie") If Err.Number = 0 Then On Error GoTo 0 Check = Check + 1 Set mySymBodies = mySymBody.hybridBodies On Error Resume Next Set myBspBody = mySymBodies.GetItem("Beispiele") If Err.Number <> 0 Then On Error GoTo 0 Z = Z + 1 Set myBspBody = mySymBodies.Add() myBspBody.Name = "Beispiele" End If Else Box = MsgBox("Das geometrische Set ==> Beispiele <== kann nicht eingefügt werden!" + Chr(10) + _ "Grund: Das geometrische Set ==> Symetrie <== wurde nicht gefunden!", vbExclamation + vbOKOnly, _ "Geo-Set nicht gefunden") End If On Error GoTo 0 If Check = 0 Then Box = MsgBox("Es konnte kein geometrisches Set erstellt werden" + Chr(10) + _ "Die Grundgeometrie ist nicht korrekt!", vbCritical + vbOKOnly, "Falsche Grundgeometrie") ElseIf Z = 0 Then Box = MsgBox("Es wurde kein geometrisches Set hinzgefügt, da die Sets schon existieren!", vbInformation + vbOKCancel, "Makro erfolgreich beendet") ElseIf Z = 1 Then Box = MsgBox("Es wurde " & Z & " geometrisches Set hinzugefügt", vbInformation + vbOKOnly, "Makro erfolgreich beendet") ElseIf Z = 2 Then Box = MsgBox("Es wurden " & Z & " geometrische Sets hinzugefügt", vbInformation + vbOKOnly, "Makro erfolgreich beendet") End If oPart.Update End Sub
------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beemer328 Mitglied Konstrukteurin Dipl.Ing.(FH)
Beiträge: 104 Registriert: 22.10.2008
|
erstellt am: 30. Jan. 2009 11:33 <-- editieren / zitieren --> Unities abgeben:
Supi und vielen Dank für die Mühe. Sieht gut aus und ich bastel es gerade auf meine Struktur um. Gibts denn auch die Möglichkeit, dass ein Set "Bauteil" (siehe Beispiel) neu eingefügt wird und diesem dann eine vorhandene Setstruktur untergeordnet wird? Bei Catia geht das auf normalem Wege so: Einfügen -> geometrisches Set - > Auswahlfenster mit: Name: Name des neuen Set, das wäre bei meinem Bsp. das neue Set 'Bauteil'; Father: Name des übergeordneten Elementes, das wäre dann das Catpart Features: "Name des untergeordneten Sets, welches bei mir das bereits vorhandene Set 'Konstruktion' sein soll" ------------------ Grüße Julia ------------------------------- Click OK to terminate Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beemer328 Mitglied Konstrukteurin Dipl.Ing.(FH)
Beiträge: 104 Registriert: 22.10.2008 Intel XEON E3-1280 32GB Ram, Quadro P4000 Win 10 64bit Catia V5R24 Solidworks 2018
|
erstellt am: 30. Jan. 2009 11:36 <-- editieren / zitieren --> Unities abgeben:
|
denyo_1 Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 30. Jan. 2009 13:02 <-- editieren / zitieren --> Unities abgeben: Nur für Beemer328
Hallo Julia, das geht schon aber es gibt ein paar Einschänkungen. Diese Methode ("change geometrical Set") kann nicht direkt aufgerufen werden. D.h. es gibt zwei Möglichkeiten das selbe Zeil zu erreichen: 1. mit Cut & Paste das alte Set (mitsamt Unterstruktur) in das neue zu schieben 2. die Funktion (Cange geometrical Set) direkt über einen StartCommand Beide haben große Nachteile. zu 1. Die geometrischen Sets MÜSSEN komplett leer sein, d.h. das Makro funktioniert nur zum Erstellen von Startparts zu 2. Es ist keine Automatisierung, da der Anwender nach dem Aufruf des Command per Hand weiter machen muss. ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Senior Ingenieur HKLS (m/w/d) Biopharma & Life Science | Unsere Mitarbeiter:innen sind das Geheimnis unseres Erfolgs. Als Teil eines weltweiten Teams entwickeln Sie Ingenieurskunst für die Hightech-Märkte der Zukunft weiter, darunter Halbleiter, Batterien, Pharma, Biotechnologie und Rechenzentren. Gemeinsam arbeiten wir leidenschaftlich und ambitioniert an den Herausforderungen von heute und den Innovationen für morgen. Damit setzen wir die Tradition unseres Unternehmens fort und leisten unseren Teil zum Aufbau einer besseren Welt.... | Anzeige ansehen | Teamleitung, Gruppenleitung |
|
Beemer328 Mitglied Konstrukteurin Dipl.Ing.(FH)
Beiträge: 104 Registriert: 22.10.2008
|
erstellt am: 30. Jan. 2009 13:29 <-- editieren / zitieren --> Unities abgeben:
|