| |
| CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min |
| |
| KISTERS 3DViewStation mit neuer Zerschneidefunktionen und erweitertem PMI-Support, eine Pressemitteilung
|
Autor
|
Thema: CATPart in CATProduct einfügen per VBA (1364 / mal gelesen)
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 27. Apr. 2023 14:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Community, ich arbeite gerade an einem Makro zur Generierung von Baugruppen. Ich traue es mir ja fast nicht zu sagen, aber irgendwie bekomme ich es nicht hin, dass ich bereits vorhandene CATParts oder CATProducts in einfügene kann. Eigentlich dachte ich, dass das relativ einfach mit den Befehlen "AddComponentsFromFiles" oder "AddExternalComponent" funktioniert (ähnlich wie in der CATIA Makro Bibel von Dieter R. Ziethen). Aber ich könnte mich an meinen nicht vorhandenen Haare raufen ... Das will einfach nicht so wie ich will Kann mir da jemand von euch auf die Sprünge helfen, wie ich ein bereits vorhandenes CATPart in eine vorhandene oder neue Baugruppe per Skriptsprache einfügen kann? Vielen Dank euch schonmal. Grüße Andy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lionel Hutz Mitglied
Beiträge: 467 Registriert: 26.03.2014 CATIA V5 R26
|
erstellt am: 27. Apr. 2023 15:14 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 28. Apr. 2023 08:51 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Lionel, vielen Dank für die rasche Antwort. Den Beitrag bei der tech-ecke habe ich auch gefunden und habe es jetzt noch einmal probiert (mit einem kleinem Testcode). Aber leider kommt immer noch eine Fehlermeldung (siehe Bild im Anhang). Zusätzlich habe ich noch ein Bild mit den Files im CAD gemacht, also sprich dieses Zeigt den CATPart und das CATProduct welche zusammengefügt werden sollen. Weißt Du/Ihr vllt. weshalb ich hier immer noch einen Felhler bekomme?? (Nachfolgend noch mein Testcode) Grüße Andy Testcode: Sub CATMain() Dim product1 As Product Set product1 = CATIA.ActiveDocument.Product 'Test AddComponentsFromFiles------------------------------------------ Dim Bauteil(0) Bauteil(0) = "G:\Konstruktion\KeyUser PLM-CAD-Berechnungssoftware\Skelettbasierte Konstruktion\Makroverzeichnis Automatisierung\SkelettTest.CATPart" product1.Products.AddComponentsFromFiles Bauteil, "All" '--------------------------------------------------------------------- End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12014 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Apr. 2023 09:03 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
|
Randle Mitglied CAD/PLM Consultant
Beiträge: 744 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 28. Apr. 2023 09:17 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Hallo zusammen, versuche es mal so (hat bei mir funktioniert).
Code:
Dim product1 'As Product
statt: Code:
Dim product1 As Product
Code:
Sub CATMain()Dim product1 'As Product Set product1 = CATIA.ActiveDocument.Product 'Test AddComponentsFromFiles------------------------------------------ Dim Bauteil(0) Bauteil(0) = "G:\Konstruktion\KeyUser PLM-CAD-Berechnungssoftware\Skelettbasierte Konstruktion\Makroverzeichnis Automatisierung\SkelettTest.CATPart" product1.Products.AddComponentsFromFiles Bauteil, "All" '--------------------------------------------------------------------- End Sub
Gruß Randle ------------------ Planung ersetzt Fehler durch Irrtum! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 28. Apr. 2023 10:55 <-- editieren / zitieren --> Unities abgeben:
Hi Randle, super vielen Dank. Ja jetzt funktioniert es. Wenn gerade bei dem Fehler sind. Kannst du mir mal sagen wenn ich eine Variable spezifisch deklarieren muss und in welchen Situationen das zu einem Compailierungsfehler führt. Dafür habe ich bisher nämlich noch keine Logik gefunden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12014 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Apr. 2023 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Servus Ich würde Variablen immer spezifisch deklarieren, dann sollte auch IntelliSense gehen. Erst wenn ein Fehler mir "restricted" kommt, würde ich den von mir verlinkten Tipp nutzen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 03. Mai. 2023 09:27 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Zusammen, ich habe hierzu noch eine erweiternde Frage (ich war mir jetzt nicht sicher, ob ich hierzu einen ganz neuen Beitrag hätte eröffnen sollen). Ich habe ja nun mittels nachfolgendem Quellcode zwei CATPart's in das Produkt "Root" geladen. 'AddComponentsFromFiles------------------------------------------------------------- Dim Bauteil(1) Bauteil(0) = "G:\Konstruktion\KeyUser PLM-CAD-Berechnungssoftware\Skelettbasierte Konstruktion\Makroverzeichnis Automatisierung\SkelettTest.CATPart" Bauteil(1) = "G:\Konstruktion\KeyUser PLM-CAD-Berechnungssoftware\Skelettbasierte Konstruktion\Makroverzeichnis Automatisierung\Hauptteil.CATPart" Root.Products.AddComponentsFromFiles Bauteil, "All" '---------------------------------------------------------------------------------------- Ich versuche jetzt schon geraume Zeit auf das Bauteil(0) zuzugreifen, damit ich das in der Baugruppe Fixieren kann (auch später um Verknüpfungen zu erstellen). Allerdings hatte ich bisher noch keinen Erfolg mit Bauteil(0) etwas anzustellen oder daraus ein eigenes Objekt zu erzeugen. Könnt ihr mir da helfen, wie ich es hinbekomme, z.B. Bauteil (0) in der Baugruppe "Root" zu fixieren? Im Anhang sende ich euch noch ein Bild von meinem momentanen Testcode. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12014 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 03. Mai. 2023 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Servus Bauteil ist bei dir ein Array mit Pfaden zu den Files, du musst aber auf die Instanzen aus der Products-Collection zugreifen. Du solltest über den Zähler der Products-Collection auf die entsprechende Instanz direkt zugreifen können. zB Code: Dim iCount as Integer iCount = Root.Products.Count Set oLastinstance = Root.Products.item(iCount) Set oSecondLastinstance = Root.Products.item(iCount - 1)
zum fixieren: siehe zB hier. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lionel Hutz Mitglied
Beiträge: 467 Registriert: 26.03.2014 CATIA V5 R26
|
erstellt am: 03. Mai. 2023 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 03. Mai. 2023 12:41 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 12014 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 03. Mai. 2023 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 03. Mai. 2023 13:47 <-- editieren / zitieren --> Unities abgeben:
|
Lionel Hutz Mitglied
Beiträge: 467 Registriert: 26.03.2014 CATIA V5 R26
|
erstellt am: 04. Mai. 2023 06:14 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 04. Mai. 2023 07:47 <-- editieren / zitieren --> Unities abgeben:
Moin Lionen, nachfolgend mein Quellcode: Sub CATMain() Dim Docs As Documents Set Docs = CATIA.Documents Dim Root 'As Product Set Root = Docs.Add("Product").Product 'AddComponentsFromFiles------------------------------------------------------------------------------- Dim Bauteil(1) Bauteil(0) = "G:\Konstruktion\KeyUser PLM-CAD-Berechnungssoftware\Skelettbasierte Konstruktion\Makroverzeichnis Automatisierung\SkelettTest.CATPart" Bauteil(1) = "G:\Konstruktion\KeyUser PLM-CAD-Berechnungssoftware\Skelettbasierte Konstruktion\Makroverzeichnis Automatisierung\Hauptteil.CATPart" Root.Products.AddComponentsFromFiles Bauteil, "All" '------------------------------------------------------------------------------------------------------ 'AddConstrains----------------------------------------------------------------------------------------- Dim iCount As Integer iCount = Root.Products.Count 'MsgBox (iCount)
Dim Cons As Constraints Set Cons = Root.Connections("CATIAConstraints") 'Component Fixed--- --- --- Dim oFirstInstance As Product Set oFirstInstance = Root.Products.Item(1) oFirstInstance.AddShapeRepresentation 'MsgBox (oFirstInstance.Name) Dim Ebene1 As AnyObject Set Ebene1 = Docs.Item(1).Part.OriginElements.PlaneXY Dim S As String Dim R1 As Reference S = Root.PartNumber & "/" & oFirstInstance.Name & "/!" & Ebene1.Name 'MsgBox (S) Set R1 = Root.CreateReferenceFromName(S) Set anchor = Cons.AddMonoEltCst(catCstTypeReference, R1) '--- --- --- 'Contact Condition--- --- --- Dim oLastInstance As Product Set oLastInstance = Root.Products.Item(iCount) 'MsgBox (oLastInstance.Name) Dim Ebene2 As AnyObject Set Ebene2 = Docs.Item(iCount).Part.OriginElements.PlaneXY Dim R2 As Reference S = Root.PartNumber & "/" & oLastInstance.Name & "/!" & Ebene2.Name 'MsgBox (S) Set R2 = Root.CreateReferenceFromName(S) Set congruence1 = Cons.AddBiEltCst(catCstTypeOn, R1, R2) '--------------------------------------------------------------------------------------------------- End Sub Allerdings muss ich zugeben, dass der Code so noch eine Schwäche hat. Er funktioniert nämlich nur wenn das CATProduct im Design Mode ist. Bei uns ist es so das die Modelle standardmäßig im Visualization Mode. Das Funktioniert das ganze logischer weise nicht. Aktuell suche ich noch den Befehl wie ich die geladenen Dokumente in den Desigen Mode switchen kann.
Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 04. Mai. 2023 08:42 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 12014 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Mai. 2023 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 04. Mai. 2023 10:40 <-- editieren / zitieren --> Unities abgeben:
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 04. Mai. 2023 10:46 <-- editieren / zitieren --> Unities abgeben:
Ich habe jetzt aber auf einmal das Problem, dass der Compiler ein Fehler meldet. Ganz egal ob ich nun "oLastInstance.ApplyWorkMode DEFAULT_MODE" oder "oLastInstance.ApplyWorkMode DESIGN_MODE" verwende. Daher glaube ich jetzt nicht das es daran liegt. Habt Ihr eine Ahnung woran das jetzt liegen könnt?? Fehlermeldung siehe Bilder im Anhang. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12014 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Mai. 2023 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Servus Was ist Docs? Was ist das Item das dir Items zurückgibt? (Watchfenster) Ich vermute das es für dieses Objekt kein .Part gibt. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 04. Mai. 2023 12:22 <-- editieren / zitieren --> Unities abgeben:
Hi, okay ich hab den Fehler gefunden. Das geht so in die Richtung "Ich habe keine Lösung bewundere aber das Problem" Ich muss, nach dem ich Catia gestartet habe, zuerst einmal eine Catia Datei manuell Öffnen (über File-> Open-> *.CATPart). Dann läuft das Test-Makro fehlerlos. Es muss also irgendwie damit zusammenhängen, wie wir die User-Settings in Catia laden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12014 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Mai. 2023 12:51 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Servus Ich glaube das liegt an etwas anderes: darauf vertrauen das der Zähler in der Document-Collection dem Zähler der Instanz des Teils in der Products-Collection entspricht ist sehr gewagt. Ich würde eher über die Instanz auf das Part zu greifen. zB so (ungetestet): Code: Set oPlane = oFirstInstance.ReferenceProduct.Parent.Part.OriginElements.PlaneXY
Natürlich sollte dabei noch eine anständige Fehlerbehandlung eingebaut werden. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 05. Mai. 2023 08:33 <-- editieren / zitieren --> Unities abgeben:
|