| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Alfatech wählt ZW3D für bessere Lötpaletten für die Leiterplattenindustrie |
Autor
|
Thema: Volumenkörper mit iLogic unsichtbar schalten (3369 mal gelesen)
|
kiri2 Mitglied Tech.Produktdesigner
Beiträge: 34 Registriert: 13.03.2014
|
erstellt am: 19. Aug. 2014 13:27 <-- editieren / zitieren --> Unities abgeben:
Hallo, in Zusammenhang mit meiner Frage hier: http://ww3.cad.de/foren/ubb/Forum50/HTML/034449.shtml hat sich mir die Frage ergeben ob man Volumenkörper mit iLogic sichtbar und unsichtbar schalten kann. Ich habe durch googeln ein Code gefunden der halbwegs Funktioniert. Jedoch benutzt dieser die Zeile: oPartDef.SurfaceBodies.Item(1).Visible = False Die Nummer "1" sagt ihm welchen Volumenkörper er ausblenden soll. Nur leider Ändern sich die oder irgendwas (es erschliesst sich mir nicht ganz). Und generell ist es sehr Fehleranfällig. Gibt es da eine gute andere Methode? Am besten wo man per Benennung ausblenden kann! Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
loop29 Mitglied
Beiträge: 903 Registriert: 15.02.2004 Factory Design Suite Ultimate 2012, Dell T3600, 16 Gbyte, Quadro 4000 Dell M6800, 32 Gbyte, Quadro K5100M
|
erstellt am: 19. Aug. 2014 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für kiri2
Hi kiri2, kopierst Dir den code von dem Link in eine neue Regel innerhalb des multibody parts und probierst mal aus. http://inventortrenches.blogspot.fr/2013/01/ilogic-solid-body-visibility.html Falls Du Dir das noch anpassen willst helfe ich auch gerne. Der Code arbeitet mit der Component Definition von Inventor innerhalb des Multibody Parts. Komponenten sind hier die einzelnen Volumenkörper. Um an die Komponenten ranzukommen musst Du erst ein Objekt instanziieren: Dim oCompDef as ComponentDefinition oCompDef = ThisDoc.Document.ComponentDefinition Dann die Volumenkörper: Dim oBody as SurfaceBody Dann legt Curtis sich einen Array an wo er die ganzen Volumenkörpernamen reinschmeißt. Dim MyArrayList As New ArrayList i = 1 For Each SurfaceBody in oCompDef.SurfaceBodies oBody = oCompDef.SurfaceBodies.Item(i) MyArrayList.add(oBody.Name) i = i +1 Next Dann lässt er den Benutzer über die InputListBox auswählen, welche Volumenkörper geschaltet werden sollen. Der Rest ist dann ausführen der entsprechenden Auswahl. Geschaltet wird über den Ausdruck: oBody.Visible = False/True Beste Grüße Falk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiri2 Mitglied Tech.Produktdesigner
Beiträge: 34 Registriert: 13.03.2014
|
erstellt am: 19. Aug. 2014 14:53 <-- editieren / zitieren --> Unities abgeben:
Okay habe es. War etwas vorschnell gleich zu Fragen. Denke so sollte es gehen: If Parameter = 2 Then i = 2 For Each SurfaceBody In oCompDef.SurfaceBodies oBody = oCompDef.SurfaceBodies.Item(i) oBody.Visible = False Next End If Oder bekomme ich da irgendwie die Namen mit rein? [Diese Nachricht wurde von kiri2 am 19. Aug. 2014 editiert.] [Diese Nachricht wurde von kiri2 am 19. Aug. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
loop29 Mitglied
Beiträge: 903 Registriert: 15.02.2004 Factory Design Suite Ultimate 2012, Dell T3600, 16 Gbyte, Quadro 4000 Dell M6800, 32 Gbyte, Quadro K5100M
|
erstellt am: 19. Aug. 2014 17:53 <-- editieren / zitieren --> Unities abgeben: Nur für kiri2
Du kommst an den Namen des Volumenkörpers nur ran über die Komponentendefinition, so wie in dem Beispiel von Curtis gezeigt. Er geht ja über die Aufzählung aller Komponenten und schreibt sich den Namen mit oBody.Name in den Array. Vielleicht gibt es eine Möglichkeit direkt auf die Komponente über den Namen zuzugreifen, aber das würd ich dann als ziemlich fummelig empfinden wenn Du vorher den Browsernamen vorher eintippern musst. Da finde ich die Darstellung in der Liste komfortabler. Es wäre auch noch möglich über einen Selection Set im Browser. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
loop29 Mitglied
Beiträge: 903 Registriert: 15.02.2004 Factory Design Suite Ultimate 2012, Dell T3600, 16 Gbyte, Quadro 4000 Dell M6800, 32 Gbyte, Quadro K5100M
|
erstellt am: 20. Aug. 2014 16:34 <-- editieren / zitieren --> Unities abgeben: Nur für kiri2
Hey Kiri, hab grad nicht ganz soviel Zeit, aber zu Deinem Problem mit den Parametern: Ich hatte mir mal eine Regel erstellt mit der ich die Werkstoffmaterialien in Bauteile & Baugruppen reingeschrieben hab. Dort hab ich mit Try Catch eine Abfrage nach dem existierenden Parameter gemacht, weil die Regel ja sonst immer wieder den Parameter ins Bauteil reinschreibt. Hier ist der Code: Sub Main() Dim oDoc As Document oDoc = ThisApplication.ActiveDocument Dim oCompDef As ComponentDefinition oCompDef = oDoc.ComponentDefinition Dim oParams As Parameters oParams = oCompDef.Parameters Dim oUserParams As UserParameters oUserParams = oParams.UserParameters Dim Werkstoff As Parameter Try oTester = oUserParams.Item("Werkstoff") Catch oMaterialType = oUserParams.AddbyValue("Werkstoff", "", kTextUnits) MultiValue.List("Werkstoff") = iProperties.Materials End Try End Sub Ich hoffe Du kannst Dir daraus einen Reim machen Viel Erfolg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiri2 Mitglied Tech.Produktdesigner
Beiträge: 34 Registriert: 13.03.2014
|
erstellt am: 20. Aug. 2014 22:48 <-- editieren / zitieren --> Unities abgeben:
Das Problem ist jetzt das er immer in den Catch reingeht, egal ob der Parameter existiert oder nicht. So soll das doch nicht sein oder? Try Dann schauen ob der Parameter da ist. Catch Wenn nicht dann erstelle ihn. End Try Oder sehe ich das falsch? Eine Möglichkeit gleich mehrere Parameter mit Nummerierung abzufragen geht nicht oder? Finde leider keinen Weg in der Hilfe von Inventor. Also das ich gleich abfragen kann ob zum Beispiel Länge_1, Länge_2 ... Länge_x schon vorhanden sind? [Diese Nachricht wurde von kiri2 am 21. Aug. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
loop29 Mitglied
Beiträge: 903 Registriert: 15.02.2004 Factory Design Suite Ultimate 2012, Dell T3600, 16 Gbyte, Quadro 4000 Dell M6800, 32 Gbyte, Quadro K5100M
|
erstellt am: 21. Aug. 2014 11:16 <-- editieren / zitieren --> Unities abgeben: Nur für kiri2
Ja, Try probiert hier den Wert aus "Werkstoff" in den UserParameter oTester reinzuschreiben. Das funktioniert nicht wenn "Werkstoff" nicht existiert und dann macht er mit catch weiter. Man könnte ja jetzt auch mit einer If-Abfrage und einem Index die entsprechenden Parameter abfragen. Dann kannst Du auch mehrere Parameter über den Laufindex überprüfen. Grüße [Diese Nachricht wurde von loop29 am 21. Aug. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
kiri2 Mitglied Tech.Produktdesigner
Beiträge: 34 Registriert: 13.03.2014
|
erstellt am: 22. Aug. 2014 08:41 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von loop29: Ja, Try probiert hier den Wert aus "Werkstoff" in den UserParameter oTester reinzuschreiben. Das funktioniert nicht wenn "Werkstoff" nicht existiert und dann macht er mit catch weiter.Man könnte ja jetzt auch mit einer If-Abfrage und einem Index die entsprechenden Parameter abfragen. Dann kannst Du auch mehrere Parameter über den Laufindex überprüfen. Grüße [Diese Nachricht wurde von loop29 am 21. Aug. 2014 editiert.]
Hab jetzt alles zum laufen bekommen. Besten Dank für deine Hilfe! Viel bei gelernt und immer top Antworten erhalten! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
loop29 Mitglied
Beiträge: 903 Registriert: 15.02.2004 Factory Design Suite Ultimate 2012, Dell T3600, 16 Gbyte, Quadro 4000 Dell M6800, 32 Gbyte, Quadro K5100M
|
erstellt am: 22. Aug. 2014 10:20 <-- editieren / zitieren --> Unities abgeben: Nur für kiri2
|