| |
 | CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min 48 |
| |
 | KISTERS 3DViewStation mit neuer Zerschneidefunktionen und erweitertem PMI-Support, eine Pressemitteilung
|
Autor
|
Thema: Position.GetComponents - Funktion (4978 mal gelesen)
|
Laute Mitglied Student

 Beiträge: 26 Registriert: 14.07.2003
|
erstellt am: 23. Jul. 2003 13:09 <-- editieren / zitieren --> Unities abgeben:         
Hallo Allerseits, Dim oPart as PartDocument Dim oSelection as Selection Set oSelection = CATIA.ActiveDocument.Selection Set oPart = oSelection.FindObject("PAD.1") Dim dPosition(11) oPart.Position.GetComponents dPosition For i = 0 to 11 msgbox "" + dPosition(i) next So siehts aus mein Problem. Ist daran etwas verkehrt? Ich bekomme keine Werte in das Array. Funktioniert das nur mit Punkten oder Ebenen?
Wenn sich jemand damit auskennt wäre ich dankbar für einen Tipp Gruß Laute Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Laute Mitglied Student

 Beiträge: 26 Registriert: 14.07.2003
|
erstellt am: 23. Jul. 2003 14:47 <-- editieren / zitieren --> Unities abgeben:         
Hallo nochmals, hab die Sache ein bisschen abgeändertund jetzt bekomm ich eine Fehlermeldung "Function marked as restricted or automation type not used in vb" - ?? was hat das zu bedeuten? Dim oPart As PartDocument Dim oRoot As Product Set oPart = CATIA.ActiveDocument.Selection.Item(1) Set oRoot = oPart.Product Dim oPosition As Position Set oPosition = oRoot.Position Dim dPosition(11) oPosition.GetComponents dPosition For I = 0 To 5 MsgBox "Number = " + dPosition(I) Next danke für hilfe gruss laute Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
 
 Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 23. Jul. 2003 15:38 <-- editieren / zitieren --> Unities abgeben:          Nur für Laute
|
Laute Mitglied Student

 Beiträge: 26 Registriert: 14.07.2003
|
erstellt am: 23. Jul. 2003 15:51 <-- editieren / zitieren --> Unities abgeben:         
Hallo Steffen, Ich möchte die Positionsdaten eines selektierten Elementes(Pad,Body,Plane,EdgeFillet etc.)auslesen.Die Funktion GetComponents schien mir da geeignet?! Aus diesen Daten will ich mir dann einen Viewpoint konstruieren. Danke die nochmals für deine Hilfe beim Reframe On. Leider muss die Anwendung ohne CATScript sonden nur mit VB auskommen. Da ich ein ziemlicher VB-Newbie bin hoffe ich mal nicht komplett auf dem Holzweg zu sein! danke für Hilfe Gruß Laute Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
 
 Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 24. Jul. 2003 08:32 <-- editieren / zitieren --> Unities abgeben:          Nur für Laute
Hallo Laute, Was sind denn die Positionsdaten eines Features (Pad, Fillet, usw.)? Also die Position-Methode funktioniert nur mit Part's, Product's und sonstigen Komponenten, die in einer Baugruppe verbaut werden können. Eine andere Anwendungsmöglichkeit die funktioniert ist mir nicht bekannt. Dein zweites Makro läuft, wenn Du die Typdeklaration von oPosition auskommentierst. Aber Du bekommst in der Matrix "dPosition" nur die Positionskoordinaten vom oPart. Die Anweisung Set oPart = CATIA.ActiveDocument.Selection.Item(1) sollte mit einem Fehler quittiert werden, da oPart als PartDocument deklariert ist und dem oPart jetzt ein selektiertes Objekt zugewiesen wird. Das Problem mit dem Reframe On habe ich jetzt auch gelöst. Beim Aufruf der .exe Datei und dem Übersenden des Befehls mittels SendKeys wurde die Auswahl in CATIA gelöscht. Wenn man eine Auswahl mit der Selection.Add-Methode erzeugt dann funktioniert es. Also habe ich folgendes gemacht: Man wählt im CATIA entsprechend dem gesetzten Auswahlfilter das Objekt aus. Das ausgewählte Objekt lese ich aus und übergebe es der Variablen "oSelOb". Dieses Objekt addiere ich zur Selection-Collection. Dann führe ich den CATIA Befehl aus. Siehe auch http://ww3.cad.de/foren/ubb/Forum137/HTML/000384.shtml Anbei das vollständige bei mir funktionierende Skript.
Sub CATMain() Dim sFilter(3) Dim oSelOb as Object sFilter(0) = "Plane" sFilter(1) = "Sketch" sFilter(2) = "Pad" sFilter(3) = "Body" CATIA.ActiveDocument.Selection.SelectElement sFilter, "Bitte die Referenzelemente auswählen", True Set oSelOb = CATIA.ActiveDocument.Selection.Item(1).Value CATIA.ActiveDocument.Selection.Clear CATIA.ActiveDocument.Selection.Add oSelOb CATIA.SystemService.ExecuteBackgroundProcessus ("D:\VBProgramme\CATIA_Befehl\CATIABefehl.exe Bildschirmfüllend anzeigen") End Sub Gruss Steffen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Laute Mitglied Student

 Beiträge: 26 Registriert: 14.07.2003
|
erstellt am: 24. Jul. 2003 10:36 <-- editieren / zitieren --> Unities abgeben:         
Hi Steffen, tja wie soll ich mich nur bedanken? Wenn ich kein armer Student wäre würde ich dir einen Scheck zukommen lassen - dafür, dass ich mich nicht mehr mit der b***** Doku rumärgern muss und irgendwas probiere das garnicht funktionieren kann ! Also danke für die Mühe! Nun hätt ich nur noch zwei klitzekleines Probs. 1. Und zwar möchte ich das was in der CATMain steht aus meiner Anwendung aufrufen -wenn ich einen Button klickt etc. Bloß passiert da nix - Der Start im CATIA geht problemlos. 2. "Expand First Level" des Spezifikationsbaumes müsste analog mit Sendkeys gehen ?! AppActivate "CATIA V5" SendKeys "c:Expand First Level" + Chr(13), True Gruß Laute
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
 
 Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 24. Jul. 2003 11:29 <-- editieren / zitieren --> Unities abgeben:          Nur für Laute
Hallo Laute, bei mir funkts in VB. Ich habe folgende Struktur: 1. ein Modul mit einer Sub Main (Main ist die Startprocedure des VB-Projektes) Public CATIA As Application Sub Main() AppActivate "CATIA V5" DoEvents Set CATIA = GetObject("", "CATIA.Application") Form1.Show End Sub 2. eine Form mit Button und einer Ereignisprocedure für den Button
Private Sub Command1_Click() Dim oSel Set oSel = CATIA.ActiveDocument.Selection Dim sFilter(3) sFilter(0) = "Plane" sFilter(1) = "Sketch" sFilter(2) = "Pad" sFilter(3) = "Body" oSel.SelectElement sFilter, "Bitte die Referenzelemente auswählen", True Dim oSelOb As Object Set oSelOb = oSel.Item(1).Value oSel.Clear oSel.Add oSelOb SendKeys "b:Bildschirmfüllend anzeigen" + Chr(13), True oSel.Clear End Sub Und das funktioniert bei mir.
Das Baum auf- und zuklappen geht so, wie Du es beschrieben hast. Gruss Steffen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Laute Mitglied Student

 Beiträge: 26 Registriert: 14.07.2003
