| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX | | | |  | SIEMENS PLM CONNECTION 2026 | 22. - 24. Juni 2026 | Lufthansa Konferenzzentrum Seeheim | | | |  | Designcenter Solid Edge Upgrade | Remote, ein Seminar am 29.05.2026
|
|
Autor
|
Thema: Spotlight Ausgangs- und Zielpunkt (594 / mal gelesen)
|
Eonwe Mitglied

 Beiträge: 88 Registriert: 10.11.2014 NX 12 mit ECTR
|
erstellt am: 02. Dez. 2021 09:42 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich will über ein NxOpen Programm gerenderte Bilder erstellen und scheitere aber gerade an der Beleuchtung. Ich habe 2 subs, einmal um Lichter zu erstellen, einmal um Lichter zu modifizieren. Code: Public Sub add_Light_spot(Name As String) Dim Light As Light = Nothing Dim Lightbuilder As Display.LightBuilder = displayPart.Views.CreateLightBuilder(Light) 'Lightbuilder.LightType = LightType.Spot gibt internal Error, daher unten nochmal Lightbuilder.UseWithRayTracedImageBasedLighting = True Lightbuilder.Intensity = 1 Lightbuilder.ConeAngle = 60 Lightbuilder.DestinationPosition = displayPart.Points.CreatePoint(New Point3d(0, 0, 0)) Lightbuilder.SourcePosition = displayPart.Points.CreatePoint(New Point3d(0, 0, 0)) Lightbuilder.LightShadowType = Display.LightBuilder.ShadowType.SoftEdged Lightbuilder.Commit() Lightbuilder.Destroy() Light = displayPart.Lights.ToArray(displayPart.Lights.ToArray.Length - 1) Light.SetName(Name) Dim Lightbuilder2 As Display.LightBuilder = displayPart.Views.CreateLightBuilder(Light) Lightbuilder2.LightType = LightType.Spot Lightbuilder2.Commit() Lightbuilder2.Destroy() End Sub
Spotlicht wird erzeugt und richtig benannt. Source und Destinationposition stehen aber auf "Nothing". Daher: Code: Public Sub modify_light(Name As String, TargetPoint As Point3d, SourcePoint As Point3d) Dim theLightCollection As LightCollection = displayPart.Lights Dim theLight As Light = theLightCollection.FindObject(Name) Dim theLightbuilder As Display.LightBuilder = workPart.Views.CreateLightBuilder(theLight) theLightbuilder.DestinationPosition.SetCoordinates(TargetPoint) theLightbuilder.SourcePosition = displayPart.Points.CreatePoint(SourcePoint) theLightbuilder.Commit() theLightbuilder.Destroy() End Sub
Dabei schmeisst
Code: theLightbuilder.DestinationPosition.SetCoordinates(TargetPoint)
eine "Object reference not set to an instance of an object" Exception. Warum auch immer, ist aber auch nicht schlimm. Code: theLightbuilder.SourcePosition = displayPart.Points.CreatePoint(SourcePoint)
die Zeile funktioniert einwandfrei, im Programmdurchlauf wird dem Lightbuilder der richtige Punkt zugeordnet. Rufe ich aber den nächsten Lightbuilder für das gerade bearbeitete Licht auf, steht "SourcePosition" wieder auf "Nothing" Was genau mach ich hier falsch? Danke für eure Hilfe. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| | Zahntechnikermeister/in Jungmeister/in (m/w/d) | Dentallabor Gadau ist ein mittelgroßes Unternehmen spezialisiert auf die Herstellung hochwertiger dentaler Prothetik und Medizintechnikprodukte. Wir verbinden traditionelle Handwerkskunst mit modernster Technologie, um individuelle Lösungen für Zahntechniker und Zahnärzte zu bieten. Unser Team legt großen Wert auf Präzision, Qualität und Innovation, um den hohen Ansprüchen unserer Kunden gerecht zu werden.... | | Anzeige ansehen | Feste Anstellung |
|
Eonwe Mitglied

 Beiträge: 88 Registriert: 10.11.2014 NX 12 mit ECTR
|
erstellt am: 06. Dez. 2021 16:22 <-- editieren / zitieren --> Unities abgeben:         
Eventuell bin ich einen Schritt weiter gekommen. Mit den Userfunctions kann ich die Positionen der Lichter modifizieren: Code:
Public Sub modify_light(Name As String, TargetPoint As Point3d, SourcePoint As Point3d) Dim theUFlighting As UFView.Lighting = Nothing theUfSession.View.askviewlight(Tag.Null, theUFlighting) I = 0 For Each theUfLight As UFView.Lights In theUFlighting.lights If theUfLight.light_name = Name Then theUfLight.light_mode = 1 'UFView.LightMode.FixedToThePart theUfLight.location = {SourcePoint.X, SourcePoint.Y, SourcePoint.Z} theUfLight.to = {TargetPoint.X, TargetPoint.Y, TargetPoint.Z} theUFlighting.lights(I) = theUfLight Else theUfLight.light_mode = 1 'UFView.LightMode.FixedToThePart theUFlighting.lights(I) = theUfLight End If I += 1 Next theUfSession.View.SetViewLight(Tag.Null, theUFlighting) 'theUfSession.View.askviewlight(Tag.Null, theUFlighting) End Sub
Dafür habe ich hier ein anderes Problem: den light_mode setze ich explizit auf "fixed to part" für jedes Licht. Im Programmdurchlauf kommt das bei "theUFlighting" auch an. Nach SetViewLight(...) stehen aber alle Lichter auf "fixed to observer". Damit stimmt keine Richtung mehr. Woran klemmts jetzt hier? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |