| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Bauteil-Achsen in Zeichnungen einschließen (1585 / mal gelesen)
|
KAME-WJ Mitglied Maschinenbau-Ingenieur
Beiträge: 22 Registriert: 22.09.2014 Intel Core i9-9900KF, 8-Core @5GHz 16 GB DDR4-2666 MHz NVIDIA Quadro P1000, 4GB GDDR5 ASUS Prime Z390-P WIN10 x64 auf NVME SSD INV2019
|
erstellt am: 26. Jul. 2018 17:14 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich versuche schon seit geraumer Zeit folgdendes Makro zu verwirklichen... Und zwar möchte ich von Bauteilen die Modellachsen einschließen damit diese in der Zeichnung sichtbar sind. Hintergrund dafür ist, dass bei Achsen die mit dem Befehl "Mittelpunktmarkierung" oder "Symetrielinie" oft gerne die Referenzkanten verloren gehen, wenn Änderungen am 3D-Modell gemacht werden. Daher bin ich ein Fan davon geworden Bauteile, vor allem Normteile wie Schrauben etc., im Browser(links) auszuwählen und dann die Modellachsen einzuschließen. Diese können dann nicht bei Änderungen am 3D "verloren" gehen. Bei großen Baugruppen jedoch ist das eine langwierige Arbeit. Daher wollte ich ein Makro schreiben, welches, nachdem die gewünschten Bauteile ausgewählt wurden, die Achsen einschließt. Den derzeitigen Arbeitsablauf habe ich als PDF im Anhang bildlich dargestellt. Vielleicht hat jemand eine Idee um dies zu verwirklichen. Grüße, Joscha [Diese Nachricht wurde von KAME-WJ am 26. Jul. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 27. Jul. 2018 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für KAME-WJ
Du versuchst es schon lange? Wie weit bist Du gekommen? Wie soll entschieden werden, welche Achsen eingeschlossen werden sollen? Oder alle drei Ursprungsachsen von den gewählten Bauteilen? nur kurz zum Einstieg, diese Stichwort, die ich aus der API-Hilfe habe: soll heißen, wenn man das Objekt hat, sollte es auch einfach in die Ansicht einzublenden sein ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME-WJ Mitglied Maschinenbau-Ingenieur
Beiträge: 22 Registriert: 22.09.2014 Intel Core i9-9900KF, 8-Core @5GHz 16 GB DDR4-2666 MHz NVIDIA Quadro P1000, 4GB GDDR5 ASUS Prime Z390-P WIN10 x64 auf NVME SSD INV2019
|
erstellt am: 27. Jul. 2018 13:30 <-- editieren / zitieren --> Unities abgeben:
Hallo KraBBy, versuche es schon seit INV2013. Immer wieder angefangen und dann verworfen. Dein Ansatz scheint in die richtige Richtung zu gehen... Plan wäre, dass es drei Makros gibt (für jede Achse eine). Mein Problem ist, dass ich über das markierte Bauteil nicht zum dazugehörigen Objekt komme. Über SelectSet.item bekomme ich nur ein "GenericObject" und damit kann ich nichts anfangen. Grüße, Joscha Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 27. Jul. 2018 19:36 <-- editieren / zitieren --> Unities abgeben: Nur für KAME-WJ
Dazu gab es hier mal was: http://ww3.cad.de/foren/ubb/Forum258/HTML/001618.shtml#000005Ich habe es auch geschafft, da die Ansicht mit zurück zu geben. Das kann ich frühestens Montag nachliefern. Hab auch kurz getestet, die Achse vom Bauteil anzuzeigen. Das ist aber noch gescheitert, weil es eine Achse eines Bauteils ist, die Ansicht aber von einer iam stammt. In der Hilfe steht da was von 'aus der Achse muss vorher ein WorkAxisProxy-objekt basierend auf der Baugruppe werden'. Das verstehe ich noch nicht. Vielleicht kommst Du ja da schon weiter... Schönes WE! ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME-WJ Mitglied Maschinenbau-Ingenieur
Beiträge: 22 Registriert: 22.09.2014 Intel Core i9-9900KF, 8-Core @5GHz 16 GB DDR4-2666 MHz NVIDIA Quadro P1000, 4GB GDDR5 ASUS Prime Z390-P WIN10 x64 auf NVME SSD INV2019
|
erstellt am: 30. Jul. 2018 09:34 <-- editieren / zitieren --> Unities abgeben:
|
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 31. Jul. 2018 08:54 <-- editieren / zitieren --> Unities abgeben: Nur für KAME-WJ
hier nun der angekündigte Entwurf. Lief bei mir soweit durch (sicher noch nicht vollständig getestet...). Code: Sub Test_idw_PartSelection_includeAxis() ' User wählt eine Komponente innerhalb einer Zeichnungsansicht ' Ansicht muss(?) eine .iam referenzieren ' Es wird eine Achse der gewählten Komponente eingeschlossen ' ' KraBBy 31.07.2018 Dim oDoc As DrawingDocument Set oDoc = ThisApplication.ActiveDocument 'Fehler, wenn keine Zeichnung aktiv 'Bauteil auswählen Dim ModellAusIDW As New clsModellAusIDW_ 'siehe Class Module! Dim oPartOcc As ComponentOccurrence 'gewähltes Bauteil Dim oDrwView As DrawingView Set oPartOcc = ModellAusIDW.SucheTeil(oDrwView) 'oDrwView ist jetzt die Ansicht mit dem gew. Bauteil If oPartOcc Is Nothing Then MsgBox "Auswahl abgebrochen", vbOKOnly, "Exit": Exit Sub 'aufräumen, damit ToolTip-Text verschwindet Set ModellAusIDW = Nothing 'Achse und AxisProxy erhalten Dim oWAx(1 To 3) As WorkAxis Dim oWAxP(1 To 3) As WorkAxisProxy Dim i As Integer For i = 1 To 3 Set oWAx(i) = oPartOcc.Definition.WorkAxes.Item(i) 'WorkAxis Call oPartOcc.CreateGeometryProxy(oWAx(i), oWAxP(i)) 'WorkAxisProxy erzeugen Next 'i Call oDrwView.SetIncludeStatus(oWAxP(3), True) 'hier willkürlich eine Achse gewählt 'Achse muss proxyObjekt aus iam-Umgebung sein! ' https://forums.autodesk.com/t5/inventor-customization/drawingview-setincludestatus-where-is-my-centerline-centermark/td-p/7817132 End Sub
Das folgende muss in ein Class Module mit dem Namen "clsModellAusIDW_":
Code: ' gehört zu Sub "Test_idw_PartSelection_includeAxis" ' ' Quelle: ' http://ww3.cad.de/foren/ubb/Forum258/HTML/001618.shtml ' -> leicht angepasst ' Option Explicit Private WithEvents eI As Inventor.InteractionEvents Private WithEvents eS As Inventor.SelectEvents Private AuswahlAktiv As Boolean Private occ As Inventor.ComponentOccurrence Private oDView As Inventor.DrawingView ' hinzu KraBBy 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 'hinzu KraBBy Set oDView = aktAnsicht End Sub
Public Function SucheTeil(ByRef oView As DrawingView) As ComponentOccurrence 'oView hinzu, KraBBy 27.7.2018 'oView soll die Ansicht mit der gewählten Komponente werden -> als Rückgabewert '' 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 If Not oDView Is Nothing Then Set oView = oDView 'hinzu KraBBy Else Set SucheTeil = Nothing Set oView = Nothing 'hinzu KraBBy 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 Private Sub eI_OnTerminate() 'hinzu KraBBy 'tritt (auch) ein, wenn während der Auswahl Esc gedrückt wird ' Schleife beenden. AuswahlAktiv = False End Sub
------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME-WJ Mitglied Maschinenbau-Ingenieur
Beiträge: 22 Registriert: 22.09.2014 Intel Core i9-9900KF, 8-Core @5GHz 16 GB DDR4-2666 MHz NVIDIA Quadro P1000, 4GB GDDR5 ASUS Prime Z390-P WIN10 x64 auf NVME SSD INV2019
|
erstellt am: 31. Jul. 2018 16:49 <-- editieren / zitieren --> Unities abgeben:
WOW KraBBy! Vielen, vielen Dank!!!!! Funktioniert für den Entwurf einwandfrei!! Werde ihn mal im täglichen Betrieb testen und gegebenenfalls Änderungen bekanntgeben. Habe selber noch nicht sehr viel mit Class Modules gearbeitet. Werde deinen Code mal bei Gelegenheit studieren Grüße, J Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME-WJ Mitglied Maschinenbau-Ingenieur
Beiträge: 22 Registriert: 22.09.2014 Intel Core i9-9900KF, 8-Core @5GHz 16 GB DDR4-2666 MHz NVIDIA Quadro P1000, 4GB GDDR5 ASUS Prime Z390-P WIN10 x64 auf NVME SSD INV2019
|
erstellt am: 07. Aug. 2018 14:49 <-- editieren / zitieren --> Unities abgeben:
Hallo KraBBy, bis jetzt funktioniert alles einwandfrei! Danke nochmal. Wäre es denn möglich ein neues Makro in Anlehnung an dieses zu erstellen, um in einer Zeichnung die Schnittbeteiligung eines einzelnen Bauteils zu ändern? jetziger Arbeitsverlauf: Bauteil auswählen - Rechtsklick - Schnittbeteiligung - "Schnitt" oder "Kein" wählen Hätte es selber versucht aber leider nicht geschafft. ------------------ "ENGINEER" noun. [en-juh-neer] Someone who does precision guesswork based on unreliable data provided by those of questionable knowledge See also wizard, magician Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 07. Aug. 2018 17:14 <-- editieren / zitieren --> Unities abgeben: Nur für KAME-WJ
|
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 08. Aug. 2018 10:31 <-- editieren / zitieren --> Unities abgeben: Nur für KAME-WJ
das "rumprobieren" ist jetzt geschehen. Leider ohne Erfolg. Was ich mir angesehen habe: - SectionDrawingView Object hier gibt es ein par Eigenschaften, die mit Schnitten zusammenhängen (IncludeSlice, SliceAllParts) - BrowserPane und BrowserNode object hatte gedacht, hier was finden zu können. Von Hand läufts ja auch über den Browser Es ist durchaus möglich, dass ich was übersehe oder an der falschen Stelle gesucht habe. Es könnte aber auch sein, dass die gewünschte Funktionalität nicht in der API abgebildet ist. Jetzt müssen wir auf die Mithilfe von anderen Forumsmitgliedern hoffen... ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME-WJ Mitglied Maschinenbau-Ingenieur
Beiträge: 22 Registriert: 22.09.2014 Intel Core i9-9900KF, 8-Core @5GHz 16 GB DDR4-2666 MHz NVIDIA Quadro P1000, 4GB GDDR5 ASUS Prime Z390-P WIN10 x64 auf NVME SSD INV2019
|
erstellt am: 08. Aug. 2018 10:36 <-- editieren / zitieren --> Unities abgeben:
trotzdem vielen Dank für deine Bemühungen! habe auch ein bisschen herumgesucht und nach "section participation" in der api hilfe gesucht, jedoch denke ich das die einträge eher was mit Baugruppen zu tun hat. ------------------ "ENGINEER" noun. [en-juh-neer] Someone who does precision guesswork based on unreliable data provided by those of questionable knowledge See also wizard, magician Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tacker Mitglied TZ, Tech. MB, Softwareentwickler
Beiträge: 175 Registriert: 23.09.2010 IV 2017 Pro i7-7700K 4x4.2GHz 32GB DDR4-2400 GTX 1060 6GB DDR5
|
erstellt am: 10. Aug. 2018 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für KAME-WJ
|