| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Pick-Methode in idw für ein Bauteil (2813 mal gelesen)
|
M.Philipp Mitglied Konstruktionsingenieur
Beiträge: 14 Registriert: 18.09.2014
|
erstellt am: 05. Mrz. 2015 08:42 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte gerne den user in einer idw mittels Pick Methode ein Bauteil aus einer Baugruppenansicht in der gleichen idw wählen lassen. Doch leider find ich kein passenden Filter kDrawing.... Wir haben oft die Einzelteile auf dem gleichen Zeichnungsblatt wie die dazugehörige Baugruppe. Ziel ist es, dass der User die Baugruppe platziert und in dieser Baugruppe dann das Teil anklickt, von dem er als nächstes eine Erstansicht erzeugen will. User wählt Teil - Pfad abfragen - Erstansicht erzeugen. Bitte um Hilfe. Gruß Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2013/2015 Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 05. Mrz. 2015 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für M.Philipp
Hallo Mario, nen kDrawing-Filter finde ich auch nicht. Aber versuchs doch mal mit dem kPartDefaultFilter oder dem kPartBodyFilter. Damit sollte es eigentlich klappen.
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
M.Philipp Mitglied Konstruktionsingenieur
Beiträge: 14 Registriert: 18.09.2014
|
erstellt am: 05. Mrz. 2015 09:54 <-- editieren / zitieren --> Unities abgeben:
|
CADboogie Mitglied Dipl.-Ing. Konstrukteur für Luftführungssysteme
Beiträge: 241 Registriert: 05.08.2009 Intel Xeon@ 3,07 GHz NVIDIA Quadro 2000 Windows 7, SP1, 64Bit Inventor 2012 (SP2), 2014 (SP2)
|
erstellt am: 05. Mrz. 2015 12:40 <-- editieren / zitieren --> Unities abgeben: Nur für M.Philipp
Hallo Mario, ich behelfe mir in diesem Fall so, dass ich das Bauteil erst öffne. Mit "Shift+RMT" kannst Du den Auswahlfilter auf "Bauteil" stellen und somit das Bauteil auch recht schnell öffnen.. HTH ------------------ Gruß aus Aachen, Walter *** Man kann nicht alles gleichzeitig machen, aber man kann alles gleichzeitig sein lassen *** Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
M.Philipp Mitglied Konstruktionsingenieur
Beiträge: 14 Registriert: 18.09.2014
|
erstellt am: 05. Mrz. 2015 12:47 <-- editieren / zitieren --> Unities abgeben:
|
metalgod Mitglied Technischer Zeichner, Mädchen für alles
Beiträge: 32 Registriert: 23.09.2015 Win10x64 Prof. Intel Core i7-8700K 3,70GHz, 16GB Ram Inventor Prof. 2018 64-Bit Visual Studio 2015 Express
|
erstellt am: 27. Sep. 2015 17:07 <-- editieren / zitieren --> Unities abgeben: Nur für M.Philipp
Hallo Mario, meines Wissens gibt es so einen Filter nicht. Meine Überlegung ist es über die in der .idw ausgewählte Kante eine Referenz zum Modell (.ipt) herzustellen, dann alle Modellkanten (in der .idw) einzublenden und dass alles in den OnPreSelect-Ereigniss zu packen, sodass nich nur eine, sondern alle Modellkanten beim OnPreSelect bzw. Drüberfahren mit dem Mauszeiger eingeblendet werden. Es ist zwar nicht ganz so elegant, funktioniert aber in den meisten Fällen ganz gut. Hier ist die Umsetzung: Eine Klasse namens "clsModellAusIDW" erstellen und folgendes einfügen: Code:
Option Explicit Private WithEvents eI As Inventor.InteractionEvents Private WithEvents eS As Inventor.SelectEvents Private AuswahlAktiv As Boolean Private occ As Inventor.ComponentOccurrence Private Sub eS_OnPreSelect(ByRef PreSelectEntity As Object, _ ByRef DoHighlight As Boolean, _ ByRef MorePreSelectEntities As Inventor.ObjectCollection, _ ByVal SelectionDevice As Inventor.SelectionDeviceEnum, _ ByVal ModelPosition As Inventor.Point, _ ByVal ViewPosition As Inventor.Point2d, _ ByVal View As Inventor.View) DoHighlight = False Set MorePreSelectEntities = ThisApplication.TransientObjects.CreateObjectCollection '' Referenz zur Kante. Dim zKante As Inventor.DrawingCurve Set zKante = PreSelectEntity.Parent '' auf zugehörige Modellkante bzw. Modelfläche zugreifen. Dim mGeom As Object ' As Inventor.EdgeProxy ODER Inventor.FaceProxy Set mGeom = zKante.ModelGeometry '' trotz des kDrawingCurveSegmentFilter - Filters können auch Linien von Skizzen '' (die Ansichtbezogen erstellt wurden wie z.B.: Schnittverlauf) '' selektiert werden, deswegen folgende If-Then-Else-Bediengung. If mGeom.Type = Inventor.ObjectTypeEnum.kFaceProxyObject _ Or mGeom.Type = Inventor.ObjectTypeEnum.kEdgeProxyObject Then '' Bezug auf referenziertes Modell festlegen. Set occ = mGeom.ContainingOccurrence Else: Exit Sub End If '' Referenz zur Ansicht. Dim aktAnsicht As Inventor.DrawingView Set aktAnsicht = zKante.Parent '' Alle Modellkanten abrufen. Dim zKantEnum As Inventor.DrawingCurvesEnumerator Set zKantEnum = aktAnsicht.DrawingCurves(occ) '' Alle Modellkanten "PreSelectieren" bzw. hervorheben. Dim Kante As Inventor.DrawingCurve For Each Kante In zKantEnum Call MorePreSelectEntities.Add(Kante.Segments(1)) Next DoHighlight = True End Sub Public Function SucheTeil() As ComponentOccurrence '' neues InteractionEvents-Object erzeugen. Set eI = ThisApplication.CommandManager.CreateInteractionEvents '' Interaction aktivieren. eI.InteractionDisabled = False 'eI.SelectionActive = True '' Referenz zum SelectEvent. Set eS = eI.SelectEvents '' Filter setzen eS.AddSelectionFilter (Inventor.SelectionFilterEnum.kDrawingCurveSegmentFilter) ToolTipAnzeigen '' InteractionEvents starten. eI.Start '' Schleife erzeugen: bis Auswahlvorgang beendet ist. Do While AuswahlAktiv ThisApplication.UserInterfaceManager.DoEvents Loop '' Bauteil zurückgeben. If eS.SelectedEntities.Count > 0 Then Set SucheTeil = occ Else: Set SucheTeil = Nothing End If End Function Private Sub Class_Initialize() AuswahlAktiv = True End Sub Private Sub Class_Terminate() '' Aufräumen eI.Stop Set eS = Nothing Set eI = Nothing End Sub Private Sub ToolTipAnzeigen() ThisApplication.GeneralOptions.ShowCommandPromptTooltips = True eI.StatusBarText = "Bauteil wählen." End Sub Private Sub eS_OnSelect(ByVal JustSelectedEntities As ObjectsEnumerator, _ ByVal SelectionDevice As SelectionDeviceEnum, _ ByVal ModelPosition As Point, _ ByVal ViewPosition As Point2d, _ ByVal View As View) '' Schleife beenden. AuswahlAktiv = False End Sub '' ESC-Taste wird gedruckt: Private Sub eI_OnTerminate() '' Schleife beenden. AuswahlAktiv = False End Sub
Das gehört in ein Modul (hiermit wird die Funktion aufgerufen):
Code:
Option ExplicitPublic Sub ModellAusIDW() '' Referenzu zur Zeichnung. Dim zDok As DrawingDocument Set zDok = ThisApplication.ActiveDocument '' Alternative zur Pick-Methode. Dim ModellAusIDW As New clsModellAusIDW Dim Bauteil As ComponentOccurrence Set Bauteil = ModellAusIDW.SucheTeil '' .ipt öffnen. Dim tDok As PartDocument Set tDok = ThisApplication.Documents.Open(Bauteil.Definition.Document.FullDocumentName, True) '' Zeichnung wieder aktiviern. zDok.Activate '' Ansicht platzieren. ThisApplication.CommandManager.ControlDefinitions.Item("DrawingBaseViewCmd").Execute '' Warten, bis Ansicht platziert wird, dann .ipt schließen Dim AnsichtIstPlatziert As Boolean AnsichtIstPlatziert = False Do Until AnsichtIstPlatziert ThisApplication.UserInterfaceManager.DoEvents If Not ThisApplication.CommandManager.ActiveCommand = "DrawingBaseViewCmd" Then AnsichtIstPlatziert = True Else tDok.Close (True) End If Loop End Sub
Einfach eine Baugruppenzeichnung öffnen und Sub ausführen.
Letzter Codeabschnitt (Schleife nach Platzierung der Ansicht) funktioniert zwar, aber wahrscheinlich gibt es dafür eine bessere Lösung. ------------------ alexander
[Diese Nachricht wurde von metalgod am 18. Feb. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xerxses Mitglied Laufbursche
Beiträge: 131 Registriert: 06.09.2011 IV2019 ACDM2019
|
erstellt am: 09. Feb. 2016 05:35 <-- editieren / zitieren --> Unities abgeben: Nur für M.Philipp
moin zusammen, Ich teste gerade dieses Makro und finde es auch sehr nützlich. Eine Sache stört mich, wenn man die Auswahl mit Esc unterbricht wird das Makro nicht beendet. Es bleibt im Hintergrund noch Aktiv. gibt es eine Möglichkeit das zu ändern? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
metalgod Mitglied Technischer Zeichner, Mädchen für alles
Beiträge: 32 Registriert: 23.09.2015 Win10x64 Prof. Intel Core i7-8700K 3,70GHz, 16GB Ram Inventor Prof. 2018 64-Bit Visual Studio 2015 Express
|
erstellt am: 18. Feb. 2016 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für M.Philipp
Hallo xerxses, ja, das ist möglich, wenn man Klassenmodul um diesen Sub noch erweitert (habe ich auch oben geändert): Code:
Private Sub eI_OnTerminate() AuswahlAktiv = False End Sub
------------------ alexander Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Konstrukteur (m/w/d) | Die besten Köpfe für die unterschiedlichsten Aufgaben finden. Menschen und Technologien verbinden, und zwar täglich aufs Neue - dafür schätzen unsere Kunden FERCHAU. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologien und für alle Branchen. Du weißt genau, was du technologisch auf dem Kasten hast? Du suchst einen Arbeitgeber, der das genau erkennt? Der dein Engagement wertschätzt ... | Anzeige ansehen | Konstruktion, Visualisierung |
|
xerxses Mitglied Laufbursche
Beiträge: 131 Registriert: 06.09.2011 IV2019 ACDM2019
|
erstellt am: 21. Feb. 2016 11:06 <-- editieren / zitieren --> Unities abgeben: Nur für M.Philipp
|