Autor
|
Thema: Selektionen eines Parts im Product (5757 mal gelesen)
|
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 10. Sep. 2009 10:17 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mal wieder eine Frage: Ich möchte gerne eine Achse eines Parts anklicken, welches im Product verbaut ist. Das Part ist im Grunde eine Platte und besitzt eine Bohrung in der Mitte. Wenn ich jetzt den Benutzer auffordere, die Achse der Bohrung direkt im 3D Modell anzuwählen (nicht im Strukturbaum), dann kann nur das gesamte Part angewählt werden und dementsprechend wird mir auch nur dessen Name zurückgegeben. Geplant ist eigentlich den Pfad der Achse auszulesen, um eine Bedingung nachher anzusetzen. was ich bisher habe: Code:
'Achse durch selektion bestimmen-------------------- Dim Was1(0) Was1(0) = "Line" Dim Usersel1 Set Usersel1 = CATIA.ActiveDocument.selection Usersel1.Clear
Dim Productname1 Dim Auswahl1 Auswahl1 = Usersel.SelectElement2(Was, "Achse wählen", False) If Auswahl1 = "Normal" Then Productname1 = Usersel.Item(1).Value.Name MsgBox (Usersel.Item(1).Name) MsgBox (Usersel.Item(1).Value.Name) Else MsgBox ("Abbruch") End If Usersel1.Clear
[Diese Nachricht wurde von IIYTII am 10. Sep. 2009 editiert.] [Diese Nachricht wurde von IIYTII am 10. Sep. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. 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: 10. Sep. 2009 17:39 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo, "selectElement2" funktioniert nur im aktiven Dokument. Ist dies ein Produkt kannst du nur Features des Produktes selektieren. In deinem Fall selektiert er richtigerweise die komplette Instanz. Versuch mal das "SelectElement4". Hiermit ist es möglich auch in anderen Dokumenten (also in der Partinstanz) zu selektieren. Hier mal der Auszug aus der *.chm Datei: Func SelectElement4( CATSafeArrayVariant iFilterType, CATBSTR iActiveDocumentMessage, CATBSTR iNonActiveDocumentMessage, boolean iTooltip, CATIADocument oDocument) As CATBSTR iFilterType An array of strings constants defining the automation object types with which the selection will be filtered. iActiveDocumentMessage A string which instructs the user what to select, which will be displayed into the active document. This string is displayed in the message area located at the left of the power input area.
iNonActiveDocumentMessage A string which instructs the user what to select, which will be displayed into the non active document. iTooltip Displays a tooltip as soon as an object is located under the mouse without being selected. oOutputState The state of the selection command once SelectElement3 returns. It can be either "Normal", "Cancel", "Undo". ------------------ 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 |
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 11. Sep. 2009 12:08 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antwort, das Problem ist wiedermal das leidige CATBSTR. Da ich in CATvba programmiere, kennt er diesen Befehl nicht und daher habe ich den Fehler "Type missmatch" Dim E Dim E as object geht auch nicht was tun?
Code: E = Usersel.SelectElement4(Achse, "Achse wählen")
[Diese Nachricht wurde von IIYTII am 11. Sep. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tstone Mitglied Werkzeugkonstrukteur
Beiträge: 163 Registriert: 04.06.2003 Dell Precision 470 Intel Xeon CPU 3,00GHz 2GB Ram Microsoft Windows XP Catia V5 R18 SP6 VB2005
|
erstellt am: 11. Sep. 2009 12:55 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo, dein Problem sind immer noch nicht die CATBSTR (wie gesagt, sind einfache String-Varianten). Vielleicht schaust du dir mal die Anzahl der Argumente an die du an SelectElement4 übergibst. Wobei das erstmal nicht deinen Type missmatch erklärt. Die Fehlermeldung bezieht sich auch auf die Zeile: E = Usersel.SelectElement4(Achse, "Achse wählen") ???? ------------------ Grüße TStone "Respektiere die Macht der Worte, wähle sie mit Bedacht!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 11. Sep. 2009 13:08 <-- editieren / zitieren --> Unities abgeben:
Ja, ich glaube das mit dem Type missmatch lag daran, dass ich "Achse" nicht als Array definiert hatte... Code: Dim Productname Dim Achsenname Dim Oberflachenname Dim E Dim Usersel Set Usersel = CATIA.ActiveDocument.selectionDim Achse(1) Achse(0) = "Line" E = Usersel.SelectElement4(Achse, "Achse wählen") If E = "Normal" Then MsgBox (Usersel.Item(1).Value.Name) Achsenname = Usersel.Item(1).Value.Name Else MsgBox ("Abbruch") End If Usersel.Clear
nächster Fehler ist: Wrong numer of arguments or invalid property assignment Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tstone Mitglied Werkzeugkonstrukteur
Beiträge: 163 Registriert: 04.06.2003 Dell Precision 470 Intel Xeon CPU 3,00GHz 2GB Ram Microsoft Windows XP Catia V5 R18 SP6 VB2005
|
erstellt am: 11. Sep. 2009 13:50 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
|
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 11. Sep. 2009 13:57 <-- editieren / zitieren --> Unities abgeben:
Code: Sub main()Dim d Dim was(1) was(0) = "Pad" was(1) = "Line" Set d = Nothing Dim usersel Set usersel = CATIA.ActiveDocument.selection usersel.Clear Dim e As String e = usersel.SelectElement4(was, "Achse selektieren", "Nicht aktiv", True, d) MsgBox (d.Name & ":" & e) usersel.Clear End Sub
Habe es jetzt hinbekommen, dass wenigstens keine Fehlermeldung kommt. Eine Achse auswählen, kann ich jedoch immernoch nicht....
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 11. Sep. 2009 16:29 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo, dann kann jetzt wieder der Trick kommen, den Filter auf z.B. "AnyObject" zu setzen um alles zu erlauben, den gewünschten Object selektieren und anschließend über TypeName(Selection.Item(1).Value) an den Typ. Diesen Typ kannst du dann in dein Filter was(1)setzen. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 14. Sep. 2009 08:11 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antworten, leider auch hier negativ. Trotz "AnyObject" klicke ich auf eine Achse und bekomme als Ausgabe eine Msgbox mit dem obergeordneten Productnamen. Leider nicht den Namen der Achse :-( Jemand noch eine Idee? Macht es evtl. Sinn einen Benutzerauswahlfilter zu setzen? Kann mir vorstellen, dass dann dennoch das Product ausgelesen wird, anstatt die Inhalte des Parts. Die Achse wird auch nicht gefangen... Code: Sub main()Dim i As Integer i = 0 Do Until i = 3 Dim e Dim filter(0) Dim d As Document Set d = Nothing Dim usersel Set usersel = CATIA.ActiveDocument.selection i = i + 1 filter(0) = "AnyObject" e = usersel.SelectElement4(filter, "Achse selektieren", "Nicht aktiv", True, d) MsgBox (d.Name & ": " & e) Loop
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MarkusK Mitglied
Beiträge: 130 Registriert: 09.08.2002 Dell Precision T5500 Intel Xenon X5560 4x 2,8 GHz 12 GB Ram NVIDIA Quadro FX 3800 Win XP Catia V5R19 SP3
|
erstellt am: 15. Sep. 2009 09:38 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo IIYTII ich beschäftige mich derzeit mit was ähnlichem, daher interesiert mich das Thema auch. Nur habe ich nocht nicht ganz ganau verstanden, was deine Vorraussetzungen sind. Wenn du das Makro startets, ist dann das Produkt aktiv, oder eine Zeichnung? Ist diese "Achse" in der Bohrung tatsächlich eine Linie oder meinst du die Mittellienie, die auch bei der Bedingugserzeugung oder beim Messen angedeutet wird. ------------------ Gruss Markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
IIYTII Mitglied
Beiträge: 85 Registriert: 30.05.2007 Catia V5 R19 Programmierung unter CATvba
|
erstellt am: 15. Sep. 2009 13:55 <-- editieren / zitieren --> Unities abgeben:
Genau, also ich befinde mich in einem Product. Derzeit habe ich mir eine simple Lochplatte gebaut und möchte die Achse einer Bohrung selektieren und dessen Namen auslesen, so dass ich diese Achse in eine Variable speicher und später benutzen kann um z.B. einen Constraint durch ein Makro anzulegen... Derzeit bekomme ich aber immer als Ausgabe: Testbaugruppe.PRODUCT:UNDO (sowas ähnliches) und leider nicht den Achsenpfad, sondern nur den Namen, der übergeordneten Baugruppe, in dem das Part liegt. Wenn ich vor dem starten meines Makros alle Achsen und Flächen selektiere, dann läuft es wunderbar durch und legt auch alle Constraints höchst variable an, von daher bin ich auf dem Gebiet schonmal weiter. Jedoch wäre es benutzerfreundlicher, wenn man realtime mäßig die Selektionen nacheinander durchführen kann. Derzeit bin ich schon soweit, dass ich ins makro geschrieben habe, dass die STRG Taste zunächst für 3 Selektionen Makromäßig aktiv bleibt um eine realtime Selektion zu "simulieren". Aber das ist oberster Fusch am Bau und ich hätte es gerne anders... Gruß [Diese Nachricht wurde von IIYTII am 15. Sep. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Makronizer Mitglied Dipl.-Ing Maschinenbau-Integrierte Produktentwicklung
Beiträge: 51 Registriert: 15.09.2009
|
erstellt am: 16. Sep. 2009 14:41 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo YT, Problem ist mir bekannt, habe ich mich während meiner Diplomarbeit mit herumgeschlagen. Weder Usersel während des laufenden Makros, noch Usersel vor Starten des Makros hat funktioniert. Habe es jedoch nur in vba versucht, versuch es mal in VBS, vllt klappt es ja da. Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernod Mitglied
Beiträge: 40 Registriert: 03.03.2010
|
erstellt am: 23. Apr. 2010 16:53 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo, ich möchte diese Frage mal wieder hochschieben. Es muss doch möglich sein SelectElement4 korrekt anzuwenden?! Ich habe derzeit folgende Situation: - Ich habe ein Product, in diesem befinden sich 2 Parts - Als aktives Dokument ist das Part 2 gesetzt - Ich möchte einen Punkt aus dem Part 1 selektieren - Ich verwende vba Code: 01 Dim Filter(0) 02 Filter(0) = "Point" 03 'Selektion definieren und leeren ---------------------------------- 04 Dim UserSel As Object 05 Set UserSel = CATIA.ActiveDocument.Selection 06 UserSel.Clear 07 'Selection vornehmen lassen --------------------------------------- 08 Dim intSelAbfrageStr As String 09 Dim D As Document 10 Set D = Nothing 11 intSelAbfrageStr = UserSel.SelectElement4(Filter, "Bezugspunkt oben waehlen.", "Nicht aktiv", True, D) 12 MsgBox (D.Name & ": " & intSelAbfrageStr)
Als Ergebnis bekomme ich entweder: - Nach der Selektion des Punktes die Fehlermeldung: Runtimeerror xxxxxxx "Method SelectElement4" of object "SelectioN" failed - oder nach der Selektion des Punktes die gewünschte MsgBox mit dem Inhalt "Undo".. also als Wert für die Variable "intSelAbfrageStr" Woran kann das liegen? Gruß, Bernod PS: Als Beispiel evtl. der Code aus dem Ziethen:
Code: Dim E As String Dim Filter(0) Dim D As Document Set D = Nothing E = Selektion.SelectElement4(Filter, "Punkt selektieren", "Nicht aktiv", True, D)MsgBox(D.Name & ": " & E)
Und noch ein Beispiel aus der v5Automation:
Code: The following example supposes a part, containing a pad, and drawing are currently edited, the drawing window beeing the current window. It asks the end user to select a 2-D topological entity, such as a Plane , in a part. Then it creates a front view in the drawing, projecting the 3D geometry onto the selected 2-D topological entity. Dim DrawingSelection,DrawingSheets,DrawingSheet,DrawingViews,DrawingFrontView : ReDim DrawingSelectionAtBeginning(1) Dim Status,InputObjectType(0),Plane,Drawing,DrawingViewGenerativeBehavior,V1(2),V2(2),PartDocument Set Drawing = CATIA.ActiveDocument : Set DrawingSelection = Drawing.Selection : Set DrawingSheets = Drawing.Sheets Set DrawingSheet = DrawingSheets.ActiveSheet 'We save the current selection content ReDim DrawingSelectionAtBeginning(DrawingSelection.Count2) for SelectionObjectIndex = 0 to DrawingSelection.Count2-1 Set DrawingSelectionAtBeginning(SelectionObjectIndex) = DrawingSelection.Item2(1).Value next SelectionAtBeginningLength = DrawingSelection.Count2 'Feature creation InputObjectType(0)="BiDimInfinite" Status=DrawingSelection.SelectElement4(InputObjectType,"Select a 2-D topological entity in a 3-D geometry", _ "Select a 2-D topological entity",false,PartDocument) if ((Status = "Cancel") Or (Status = "Undo") Or (Status = "Redo")) then ' We restore the selection to its initial content PartDocument.Selection.Clear for SelectionObjectIndex = 0 to SelectionAtBeginningLength-1 DrawingSelection.Add DrawingSelectionAtBeginning(SelectionObjectIndex) next Exit Sub else Set BiDimFeature = PartDocument.Selection.Item2(1).Value BiDimFeatureType = TypeName(BiDimFeature) if ((BiDimFeatureType="Plane") Or (BiDimFeatureType="PlanarFace")) then BiDimFeature.GetFirstAxis V1 BiDimFeature.GetSecondAxis V2 else Exit Sub end if ' We create a view called "Front View" in the current sheet, using Plane as projection plane, and whose origin ' coordinates are 300,150 Set DrawingFrontView = DrawingSheet.Views.Add("Front View") Set DrawingViewGenerativeBehavior = DrawingFrontView.GenerativeBehavior DrawingViewGenerativeBehavior.Document = PartDocument DrawingViewGenerativeBehavior.DefineFrontView V1(0), V1(1), V1(2), V2(0), V2(1), V2(2) DrawingFrontView.x = 300 DrawingFrontView.y = 150 DrawingViewGenerativeBehavior.Update ' We clear the PartDocument Selection object PartDocument.Selection.Clear end if
[Diese Nachricht wurde von Bernod am 23. Apr. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Apr. 2010 19:30 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Servus IMHO ist SelectedElement4 nicht dass was du suchst. SelectedElement4 ist für das Selektieren von Objekten in einem anderem Fenster/Dokument (zB Fläche im Part aus einer Drawing heraus) und nicht im selben Product. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. 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: 26. Apr. 2010 10:18 <-- editieren / zitieren --> Unities abgeben: Nur für IIYTII
Hallo, wie Bernd schon sage, die SelectElement4 Methode ist für eine externe Selektion (also Fensterwechsel) gedacht. Bei dir funktioniert das mit der SelectElement2 Methode. Hier mal ein Beispiel. Bei der Selektion ist es dabei völlig unerheblich welches Bauteil oder welche Baugruppe dabei aktiv ist. Die Hauptsache ist das das zu selektierende Feature im selben Fenster existiert. Code:
Option ExplicitSub CATMain() Dim intRootDocObj As ProductDocument Dim intSelObj As Object 'Selection Dim intSelFilter(0) Dim intSelStateStr As String On Error Resume Next Set intRootDocObj = CATIA.ActiveDocument If Err.Number <> 0 Then MsgBox "Falscher Dokumententyp!", vbExclamation, "ERROR" Exit Sub Else On Error GoTo 0 End If Set intSelObj = intRootDocObj.Selection intSelObj.Clear MsgBox "Bitte selektieren Sie einen Punkt" + vbNewLine + "ESC zum Abbrechen der Selektion und des Makros", vbInformation, "Punkt selektieren" intSelFilter(0) = "Point" intSelStateStr = intSelObj.SelectElement2(intSelFilter, "Bitte Punkte selektieren / ESC zum Abbrechen", False) If intSelStateStr = "Normal" Then MsgBox "Sie haben folgenden Punkt selektiert:" + vbNewLine + vbNewLine + _ "Punktname:" + vbTab + intSelObj.Item(1).Value.Name + vbNewLine + _ "Partname:" + vbTab + intSelObj.Item(1).Value.Parent.Parent.Parent.Parent.Name, vbInformation, "Selektion erfolgreich" Exit Sub Else MsgBox "Die Selektion war NICHT erfolgreich", vbExclamation, "Selektion nicht erfolgreich" Exit Sub End If 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 |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|