|
erstellt am: 25. Jul. 2003 10:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo Steffen, danke für die ausfürhliche Antwort. Hab's aber leider nicht hinbekommen! Der beigefügte Code verursacht eine Endlosschleife. Beim Debug wir mir die SendKeys Anweisung gehighlightet oder eine Meldung "SelectElement/Item(1) - schlug fehl". Ich klick auf meinen Button -> wähle ein Element aus -> Endlosschleife/oder garnichts passiert. Dim oSel Set oSel = CATIA.ActiveDocument.Selection oSel.Clear Dim sFilter(3) sFilter(0) = "Plane" sFilter(1) = "Sketch" sFilter(2) = "Pad" sFilter(3) = "Body" Dim sOutputState As String sOutputState = oSel.SelectElement(sFilter, "Bitte ein Referenzelement auswählen ", True) If (sOutputState = "ok" Or sOutputState = "Normal") Then Dim oSelOb As Object Set oSelOb = oSel.Item(1).Value oSel.Add oSelOb SendKeys "c:Reframe On" + Chr(13), 1 Gruß Laute Ps. An den VB-Referenzen kann das nicht liegen oder? Thx for help : (
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
 
 Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 25. Jul. 2003 11:25 <-- editieren / zitieren --> Unities abgeben:          Nur für Laute
|
Laute Mitglied Student

 Beiträge: 26 Registriert: 14.07.2003
|
erstellt am: 25. Jul. 2003 12:59 <-- editieren / zitieren --> Unities abgeben:         
Hallo Steffen, Falscher Alarm ! ! ! - dein Code ist fehlerfrei und läuft!(bei mir aber nicht immer!liegt aber definitiv an meinem CATIA!?Spricht nicht immer auf SendKeys an) -Endlosschleife gibts nur wenn vor dem sub-call schon ein Element selektiert ist! da kann man sich aber mit "...Selektion.clear" behelfen. Thx Laute Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
 
 Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 25. Jul. 2003 13:45 <-- editieren / zitieren --> Unities abgeben:          Nur für Laute
Hallo Laute, bei Verwendung der SendKeys-Methode muß auf jeden Fall das CATIA-Fenster aktiv sein. Es kann durchaus sein, dass das Makro zu schnell läuft und der gesendete CATIA-Befehl im Nirwana landet. Setzte einfach vor die SendKeys-Methode noch ein DoEvents, damit das Betriebssystem alle Arbeiten vor der Befehlsübergabe an CATIA erledigt. Oder Du aktivierst noch über AppActivate "CATIA V5" das CATIA-Fenster aus dem Programm. Gruss Steffen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Laute Mitglied Student

 Beiträge: 26 Registriert: 14.07.2003
|
erstellt am: 25. Jul. 2003 15:39 <-- editieren / zitieren --> Unities abgeben:         
|
Laute Mitglied Student

 Beiträge: 26 Registriert: 14.07.2003
|
erstellt am: 28. Jul. 2003 11:32 <-- editieren / zitieren --> Unities abgeben:         
Hallo Foranier, kann mir vielleicht irgendjemand sagen warum der beigefügte Code in 1 von 20 Fällen funktioniert und sobald ein neues Modell geöffnet wird nicht mehr? Ich bin wirklich ratlos ! AppActivate "CATIA V5" Dim oSel As Selection Set oSel = CATIA.ActiveDocument.Selection Dim sFilter(3) sFilter(0) = "EdgeFillet" sFilter(1) = "Sketch" sFilter(2) = "Pad" sFilter(3) = "Body" Dim oSelOb As Object Set oSelOb = oSel.Item(1).Value oSel.Add oSelOb DoEvents SendKeys "C:Reframe On" + Chr(13), True AppActivate "CATIA V5" CATIA.ActiveWindow.ActiveViewer.Update Gruss Laute Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Laute Mitglied Student

 Beiträge: 26 Registriert: 14.07.2003
|
erstellt am: 28. Jul. 2003 13:02 <-- editieren / zitieren --> Unities abgeben:         
irgendwie lösen sich meine Prbleme immer dann sobald ich sie poste. Ich weis zwar nicht genau warum aber das hier funktioniert bei mir mit V5R10 AppActivate "CATIA V5" Dim oSel Set oSel = CATIA.ActiveDocument.Selection Dim oSelOb As Object Set oSelOb = oSel.Item(1).Value oSel.Add oSelOb AppActivate "CATIA V5" DoEvents SendKeys "C:Reframe On" + Chr(13) AppActivate "CATIA V5" gruss laute Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |