| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Auf dem Weg zur digitalen Auftragsmappe. (Phoenix/PDM,SOLIDWORKS,PDM System,PLM,PLM System), ein Anwenderbericht
|
Autor
|
Thema: Kettenauswahl (676 / mal gelesen)
|
pAtrickstAr Mitglied Werkzeugmechaniker
Beiträge: 7 Registriert: 02.05.2024
|
erstellt am: 08. Mai. 2024 12:08 <-- editieren / zitieren --> Unities abgeben:
Guten Tag, vielleicht ist das ein wenig speziell. Gibt es die Möglichkeit in einer IPT-Skizze alle zusammenhängenden Elemente auszuwählen? (Bei SolidWorks nennt sich das Kettenauswahl, RMT auf ein Skizzenelement und dann Kettenauswahl.) Evtl. per Makro? Das würde einiges erleichtern. Vielen Dank im Voraus Dennis Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 08. Mai. 2024 13:27 <-- editieren / zitieren --> Unities abgeben: Nur für pAtrickstAr
Moin Konturauswahlen sind in der Skizze eher unüblich. Was möchtest du denn im Anschluß mit der Auswahl machen? Nur so aus Neugierde. Als VBA-Makro könnte man es so versuchen. Du kannst dir in der Skizzenumgebung noch einen Benutzerbefehl Button für das Makro erzeugen, dann kann man darüber die Auswahl starten. Ein Tastenkürzel wäre auch möglich. Code:
Option ExplicitPublic Sub ProfileSelect() Dim oApp As Application Set oApp = ThisApplication Dim oPartDoc As PartDocument Set oPartDoc = oApp.ActiveEditDocument If Not oApp.ActiveEditObject = kPlanarSketchObject Then Exit Sub Dim oSketch As PlanarSketch Set oSketch = oApp.ActiveEditObject Call oSketch.UpdateProfiles Dim oSelSet As SelectSet Set oSelSet = oPartDoc.SelectSet Call oSelSet.Clear Dim oProfile As Profile Set oProfile = oApp.CommandManager.Pick(kSketchProfileFilter, "Profil auswählen") Dim oProfPath As ProfilePath Set oProfPath = oProfile.Item(1) Dim oObjColl As ObjectCollection Set oObjColl = oApp.TransientObjects.CreateObjectCollection Dim oProfEnt As ProfileEntity For Each oProfEnt In oProfPath Call oObjColl.Add(oProfEnt.SketchEntity) Next Call oSelSet.SelectMultiple(oObjColl) End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pAtrickstAr Mitglied Werkzeugmechaniker
Beiträge: 7 Registriert: 02.05.2024
|
erstellt am: 10. Mai. 2024 07:04 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, zunächst einmal vielen Dank für das Makro. allerdings ist es nicht das was ich benötige. Prinzipiell möchte ich in einer 2D Skizze ein Skizzenelement anklicken und durch das Makro sollen alle damit zusammenhängenden Elemente mit markiert werden. Da ich für die Arbeit das ständig machen muss um diese Elemente z.B. in eine andere Skizze zu kopieren oder weiter zu bearbeiten , wäre das einfach eine extreme Arbeitserleichterung. Das von Dir erstellte Makro zeigt mir nur das an was z.B. bei der Funktion Erhebung ausgewählt werden würde. Also ein geschlossenes Profil
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 10. Mai. 2024 09:15 <-- editieren / zitieren --> Unities abgeben: Nur für pAtrickstAr
Moin Geschlossene Profile sind doch zusammenhängende Skizzenlemente. Wähle ich eines aus, werden alle dazugehörenden Skizzenlemente ausgewählt. Wie definierst du zusammenhängend? Elemente die einen gemeinsamen Endpunkt haben, Elemente die durch eine irgendeine Abhängigkeit oder Bemaßung in Beziehung stehen? Bedenke bitte, dass nicht jeder ein SW rumliegen hat, um eben selbst herauszufinden wie genau sich der Befehl verhält. Eventuell wäre ein Screenshot einer Skizze und den gewünschten Skizzenelemnten hilfreich? Wenn du dauernd Gruppen von Skizzenelementen von einer Skizze zur nächsten kopierst, sind Blöcke eventuell eine Hilfe? ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Gündchen Ehrenmitglied V.I.P. h.c. SelbstständIng mit Planungsbüro Anlagenbau, Dipl.-Ing.-Maschinenbau
Beiträge: 2370 Registriert: 08.03.2008 IV seit den 5.3Er aktuell den 2014Ner WIN7pro-64bit SP das jeweils aktuelle
|
erstellt am: 11. Mai. 2024 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für pAtrickstAr
Zitat: Original erstellt von rkauskh:…Bedenke bitte, dass nicht jeder ein SW rumliegen hat, um eben selbst herauszufinden wie genau sich der Befehl verhält…
…denn dass ist hier das IV-Forum und nicht das für Solid Irgendwas Zitat: Original erstellt von rkauskh:…Eventuell wäre ein Screenshot einer Skizze und den gewünschten Skizzenelemnten hilfreich?…
Auch hier gilt: Dem guten Frager ist schon halb geantwortet. Auch bedenken, „IV-Sprech“ unterscheidet sich ziemlich von „SW-Sprech“. Zitat: Original erstellt von rkauskh:…Wenn du dauernd Gruppen von Skizzenelementen von einer Skizze zur nächsten kopierst, sind Blöcke eventuell eine Hilfe?…
…oder, meinereiner findet es nicht nicht so gut mit Skizzenblöcken zu modellieren, die ganze Skizze kopieren; dazu ggf. nur die Linienzüge die wiederverwendet werden sollen in der Skizze verwenden. Weitere Linienzüge auf eine weitere Skizze und der selben Ebene. ------------------ In diesem Sinne wünsche ich allen, weiterhin effektives Schaffen ---------------- Manfred Gündchen www.guendchen.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pAtrickstAr Mitglied Werkzeugmechaniker
Beiträge: 7 Registriert: 02.05.2024
|
erstellt am: 21. Mai. 2024 06:17 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, im Prinzip ist es recht simpel erklärt welche Elemente ausgewählt werden sollten mit diesem Makro. Vielleicht habe ich mich da wirklich nur zu umständlich ausgedrückt. im Prinzip alle Elemente egal ob Linie, Kreisbogen, Tangentialbogen usw. welche mit den Endpunkten miteinander verbunden sind. Ähnliches Prinzip gibt es ja innerhalb einer Skizze um die Elemente miteinander zu verbinden mit der Funktion "Kontur schließen". Nur bräuchte ich eben z.B. "Kontur Auswählen" welches automatisch alle Endpunkt-verbundenen Elemente auswählt. Mit Blöcken hätte ich nur wieder einen zusätzlichen schritt und müsste diesen dann auch jedes mal wieder "explodieren" lassen um weitere Elemente (Geometrien) übernehmen zu können. Dazu kann unsere CAM Integration mit Blöcken nicht wirklich was anfangen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 21. Mai. 2024 10:06 <-- editieren / zitieren --> Unities abgeben: Nur für pAtrickstAr
Moin Zitat: alle Elemente egal ob Linie, Kreisbogen, Tangentialbogen usw. welche mit den Endpunkten miteinander verbunden sind
Das sind dann geschlossene oder offene Profile. Und das Makro oben wählt diese aus bzw. alle Skizzenelemente die das Profil bilden. Im Stand oben werden nur die geschlossenen berücksichtigt, aber das liese sich vermutlich erweitern. Mal so aus Neugierde, was soll denn passieren, wenn an einem Endpunkt mehr als ein Skizzenelement anschließt, sich also die "Kette" verzweigt? Alles eine Kette oder sind es dann 2 Ketten, die sich gemeinsame Glieder teilen? ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pAtrickstAr Mitglied Werkzeugmechaniker
Beiträge: 7 Registriert: 02.05.2024
|
erstellt am: 21. Mai. 2024 10:17 <-- editieren / zitieren --> Unities abgeben:
Im Prinzip meinst du damit solche "Profile" wie sie z.B. bei der Funktion Extrusion -> Ausgabe Fläche gewählt werden? Das wäre natürlich auch eine Möglichkeit. So würde sogar die benötigte Verkettung hervorgehoben werden. Und ja solche eine verzweigte Verkettung wäre nicht erwünscht. Da greife ich auch ein und lösche die Koinzidents manuell weg. Ist auch öfters bei der Funktion "Versatz" nervig. Aber genau sowas bräuchte ich eben wie bei offenen Profilen oder Versatz ausgewählt wird. Nur eben zum Markieren damit ich es kopieren, verschieben usw. kann. Deine Variante wäre sogar in der Hinsicht von Vorteil, da Konstruktionslinien dann nicht mit markiert werden würden. Also Quasi das Makro aktivieren, mit der Maus ein Element anklicken und das "offene" oder dann auch "geschlossene" Profil wird ausgewählt.
So wäre das optimal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 01. Jun. 2024 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für pAtrickstAr
Moin Sorry, bin bis jetzt nicht mehr dazu gekommen mir das näher anzusehen. Die einfache Variante von oben läßt sich leider nich um offene Konturen erweitern. Ich hab mal eine Alternative gebastelt. Dazu Code 1 in ein normales VBA-Modul kopieren. Den Code 2 in ein Klassenmodul kopieren und das Klassenmodul "clsProfileSelect" nennen. Zum Ausführen die Sub "Kettenauswahl" starten. Bei jedem Überfahren eines Skizzenobjektes wird das daraus resultierende Profil als Vorschau gehighlighted (was'n Wort ). Klickt man drauf, beendet sich die Auswahl und die Skizzenelemente des Profiles sind selektiert. Verzweigt der Linienzug, werden die Verzweigungen nicht mit selektiert. Ich würde mir in die Skizzenumgebung über Benutzerbefehle anpassen einen Button für das Makro setzen. Code 1:
Code:
Option ExplicitPublic Sub Kettenauswahl() ' Declare a variable and create a new instance of the select class. Dim oSelect As New clsProfileSelect If Not ThisApplication.ActiveDocumentType = kPartDocumentObject Then Exit Sub End If If Not ThisApplication.ActiveEditObject = kPlanarSketchObject Then Exit Sub End If Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument Dim oSketch As PlanarSketch Set oSketch = ThisApplication.ActiveEditObject ' Call the Pick method of the clsSFrmProfileSelect object and set ' the filter to pick any sketchcurve. Dim oSketchEnts As ObjectsEnumerator Set oSketchEnts = oSelect.Pick(kSketchCurveFilter) If oSketchEnts Is Nothing Then Exit Sub Dim oObjColl As ObjectCollection Set oObjColl = ThisApplication.TransientObjects.CreateObjectCollection Dim oObj As Object For Each oObj In oSketchEnts Call oObjColl.Add(oObj) Next Dim oSelSet As SelectSet Set oSelSet = oPartDoc.SelectSet Call oSelSet.SelectMultiple(oObjColl) End Sub
Code 2:
Code:
Option Explicit' Declare the event objects Private WithEvents oInteraction As InteractionEvents Private WithEvents oSelect As SelectEvents ' Declare a flag that's used to determine when selection stops. Private bStillSelecting As Boolean Public Function Pick(filter As SelectionFilterEnum) As ObjectsEnumerator ' Initialize flag. bStillSelecting = True ' Create an InteractionEvents object. Set oInteraction = ThisApplication.CommandManager.CreateInteractionEvents ' Define that we want select events rather than mouse events. oInteraction.SelectionActive = True ' Set a reference to the select events. Set oSelect = oInteraction.SelectEvents ' Set the filter using the value passed in. oSelect.AddSelectionFilter filter ' The InteractionEvents object. oInteraction.Start ' Loop until a selection is made. Do While bStillSelecting DoEvents Loop ' Get the selected item. If more than one thing was selected, ' just get the first item and ignore the rest. Dim oSelectedEnts As ObjectsEnumerator Set oSelectedEnts = oSelect.SelectedEntities If oSelectedEnts.count > 0 Then Set Pick = oSelectedEnts Else Set Pick = Nothing End If ' Stop the InteractionEvents object. oInteraction.Stop ' Clean up. Set oSelect = Nothing Set oInteraction = Nothing End Function Private Sub oInteraction_OnTerminate() ' Set the flag to indicate we're done. bStillSelecting = False End Sub
Private Sub oSelect_OnSelect(ByVal JustSelectedEntities As ObjectsEnumerator, _ ByVal SelectionDevice As SelectionDeviceEnum, _ ByVal ModelPosition As Point, _ ByVal ViewPosition As Point2d, _ ByVal View As View) ' Set the flag to indicate we're done. bStillSelecting = False End Sub
Private Sub oSelect_OnPreSelect(PreSelectEntity As Object, _ DoHighlight As Boolean, _ MorePreSelectEntities As ObjectCollection, _ ByVal SelectionDevice As SelectionDeviceEnum, _ ByVal ModelPosition As Point, _ ByVal ViewPosition As Point2d, _ ByVal View As View) ' Set a reference to the object the mouse is currently over. ' We know it's an edge because of the filtering previously defined. Dim oSketchEnt As SketchEntity Set oSketchEnt = PreSelectEntity Dim oProfile As Profile Set oProfile = CreateProfile(oSketchEnt) If oProfile Is Nothing Then Exit Sub Dim oProfPath As ProfilePath Set oProfPath = oProfile.Item(1)
If oProfPath.count > 1 Then Set MorePreSelectEntities = ThisApplication.TransientObjects.CreateObjectCollection Dim oProfEnt As ProfileEntity For Each oProfEnt In oProfPath Call MorePreSelectEntities.Add(oProfEnt.SketchEntity) Next End If End Sub Private Function CreateProfile(ByVal oSketchEnt As SketchEntity) As Profile If Not oSketchEnt.Type = kSketchPointObject And Not oSketchEnt.Construction = True Then Dim oSketch As PlanarSketch Set oSketch = oSketchEnt.Parent Set CreateProfile = oSketch.Profiles.AddForSurface(oSketchEnt) End If End Function
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |