Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Ausführen einer PowerCopy unter VBA

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
3DVisualisierung für die Fertigungsindustrie
Autor Thema:  Ausführen einer PowerCopy unter VBA (8171 mal gelesen)
Bernod
Mitglied



Sehen Sie sich das Profil von Bernod an!   Senden Sie eine Private Message an Bernod  Schreiben Sie einen Gästebucheintrag für Bernod

Beiträge: 40
Registriert: 03.03.2010

erstellt am: 19. Apr. 2010 14:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich möchte ein Makro mit catvba erstellen, welches eine PowerCopy ausführt und den Benutzer dazu auffordert die Input-Geometrie selber zu selektieren.

Bisher sieht mein Code wie folgt aus:
##################################################################
Sub CATMain()
Dim PartDocumentDest As PartDocument
Set PartDocumentDest = CATIA.ActiveDocument

Dim myPart As Part
Set myPart = PartDocumentDest.Part

Dim myFactory As InstanceFactory
Set myFactory = myPart.GetCustomerFactory("InstanceFactory")

myFactory.BeginInstanceFactory "PowerCopyName", "C:\TEMP_MAKRO\DateiName.CATPart"

myFactory.BeginInstantiate

'Auswahl festlegen -----------------------------------------------
Dim Filter(0)
Filter(0) = "Point"

'Selektion definieren und leeren ---------------------------------
Dim UserSel As Object
Set UserSel = CATIA.ActiveDocument.Selection
UserSel.Clear

'Selection vornehmen lassen --------------------------------------
Dim Punkt As String
Punkt = UserSel.SelectElement2(Filter, "Bezugspunkt oben waehlen.", False)

'Selektierte Geometrie an die PowerCopy senden --------------------
myFactory.PutInputData "INPUT_Bezugspunkt_oberes_Ende", Punkt   <== Hier Fehler: Type mismatch

'------------------------------------------------------------------
Dim param1 As Parameter
Set param1 = myFactory.GetParameter("Hoehe")
param1.ValuateFromString ("400mm")
'------------------------------------------------------------------
Dim Instance As ShapeInstance
Set Instance = myFactory.Instantiate
'-----------------------------------------------------------------
myFactory.EndInstantiate
'------------------------------------------------------------------
myFactory.EndInstanceFactory
'------------------------------------------------------------------
myPart.Update

End Sub
##################################################################

Weiß jemand weiter?

Danke und Gruß,
Bernod

[Diese Nachricht wurde von Bernod am 19. Apr. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Ehrenmitglied V.I.P. h.c.
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 19. Apr. 2010 15:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Hallo Bernod,
versuch es mal ohne myFactory zu deklarieren bzw. als Object zu deklarieren. Als Test brauchst du nur ein ' vor den DIM-Befehl zu setzen, um den Deklarationsteil auszuklammern.

------------------
MFG
Rick Schulz
      Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DanielFr.
Ehrenmitglied V.I.P. h.c.
Manager


Sehen Sie sich das Profil von DanielFr. an!   Senden Sie eine Private Message an DanielFr.  Schreiben Sie einen Gästebucheintrag für DanielFr.

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: 19. Apr. 2010 15:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Hallo  ,

in folgender Zeile

Code:
Dim Punkt As String
Punkt = UserSel.SelectElement2(Filter, "Bezugspunkt oben waehlen.", False)

weißt du der Variablen "Punkt" einen String zu. Dieser String stellt nur die Rückgabe der Selektion dar (d.h. hat der Anwender die Selektion erfolgreich abgeschlossen, oder abgebrochen, etc.)

Die Methode PutInputData will als Übergabe einen String = Name und das OBJEKT

Du musst dir also zuerst einmal das selektierte Punktobjekt holen und dieses im Anschluss an die Methode übergeben. Hier mal ein Beispiel:

Code:

Sub CATMain()
Dim PartDocumentDest As PartDocument
Set PartDocumentDest = CATIA.ActiveDocument

Dim myPart As Part
Set myPart = PartDocumentDest.Part

Dim myFactory As InstanceFactory
Set myFactory = myPart.GetCustomerFactory("InstanceFactory")

myFactory.BeginInstanceFactory "PowerCopyName", "C:\TEMP_MAKRO\DateiName.CATPart"

myFactory.BeginInstantiate

'Auswahl festlegen -----------------------------------------------
Dim Filter(0)
Filter(0) = "Point"

'Selektion definieren und leeren ---------------------------------
Dim UserSel As Object
Set UserSel = CATIA.ActiveDocument.Selection
UserSel.Clear

'Selection vornehmen lassen --------------------------------------
Dim intSelAbfrageStr As String
Dim intPointObj as Object

intSelAbfrageStr = UserSel.SelectElement2(Filter, "Bezugspunkt oben waehlen.", False)

If intSelAbfrageStr = "Normal" then
  Set intPointObj  = UserSel.Item(1).Value
ENd If

'Selektierte Geometrie an die PowerCopy senden --------------------
myFactory.PutInputData "INPUT_Bezugspunkt_oberes_Ende", Punkt  <== Hier Fehler: Type mismatch

'------------------------------------------------------------------
Dim param1 As Parameter
Set param1 = myFactory.GetParameter("Hoehe")
param1.ValuateFromString ("400mm")
'------------------------------------------------------------------
Dim Instance As ShapeInstance
Set Instance = myFactory.Instantiate
'-----------------------------------------------------------------
myFactory.EndInstantiate
'------------------------------------------------------------------
myFactory.EndInstanceFactory
'------------------------------------------------------------------
myPart.Update

End Sub


------------------
MFG Daniel

Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernod
Mitglied



Sehen Sie sich das Profil von Bernod an!   Senden Sie eine Private Message an Bernod  Schreiben Sie einen Gästebucheintrag für Bernod

Beiträge: 40
Registriert: 03.03.2010

erstellt am: 19. Apr. 2010 15:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ihr seid HELDEN! Vielen Dank! Besonders für deine Erklärung, Daniel. Erst jetzt habe ich verstanden was die Zeile
----
intSelAbfrageStr = UserSel.SelectElement2(Filter, "Bezugspunkt oben waehlen.", False)
----
bewirkt.

Das Makro funktioniert nun wie es soll. Nochmals tausend Dank!

Gruß,
Bernod

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tolo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von tolo an!   Senden Sie eine Private Message an tolo  Schreiben Sie einen Gästebucheintrag für tolo

Beiträge: 91
Registriert: 11.04.2007

NX 11.0

erstellt am: 21. Apr. 2010 17:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Hallo Ihr Beiden,

ich habe das Ganze für meine Zwecke umgeschrieben, habe aber Probleme bei der Auswahl bzw. Weitergabe der Referenzen.
Ich habe eine PowerCopy definiert mit zwei Referenzkanten (Körperkanten oder Achsen eines Koordinatensystems).
Diese heißen im Input Referenzkante_vertikal bzw _horizontal oder im Orginal Edge3 und Edge4.
Weder Körperkanten noch Achsen lassen sich mit den bekannten Filtern (zB. Point), sondern nur mit AnyObject auswählen.
Aber spätestens bei der Weitergabe an die PowerCopy ist dieser Typ nicht mehr zulässig. Könnt Ihr mir hier weiterhelfen? Danke

Hier der Codeausschnitt:


'Auswahl festlegen -----------------------------------------------
Dim Filter(9)
Filter(0) = "Point2D"
Filter(1) = "Point"
Filter(2) = "Line2D"
Filter(3) = "Line"
Filter(4) = "Circle2D"
Filter(5) = "Plane"
Filter(6) = "HybridShapeConnect"
Filter(7) = "Spline2D"
Filter(8) = "PlanarFace"
Filter(9) = "AnyObject"

'Selektion definieren und leeren ---------------------------------
Dim UserSel As Object
Set UserSel = PartDocumentDest.Selection
UserSel.Clear

'Selection vornehmen lassen --------------------------------------
Dim intSelAbfrageStr As String
Dim intLineObj As Object

intSelAbfrageStr = UserSel.SelectElement2(Filter, "Referenzkante vertikal waehlen.", False)

If intSelAbfrageStr = "Normal" Then
  Set intLineObj(1) = UserSel.Item(1).Value
End If

'Selektierte Geometrie an die PowerCopy senden --------------------
Factory.PutInputData "Referenzkante_vertikal", AnyObject


UserSel.Clear

intSelAbfrageStr = UserSel.SelectElement2(Filter, "Referenzkante horizontal waehlen.", False)

If intSelAbfrageStr = "Normal" Then
  Set intLineObj(2) = UserSel.Item(1).Value
End If

'Selektierte Geometrie an die PowaerCopy senden --------------------
Factory.PutInputData "Referenzkante_horizontal", AnyObject

UserSel.Clear

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernod
Mitglied



Sehen Sie sich das Profil von Bernod an!   Senden Sie eine Private Message an Bernod  Schreiben Sie einen Gästebucheintrag für Bernod

Beiträge: 40
Registriert: 03.03.2010

erstellt am: 21. Apr. 2010 17:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

in der Zeile 19 hattest du dein Objekt als einfaches Objekt deklariert, in den Zeilen 22 und 29 verwendest du dies aber als Array (glaube das nennt man so). Ich glaube das kannst du so nicht machen. Probier hier 2 verschiedene Variablen zu verwenden. Diese Variablen übergibst du dann auch an die PowerCopy (siehe Zeile 25 und 32).

So sollte es funktionieren -->

Code:
1   'Auswahl festlegen -----------------------------------------------
2   Dim Filter(9)
3   Filter(0) = "Point2D"
4   Filter(1) = "Point"
5   Filter(2) = "Line2D"
6   Filter(3) = "Line"
7   Filter(4) = "Circle2D"
8   Filter(5) = "Plane"
9   Filter(6) = "HybridShapeConnect"
10  Filter(7) = "Spline2D"
11  Filter(8) = "PlanarFace"
12  Filter(9) = "AnyObject"

13  'Selektion definieren und leeren ---------------------------------
14  Dim UserSel As Object
15  Set UserSel = PartDocumentDest.Selection
16  UserSel.Clear

17  'Selection vornehmen lassen --------------------------------------
18  Dim intSelAbfrageStr As String
19  Dim intLineObj_1, intLineObj_2 As Object

20  intSelAbfrageStr = UserSel.SelectElement2(Filter, "Referenzkante vertikal waehlen.", False)

21  If intSelAbfrageStr = "Normal" Then
22    Set intLineObj_1 = UserSel.Item(1).Value
23  End If

24  'Selektierte Geometrie an die PowerCopy senden --------------------
25  Factory.PutInputData "Referenzkante_vertikal", intLineObj_1


26  UserSel.Clear

27  intSelAbfrageStr = UserSel.SelectElement2(Filter, "Referenzkante horizontal waehlen.", False)

28  If intSelAbfrageStr = "Normal" Then
29     Set intLineObj_2 = UserSel.Item(1).Value
30  End If

31  'Selektierte Geometrie an die PowaerCopy senden --------------------
32  Factory.PutInputData "Referenzkante_horizontal", intLineObj_2

33  UserSel.Clear


[Diese Nachricht wurde von Bernod am 21. Apr. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DanielFr.
Ehrenmitglied V.I.P. h.c.
Manager


Sehen Sie sich das Profil von DanielFr. an!   Senden Sie eine Private Message an DanielFr.  Schreiben Sie einen Gästebucheintrag für DanielFr.

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: 22. Apr. 2010 10:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich


GetTypeName.rar

 
Hallo  ,

ich habe hier auch noch eine kleine Anmerkung zum Thema Filterstrings:

Im Anhang findest gibt es ein *.CATvba Projekt das den TypeName einer selektierten Variablen ausgibt (kopieren in die Zwischenablage ist auch möglich). Mit Hilfe des Makros können die Filtertypen schnell per Selektion ausgelesen und kopiert werden um sie in den Code wieder einzufügen.

Falls das ganze Probleme macht (User defined type... in der Funktion) muss noch folgender Verweis zum Projekt hinzugefügt werden (Microsoft Forms 2.0 Object Library)

@tolo:
Warum brauchst du so viele Filter? Du brauchst nur einen..."Edge". Hiermit kannst du Körperkanten und Achsen selektieren

------------------
MFG Daniel

Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tolo
Mitglied
Konstrukteur


Sehen Sie sich das Profil von tolo an!   Senden Sie eine Private Message an tolo  Schreiben Sie einen Gästebucheintrag für tolo

Beiträge: 91
Registriert: 11.04.2007

erstellt am: 22. Apr. 2010 14:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Hallo Ihr Beiden,

VIELEN DANK.
Kaum machts man richtig gehts auch schon. Klappt alles wie gewünscht.

zur Frage von DanielFr.:
Ich habe da nur experimentiert und das sind alle Filter, die in meinem Buch dokumentiert sind. Ich hatte es auch schon mal mit Edge oder Edges probiert, aber dass hat aus welchem Grund auch immer nicht geklappt.


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

weylin
Mitglied



Sehen Sie sich das Profil von weylin an!   Senden Sie eine Private Message an weylin  Schreiben Sie einen Gästebucheintrag für weylin

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 16. Jun. 2010 16:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Hallo,
ich hab ein ähnliches Problem:

Code:
Sub CATMain()

Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim Factory As InstanceFactory
Set Factory = part1.GetCustomerFactory("InstanceFactory")

Factory.BeginInstanceFactory "PowerCopy1", "C:\TEMP\Ring.CATPart"  '"PowerCopy1" ist mein Name der Powercopy in der Ring.catpart-dateil

'Und bei obiger Zeile kommt Laufzeitfehler '-2147467259 (80004005)':
'Die Methode 'BeginInstanceFactory' für das Objekt 'InstanceFactory' ist fehlgeschlagen

Factory.BeginInstantiate

End Sub


Ziel ist es erstmal ein bestimmtes PowerCopy-Fenster zu öffnen
Inputdaten kommen später.
Weis nicht wo mein Fehler liegt wäre für Hilfe sehr dankbar.

Viele grüße
Weylin
P.S. Benutze Catia V5 R18. Lizenz sollte kein Problem sein, da ich auch UDFs erstellen kann

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11938
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 16. Jun. 2010 17:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Servus
Willkommen im Forum. Bitte Systeminfo ausfüllen.
Bei mir läuft der Code durch.
Sicher dass Pfad, Dateinamen und Powercopy-Namen stimmen? Ist bei dir ein Part geöffnet?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

weylin
Mitglied



Sehen Sie sich das Profil von weylin an!   Senden Sie eine Private Message an weylin  Schreiben Sie einen Gästebucheintrag für weylin

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 16. Jun. 2010 17:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Danke für deine schnelle Antwort, ich habe die Systeminfo hinzugefügt.

Also bei mir kommt weiterhin der Fehler.
Pfadname stimmt und Dateiname auch.
Powercopy name ist doch der Name, den die Powercopy in der Datei (bei mir Ring.catpart) hat ?
Eine (leere Part-)Datei ist auch geöffnet.

Wenn der Code bei dir durchläuft: Passiert bei dir etwas ? also öffnet sich das Einfüge-Fenster
von der Powercopy zum Eingeben der Inputs ?
Oder passiert einfach gar nichts. 

Edit:
Wenn ich Catia schließe, wieder öffne und dann den Code laufen lass kommt  bei mir auch kein Fehler.
Es passiert allerdings auch nichts. Wenn ich den Code erneut ausführe kommt der besagte Fehler.
Ich denk, dass der Befehl Factory.EndInstanceFactory fehlt um das ganze abzuschließen und ein erneutes aufrufen
des Makros zu ermöglichen.
Aber ich hätte gedacht, das der Code mir meine PowerCopy Einfügt und mich dann die Inputs auswählen lässt.
Was muss ich ändern, damit das passiert ?
Weil im Mom ist der Effekt ja quasi gleich Null.

[Diese Nachricht wurde von weylin am 16. Jun. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11938
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 16. Jun. 2010 18:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Servus
Ich vermute, dass beim Aufrufen der PowerCopy über VB das Fenster nicht geöffnet wird, sondern alle Inputs per Script zugewiesen werden müssen.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 17. Jun. 2010 09:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Hallo Bernd,

deine Vermutung ist richtig.  
Dialoge gibt's nur, wenn man Commands mit StartCommand ausführt, da dies wie eine Userinteraktion ist. In der Automation ist es jedoch vorgesehen noch weiter zu automatisieren, wo Dialoge stören würden.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 17. Jun. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

roccat
Mitglied
Konstrukteur


Sehen Sie sich das Profil von roccat an!   Senden Sie eine Private Message an roccat  Schreiben Sie einen Gästebucheintrag für roccat

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 17. Jun. 2010 13:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Hallo weylin,
zum ausführen einer Powercopy benötigst du die KT1 Lizenz (evtl. PX1 ???), solltest du diese nicht haben, kommt ein Fehler bei "MyFactory.BeginInstanceFactory". Hab mal denn folgenden Code bissl ausgedünnt, hab´s jetzt aber nicht nochmal getestet. Sollte aber noch alles Wesentliche enthalten.

mfG
Mario

Option Explicit

Sub CATMain()

'KT1 Lizenz wird benötigt
'ansonsten Fehler bei "MyFactory.BeginInstanceFactory sPcobj, sPcPath & sPcDoc"
'=>ROCCAT<=

Dim MyPartDocument  As PartDocument
Dim MyPart          As Part
Dim MyFactory      As InstanceFactory
Dim MyInstance      'As PartInstance
Dim MyPoint        As Object
Dim sPcobj          As String
Dim sPcPath        As String
Dim sPcDoc          As String
   
    'PowerCopyParameter
    sPcobj = "PC_GBeispiel"
    sPcPath = "C:\BeispielOrdner\"
    sPcDoc = "PC_Beispiel.CATPart"

    'Aktuelles Part holen
    Set MyPartDocument = CATIA.ActiveDocument
    Set MyPart = MyPartDocument.Part

    'Factory starten
    Set MyFactory = MyPart.GetCustomerFactory("InstanceFactory")
    MyFactory.BeginInstanceFactory sPcobj, sPcPath & sPcDoc
    MyFactory.BeginInstantiate

    'Inputs holen / evtl. auch über einer UserSelection holen
    Set MyPoint = MyPart.FindObjectByName("PT_Beispiel")

    'Inputs übergeben
    MyFactory.PutInputData "PT_BeispielReference", MyPoint

    'Exemplar erzeugen
    Set MyInstance = MyFactory.Instantiate
   
    'Factory beenden
    MyFactory.EndInstantiate
    MyFactory.EndInstanceFactory

    'Teil updaten
    On Error Resume Next
    MyPart.Update
    On Error GoTo 0
   
    If MyPart.IsUpToDate(MyPart) Then
        CATIA.StatusBar = "Update: ohne Fehler"
    Else
        CATIA.StatusBar = "Update: mit Fehler"
    End If

End Sub

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

weylin
Mitglied



Sehen Sie sich das Profil von weylin an!   Senden Sie eine Private Message an weylin  Schreiben Sie einen Gästebucheintrag für weylin

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 17. Jun. 2010 15:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Vielen Dank Euch dreien   
hat funktioniert nach ein paar Anpassungen

Hier mal mein Code, der mich zum Ziel gebracht hat

Code:
Sub CATMain()
Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim xyEbene        As Object
Dim yzEbene        As Object


Dim Factory As InstanceFactory
Set Factory = part1.GetCustomerFactory("InstanceFactory")

Factory.BeginInstanceFactory "PowerCopy1", "C:\TEMP\Ring.CATPart" 

Factory.BeginInstantiate

Set xyEbene = part1.FindObjectByName("xy-Ebene")
Set yzEbene = part1.FindObjectByName("yz-Ebene")


Factory.PutInputData "xy-Ebene", xyEbene
Factory.PutInputData "yz-Ebene", yzEbene

   Set MyInstance = Factory.Instantiate
   

Factory.EndInstantiate
Factory.EndInstanceFactory

part1.Update


End Sub



zwei Fragen hätte ich noch zu dem Thema:

Kann man das ganze Pfandunabhängig machen ??
Also dass die .Part-Datei nicht immer am gleichen Ort liegen muss
sondern z.b. dort wo das Makro liegt
evtl mit \\NameDerDatei.CATPart  ??

Zweitens würde es mich interessieren ob man auch eine PowerCopy aus einem
Katalog einbinden kann.
Den Vorteil den ich hieran seh ist, dass man mehrere PowerCopys in einer Datei hat.

Vielen Dank nochmal für euere Hilfe
Gruß weylin

EDIT:
Hab mal noch ein wenig gegoogelt und bin auf Workbook.Path Befehl gekommen für Pfadunabhängigkeit.

Code:
Factory.BeginInstanceFactory "PowerCopy1", ThisWorkbook.Path & "\Ring.CATpart"
Factory.BeginInstantiate

Allerdings funktioniert das nicht.
Beim Kompilieren verlangt er ein Objekt??

[Diese Nachricht wurde von weylin am 18. Jun. 2010 editiert.]

[Diese Nachricht wurde von weylin am 18. Jun. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 18. Jun. 2010 10:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Ganz so trivial ist das nicht.

Bei Workbook.Path wärst Du auch nur im Pfad des Workbooks, nicht aber des Makros.
Application.Path (bzw. CATIA.Path und App.Path) gäbe es auch noch, aber da kommt man nur im Applikations-Pfad an.
In diesem Fall CATIA, also wo die CNEXT.exe liegt.

Für Makros ist mir noch nix brauchbares eingefallen. Problem ist hier nämlich, dass die Makros in's CATIA überführt und dort zur Laufweit interpretiert werden. Also ist CATIA die Anwendung, liegt aber wo ganzanders als das Makro.

Meine aktuelle Notlösung (gibt sicher bessere) ist, dass ich eine Umgebungsvariable auf meine Input-Daten setze.
CATIA hat eigene, damit ist es machbar.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

weylin
Mitglied



Sehen Sie sich das Profil von weylin an!   Senden Sie eine Private Message an weylin  Schreiben Sie einen Gästebucheintrag für weylin

Beiträge: 25
Registriert: 16.06.2010

Catia V5 R18
Win 7
Core 2 Quad 2,4 Ghz

erstellt am: 18. Jun. 2010 11:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Bin durch diesen Beitrag http://ww3.cad.de/foren/ubb/Forum137/HTML/003971.shtml
auf eine Möglichkeit gestoßen.
Mann muss halt iwie noch die Microsoft APC 6.2 Libary einbinden

Danke HoBLila für deine Antwort so bin ich drauf gestoßen sonst hätt ich ewig weiter versucht
den ThisWorkBook.path zum laufen zu bringen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

JonasAdrian
Mitglied
Maschinenbau Student

Sehen Sie sich das Profil von JonasAdrian an!   Senden Sie eine Private Message an JonasAdrian  Schreiben Sie einen Gästebucheintrag für JonasAdrian

Beiträge: 1
Registriert: 02.04.2024

erstellt am: 02. Apr. 2024 09:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Hallo zusammen,

kurz vorweg, ich bin komplett neu in dem Thema mit Makros in Catiav5.

Wendest du das Powercopy-Makro im gleichen CATPart an, in dem die Powercopy auch erstellt wurde? Oder geht das auch in anderen Parts? Gibt es auch eine Möglichkeit Powercopies aus einem Katalog aus aufzurufen?

Außerdem weiß ich auch nicht, ob ich 14 Jahre später noch eine Antwort erwarten kann    

Trotzdem Grüße

------------------
Jonas Schmid
Maschinenbau
HTWG Konstanz

[Diese Nachricht wurde von JonasAdrian am 02. Apr. 2024 editiert.]

[Diese Nachricht wurde von JonasAdrian am 02. Apr. 2024 editiert.]

[Diese Nachricht wurde von JonasAdrian am 02. Apr. 2024 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11938
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 02. Apr. 2024 10:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Servus

Bei der Verwendung von BeginInstanceFactory kann eine andere Quelle (zB CATPart) angegeben werden.
ich vermute dass AddInstance für ein Feature aus dem gleichen Dokument gedacht ist.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz