Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor
  Ändern der Bauteile/Bauteilfarbe durch iLogic oder VBA

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Ändern der Bauteile/Bauteilfarbe durch iLogic oder VBA (538 mal gelesen)
DaioD
Mitglied
Student


Sehen Sie sich das Profil von DaioD an!   Senden Sie eine Private Message an DaioD  Schreiben Sie einen Gästebucheintrag für DaioD

Beiträge: 10
Registriert: 04.02.2019

erstellt am: 04. Feb. 2019 17:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Moin zusammen!

Schon lange durchforste ich das Forum und poste nun zum ersten mal hier. Ich habe ein kleines Problem mit Inventor:

Ich habe eine Baugruppe aus 4-5 Bauteilen erstellt und möchte die Farbe der Bauteile über VBA oder iLogic ansteuern und verändern. Ist dies irgendwie in Inventor möglich?
Ich bin neu auf diesem Gebiet und würde mich jede Hilfe freuen!

Beste Grüße
Daio

[Diese Nachricht wurde von DaioD am 31. Mrz. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 174
Registriert: 19.09.2007

Inventor Professional 2016
Win7

erstellt am: 05. Feb. 2019 09:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DaioD 10 Unities + Antwort hilfreich

Farbdarstellung ändern, Komponenten einfügen/ersetzen, Screenshot abspeichern,... alles möglich sowohl per VBA als auch iLogic.

Ob jetzt VBA oder iLogic besser geeignet ist, hängt davon ab, wie das Programm ausgelöst werden soll.
Button auf der Benutzeroberfläche -> VBA
automatisch durch Ereignisauslöser -> iLogic
Auch die Frage, ob der Code in einer Bgr/Prt liegen soll spielt evtl. eine Rolle (wäre dann ein Fall für iLogic).
Aber keine Sorge, das ließe sich auch alles noch vermischen (VBA per iLogic aufrufen oder umgekehrt).

Liste der Befehle... naja das ist dann wohl die API-Hilfe


hier wird die Farbe einer Komponente innerhalb einer Baugruppe geändert:
http://ww3.cad.de/foren/ubb/Forum50/HTML/037829.shtml

Bild abspeichern:
https://ww3.cad.de/foren/ubb/Forum258/HTML/001630.shtml#000010

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DaioD
Mitglied
Student


Sehen Sie sich das Profil von DaioD an!   Senden Sie eine Private Message an DaioD  Schreiben Sie einen Gästebucheintrag für DaioD

Beiträge: 10
Registriert: 04.02.2019

erstellt am: 05. Feb. 2019 14:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo KraBBy,

vielen Dank für deine Links! Das mit dem abspeichern hat super geklappt, habe noch eine "For"-Schleife eingefügt, um das Bild x mal abzuspeichern.
Gibt es eine Möglichkeit auch den "Kamerawinkel" jedes mal um x grad oder zufällig zu rotieren?
Dafür habe ich diesen Code gefunden im Forum:

Code:
Public Sub test_camera_2()

  Dim oView As View
  Dim oCamera As Camera

  Set oView = ThisApplication.ActiveView
  Set oCamera = oView.Camera

  oCamera.ViewOrientationType = kBottomViewOrientation
  oCamera.Apply
 
  oCamera.ViewOrientationType = kLeftViewOrientation
  oCamera.Apply
 
  oCamera.ViewOrientationType = kFrontViewOrientation
  oCamera.Apply
 
  oCamera.ViewOrientationType = kBackViewOrientation
  oCamera.Apply

End Sub



http://ww3.cad.de/foren/ubb/Forum258/HTML/000037.shtml
Dieser richtet sich nach den vorhandenen Ebenen aus.

Wäre sowas möglich in die obere Schleife miteinzubauen?
Also Ansicht 1 - Abspeichern, Ansicht 2 - Abspeichern etc.
Irgendwie müsste es doch gehen diese Ansichten als Fälle zu speichern und ebenfalls mit einer For-Schleife diese Fälle zu varrieren. Oder bin ich da auf dem falschen Weg?

Viele Grüße
Daio

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DaioD
Mitglied
Student


Sehen Sie sich das Profil von DaioD an!   Senden Sie eine Private Message an DaioD  Schreiben Sie einen Gästebucheintrag für DaioD

Beiträge: 10
Registriert: 04.02.2019

erstellt am: 05. Feb. 2019 16:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hier mal der aktuelle Code. Vielleicht nicht der sauberste, aber so kann ich eine gewisse Anzahl an Bilder in einem bestimmten Winkel abspeichern. Das reicht mir soweit. Schön wäre es, wenn es noch möglich wäre die Farben der einzelnen Bauteile in einem bestimmten RGB Wert zu ändern. Z.B. "Bauteilbeispiel 1" in RGB (200, 100, 200)
Ich kenne zwar den Befehl Component.Color("Bauteil") = "Blue" , aber da fehlt mir etwas die Variation. Ist es möglich die Farben in einer Schleife zu ändern?

Code:
Sub variation()
Dim oDoc As Document
Set oDoc = ThisApplication.ActiveDocument
Dim oView As View
Set oView = oDoc.Views(1)
Set oCamera = oView.Camera
oCamera.Apply
Dim oTO As TransientObjects
Set oTO = ThisApplication.TransientObjects
Dim oTop As Color
Set oTop = oTO.CreateColor(255, 255, 255)
Dim oBottom As Color
Set oBottom = oTO.CreateColor(255, 255, 255)
Dim dsplmode As String
Dim i As Integer
Dim i2 As String
Dim filename As String
Dim User As String
dsplmode = 0
Dim k As Integer

'Starten der Schleife
For k = 1 To 19
    If ThisApplication.ActiveView.DisplayMode = kShadedRendering Then
    dsplmode = 1
    ThisApplication.ActiveView.DisplayMode = kShadedWithEdgesRendering
    End If
    i = 0
    'For i = 1 To 99 Step 1
    For i = 1 To 17 Step 1
        If i < 10 Then
        i2 = "0" + CStr(i)
        End If
        If i > 9 Then
        i2 = "" + CStr(i)
        End If
        User = Environ(" USERNAME ")
        filename = "C:\Users\" + User + "\Desktop\Bild_" + i2 + ".png"
        If Dir(filename) = "" Then Exit For
    Next
    If k < 10 And k > 0 Then
    oCamera.SaveAsBitmap filename, 3840, 2160, oTop, oBottom
    ElseIf k > 10 And k < 20 Then
    oCamera.ViewOrientationType = kIsoBottomLeftViewOrientation
    oCamera.Apply
    oCamera.SaveAsBitmap filename, 3840, 2160, oTop, oBottom
    End If
    If dsplmode = 1 Then
    ThisApplication.ActiveView.DisplayMode = kShadedRendering
    End If
Next k

End Sub


Gruß
Daio

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 174
Registriert: 19.09.2007

Inventor Professional 2016
Win7

erstellt am: 05. Feb. 2019 16:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DaioD 10 Unities + Antwort hilfreich

evtl. hilft Dir das hier weiter
https://help.autodesk.com/view/INVNTOR/2019/ENU/?guid=GUID-66A15187-2CB3-4136-A6A5-0F3325E47371

Das sollte auch relativ einfach zu finden sein, wenn du im VBA-Editor z.b. in der Zeile "Dim oCamera As Camera" das Wort "Camera" markierst und F1 drückst; das sollte das Camera-Object in der bereits erwähnten API-Hilfe aufrufen.

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DaioD
Mitglied
Student


Sehen Sie sich das Profil von DaioD an!   Senden Sie eine Private Message an DaioD  Schreiben Sie einen Gästebucheintrag für DaioD

Beiträge: 10
Registriert: 04.02.2019

erstellt am: 05. Feb. 2019 20:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Nochmals vielen Dank. Ich schaue mir das an.
Könntest du mir vielleicht erklären, wieso die Zeile:

Code:
Component.Color("Container_Rot") = "Blue"

nicht funktioniert bzw. eine Fehlermeldung erzeugt? Eventuell würde es schon reichen die Farben der einzelnen Bauteile so zu ändern, jedoch gelingt mir das auch nicht. Dein Link und deine Lösung führen zur Bibliothek, welche ich nicht ganz verstehe. Ist dies notwendig, um eine Farbe in einem Bauteil auf Baugruppenebene zu verändern?

Gruß
Daio

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy  an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 174
Registriert: 19.09.2007

Inventor Professional 2016
Win7

erstellt am: 05. Feb. 2019 20:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DaioD 10 Unities + Antwort hilfreich

Steht doch alles als Kommentar im Code  

Das Zuweisen der Farbe (genauer der FarbDarstellung) klappt nur, wenn sie bereits im document enthalten ist. Falls nicht, muss sie erst ins document eingefügt werden. Das merkt man als Benutzer nur nicht, weil es da automatisch passiert. Über die API aber eben nicht.

Edit: das mit component.Color("...")=... Liest sich nicht wie vba. Ist das ein i logic-Befehl?
Ich schlage vor, das über den verlinkten Code zu lösen (mit dem asset-Objekt).

Das mit der "variation" der Farben könnte ich mir über ein array mit den Namen von verschiedenen FarbDarst vorstellen. Und das einzelne Element mit dem Zähler deiner Schleife zu wählen. Ob das nun zu deiner Anwendung passt, kann ich natürlich nicht sagen.

------------------
Gruß KraBBy

[Diese Nachricht wurde von KraBBy am 05. Feb. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 174
Registriert: 19.09.2007

Inventor Professional 2016
Win7

erstellt am: 06. Feb. 2019 12:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DaioD 10 Unities + Antwort hilfreich

hab mich mal an dem Teil-Problem versucht, die Ansicht um einen bestimmten Winkel zu drehen.
Das Sub Test_CameraKpl enthält auch eine Schleife in der die Ansicht jeweils ein Stück weiter gedreht wird.

Code:

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
'http://dbwiki.net/wiki/VBA_Tipp:_Programmausf%C3%BChrung_f%C3%BCr_einen_Zeitraum_unterbrechen

Private Sub Test_CameraInit()
' Ansicht initialisieren
'  Zoom Alles - Standardansicht
'
    ' Get the active camera.
    Dim cam As Camera
    Set cam = ThisApplication.ActiveView.Camera
   
    ThisApplication.ActiveView.GoHome 'entspricht dem Befehl Ausgansansicht
    'die Ausgangsansicht ließe sich für jedes Modell anpassen...
   
    'Alternativ - unabhängig von der Einstellung im Modell
    cam.ViewOrientationType = kIsoTopRightViewOrientation  'entspricht per Default der "Ausgangsansicht", zumindest bei mir - abhängig von der Vorlage
    cam.Fit '"Zoom Alles"
   
    ' Apply the current camera definition to the view.
    cam.ApplyWithoutTransition
    'cam.Apply 'hierbei werden "Zwischenpositionen gerechnet, Drehung erfolgt nicht abrupt
   
End Sub
Private Sub Test_CameraRotateZ(AngleDeg As Single)
' basierte mal auf dem "Drive the camera API Sample"
' Drehung erfolgt um die Z-Achse bzw. um eine Achse parallel dazu
' die Ausrichtung(Target) wird nicht verändert

    ' Get the active camera.
    Dim cam As Camera
    Set cam = ThisApplication.ActiveView.Camera
   
    Dim tg As TransientGeometry
    Set tg = ThisApplication.TransientGeometry
   
    ' Calculate pi.
    Dim pi As Double
    pi = Atn(1) * 4
   
    'Winkel von Grad in Bogenmaß umrechnen
    Dim angRad As Double
    angRad = AngleDeg * pi / 180
   
    'Werte der Winkelfkt berechnen
    Dim c As Double, s As Double
    c = Cos(angRad)
    s = Sin(angRad)
   
    'Vektor von Target zu Eye
    ' es gäbe auch die VectorTo Method, aber hier mal von Hand
    Dim vX As Double
    Dim vY As Double
    vX = cam.Eye.x - cam.Target.x
    vY = cam.Eye.y - cam.Target.y
   
    ' Calculate the x and y coordinates of the eye.
    ' X / Y Koordinaten des Vektors gedreht um Z-Achse
    Dim x As Double, y As Double
    x = c * vX - s * vY
    y = s * vX + c * vY
   
    'jetzt noch Verschieben (Vektor_gedreht + Target = neue EyePosition)
    x = x + cam.Target.x
    y = y + cam.Target.y
   
    ' Set the eye
    ' Z-Koord. bleibt wie bisher
    cam.Eye = tg.CreatePoint(x, y, cam.Eye.Z)
   
    ' Define the up vector as positive z.
    ' ggf. anzupassen, falls das nicht zur Ausgansansicht passt
    cam.UpVector = tg.CreateUnitVector(0, 0, 1)
   
    'Ansicht noch anpassen?
    'abhängig von der BauteilForm/Außenkontur, kann es sein, dass bei gedrehter Ansicht nicht mehr alles in die Anzeige passt
    ' (z.b. langes Flacheisen...)
    cam.Fit  'ggf. diese Zeile auskommentieren
   
    ' Apply the current camera definition to the view.
    cam.ApplyWithoutTransition
   
    'Ansicht aktualisieren, kann nicht schaden
    ThisApplication.ActiveView.Update
End Sub

Sub Test_CameraKpl()
'Aufruf der beiden obigen Subs
    Call Test_CameraInit
    Dim i As Integer
    For i = 0 To 50
        Call Test_CameraRotateZ(5)
        Call Sleep(100) 'für Test - kurze Pause, damit man auch "was sieht"
           
    Next
End Sub


------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DaioD
Mitglied
Student


Sehen Sie sich das Profil von DaioD an!   Senden Sie eine Private Message an DaioD  Schreiben Sie einen Gästebucheintrag für DaioD

Beiträge: 10
Registriert: 04.02.2019

erstellt am: 07. Feb. 2019 20:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Krabby,

vielen Dank für deinen Code. Hab den noch etwas angepasst, sodass auch die Bilder entstehen nach jedem "Durchlauf" entstehen. Tolle Hilfe!
Bin immer noch an der Farbe und überlege, wie ich das noch irgendwie umsetzen kann. Denke da hilft alles nicht und ich muss mich an die Library wagen... 

Gruß
Daio

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

GeorgK
Mitglied



Sehen Sie sich das Profil von GeorgK an!   Senden Sie eine Private Message an GeorgK  Schreiben Sie einen Gästebucheintrag für GeorgK

Beiträge: 615
Registriert: 06.06.2001

Inventor 2017
Siemens NX 8.5 - 12.0
Autocad Mechanical 2017
Catia V5R19
3,4 GHz; 64 GB RAM
Windows 10
openSUSE Leap 42.3
Visual Studio 2010 - 2017
Windows 2012 R2
Vault 2017

erstellt am: 08. Feb. 2019 08:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DaioD 10 Unities + Antwort hilfreich

Hallo Daio,

könntest Du bitte Deinen Code posten?

Vielen Dank

Georg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DaioD
Mitglied
Student


Sehen Sie sich das Profil von DaioD an!   Senden Sie eine Private Message an DaioD  Schreiben Sie einen Gästebucheintrag für DaioD

Beiträge: 10
Registriert: 04.02.2019

erstellt am: 08. Feb. 2019 09:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Edit

[Diese Nachricht wurde von DaioD am 31. Mrz. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 174
Registriert: 19.09.2007

Inventor Professional 2016
Win7

erstellt am: 11. Feb. 2019 08:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für DaioD 10 Unities + Antwort hilfreich

kleine Bemerkung am Rande:
mE wäre es schöner, wenn der Code für das Speichern des Bildes in ein eigenes Sub wandern würde. Dann wäre das aufrufende Sub (mit der Schleife) auch deutlich kompakter und leichter zu lesen/verstehen. Man könnte es auch deutlich einfacher wieder verwenden.

Sieht dann etwa so aus:
Sub ..._Main()
  Camera_init()
  For ...
    Camera_rotate()
    Save_image()
  Next
End Sub

Das ist sogar ohne Kommentare zu verstehen...

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2019 CAD.de | Impressum | Datenschutz