| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | KISTERS 3DViewStation: Unterstützung für 3D CAD Kollaboration mit Lieferanten, eine Pressemitteilung
|
Autor
|
Thema: Befehle in vb als strings variieren und ausführen (1338 mal gelesen)
|
weissda Mitglied ingenieur

 Beiträge: 48 Registriert: 04.08.2006
|
erstellt am: 13. Sep. 2006 16:46 <-- editieren / zitieren --> Unities abgeben:         
Hallo Ich habe ein etwas ungewöhnliches Problem. Ich hätte gerne folgendes durchgeführt: einen Konstruktionsbefehl für eine boolsche operation erstellen und dann den Befehl ausführen. command = "partDocument.Part..ShapeFactory.AddNew" & TypeName(boolP) Da 'TypeName(boolP)' verschieden sein kann (Trim, Add...) möchte ich den Befehl mit dieser Methode flexibel halten. Natürlich wäre das ganze auch mit IF... für jede Variante möglich aber so wäre es doch etwas eleganter. Meine Frage deshalb: gibts einen Befehl um den konstruierten string (command) dann auch auszuführen? Grüsse, Daniel. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx

 Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 13. Sep. 2006 16:53 <-- editieren / zitieren --> Unities abgeben:          Nur für weissda
Nun je genauer Du Dein "ungewöhnliches" Problem beschreibst so bessere Antworten wirst Du erhalten. Im Augenblick solltest Du ein bisschen mehr erklären, weil so braucht man eine Wahrsagekugel (und die habe ich zur Zeit verliehen  ) Axel ------------------ Ich bin dabei am 19.9. und 20.9.06 beim 5. CAD.de Anwendertreffen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
weissda Mitglied ingenieur

 Beiträge: 48 Registriert: 04.08.2006
|
erstellt am: 14. Sep. 2006 08:53 <-- editieren / zitieren --> Unities abgeben:         
Ok, das war wohl etwas kurz, sorry ;-) Hier etwas ausführlicher: Ich suche ein Objekt in meinem CATIA-Dokument mit einem bestimmten Namen: Set boolP = prodDocument1.Part.FindObjectByName("Objekt") Dann ermittle ich den Typen des Objektes: type = TypeName(boolP) Dann will ich ein neues Objekt vom gleichen Typen in meinem CATIA-Dokument erzeugen. Da ich aber offenbar BooleanShapes nicht einfach mit copy/paste erzeugen kann, muss ich dies explizit aufbauen, d.h.: Set Operation = prodDocument1.Part.AddNewAdd([Körper]) Da dieser Befehl aber für 'Trim', 'Add' etc. unterschiedlich lautet, muss ich diesen anpassen: Set Operation = prodDocument1.Part.AddNewAdd([Körper]) Set Operation = prodDocument1.Part.AddNewTrim([Körper]) ... Statt nun den typen von 'boolP' abzufragen und dann für jeden Fall eine IF-Routine zu schreiben, möchte ich den Befehl direkt aus dem Typen von 'boolP' kreieren: "Set Operation = prodDocument1.Part.AddNew" & TypeName(boolP) & "([Körper])" Nun ist dies ja aber erst der String. Wie kann ich diesen String nun als tatsächlichen Befehl verwenden, d.h. dass nachher das Programm den String als Befehl: Set Operation = prodDocument1.Part.AddNewTrim([Körper]) erkennt? Hoffe, ihr konntet mir folgen. Es ist in dem Sinn kein dringendes Problem, da's eigentlich nur Kosmetik ist - würd mich trotzdem interessieren, ob's dafür ne Lösung gibt ;-) Greets, Daniel.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
okl Mitglied Wirtsch-Ing (Maschbau)
 
 Beiträge: 157 Registriert: 21.04.2006 2x3,6 GHz, 2 GB RAM, NVIDIA Quadro FX 1800, Delmia V5R16 SP1, Win XP Prof SP2, Office, VS 2005, VB 6, Inventor (Test), VBExpress .NET 2005 Adminrechte
|
erstellt am: 14. Sep. 2006 18:27 <-- editieren / zitieren --> Unities abgeben:          Nur für weissda
Hallo Daniel, wäre schon eine schöne Sache, wenn man Befehle variabel halten könnte. Aber wozu - denkst Du - gibt es zB. IF-, SelectCase- oder Try-Anweisungen? In Deinem Fall würde ich einfach den Typen abfragen, das Ergebnis in eine Stringvar überführen und eine Select-Case-Anweisung programmieren.
Code: Select Case TypeName(boolP) Case "Add" Set Operation = prodDocument1.Part.AddNewAdd(Bla) Case "Trim" ... End Select
Ich weiß nicht, was hinter dieser Operation steht, aber damit hast Du pro Möglichkeit zwei Zeilen Code, die einfach zu erweitern und lebar sind. Nur so als Vorschlag. Aber ich denke, dass Dir das sehr wohl bekannt ist, da es sich ja anscheinend um reine "Kosmetik" handelt. Grüße, okl Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlausJ Mitglied
   
 Beiträge: 1336 Registriert: 17.03.2003 CATIA V4.2.4 Ref 2 CATIA V5R16SP7 AIX 5.3 Windows 2000 und XP
|
erstellt am: 15. Sep. 2006 07:49 <-- editieren / zitieren --> Unities abgeben:          Nur für weissda
Hallo, in interpretativen Sprachen können solche Konstrukte möglich sein (z.B. Korn-Shell), in kompilierbaren Sprachen nicht. Ich vermute aber, da VisualBasic auch kompiliert werden kann, ist so etwas nicht möglich, sicher weiß ich es nicht. Schau mal im Basic Handbuch nach. Wenn überhaupt, dann dort. ------------------ in diesem Sinne Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
weissda Mitglied ingenieur

 Beiträge: 48 Registriert: 04.08.2006
|
erstellt am: 15. Sep. 2006 08:40 <-- editieren / zitieren --> Unities abgeben:         
Danke für eure Antworten. Dachte mir schon, dass dies wohl eher nicht möglich ist - auf die Alternative mit IF/case... bin ich auch gekommen, deshalb wäre das andere einfach "nice to have" gewesen... Gruss, Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
93Aero Mitglied Ing
 
 Beiträge: 106 Registriert: 02.12.2004
|
erstellt am: 19. Sep. 2006 10:21 <-- editieren / zitieren --> Unities abgeben:          Nur für weissda
Hallo Daniel, so was wie ein Pointer auf die Funktion gibt es in CATScript sicher nicht... Nur es existiert doch ein Weg, allerdings ist es nicht die beste Lösung. Es gibt eine Funktion StartCommand und diese braucht ein String als Parameter, damit kannst Du Deinen Befehl ausführen lassen. Aber Vorsicht: das Ding läut nicht synchron, ich habe es benuzt um mein CAA-Commando zu starten, hier ist die VB-Code: Dim cat_obj As Object Dim strCommand As String Set cat_obj = GetObject(, "CATIA.Application") strCommand = "Pad" cat_obj.StartCommand strCommand Das Status des Kommandos abzufragen ist nicht trivial. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
weissda Mitglied ingenieur

 Beiträge: 48 Registriert: 04.08.2006
|
erstellt am: 19. Sep. 2006 10:35 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |