<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[AB4D Forum - Ab4d.SharpEngine]]></title>
		<link>https://forum.ab4d.com/</link>
		<description><![CDATA[AB4D Forum - https://forum.ab4d.com]]></description>
		<pubDate>Fri, 24 Apr 2026 06:41:42 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Forum closed, use Issues on GitHub instead]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4517</link>
			<pubDate>Wed, 01 Apr 2026 13:50:10 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=1">abenedik</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4517</guid>
			<description><![CDATA[This forum is closed because of problems with sending emails.<br />
<br />
Please use <a href="https://github.com/ab4d/Ab4d.SharpEngine.Samples/issues" target="_blank" rel="noopener" class="mycode_url">Issues </a> or <a href="https://github.com/ab4d/Ab4d.SharpEngine.Samples/discussions" target="_blank" rel="noopener" class="mycode_url">Discussions</a> on the <a href="https://github.com/ab4d/Ab4d.SharpEngine.Samples" target="_blank" rel="noopener" class="mycode_url">GitHub Ab4d.SharpEngine.Samples repo</a>.]]></description>
			<content:encoded><![CDATA[This forum is closed because of problems with sending emails.<br />
<br />
Please use <a href="https://github.com/ab4d/Ab4d.SharpEngine.Samples/issues" target="_blank" rel="noopener" class="mycode_url">Issues </a> or <a href="https://github.com/ab4d/Ab4d.SharpEngine.Samples/discussions" target="_blank" rel="noopener" class="mycode_url">Discussions</a> on the <a href="https://github.com/ab4d/Ab4d.SharpEngine.Samples" target="_blank" rel="noopener" class="mycode_url">GitHub Ab4d.SharpEngine.Samples repo</a>.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Allow MultiLineNode.Material setter to change in runtime]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4508</link>
			<pubDate>Wed, 04 Mar 2026 12:52:47 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=12443">BiMMate</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4508</guid>
			<description><![CDATA[Hi<br />
<br />
I have an scenario where I need to create many dimension lines that share same material that can react to my application settings, so I allocate much less resources by having single material for them all<br />
<br />
However, I also need to Paint/Wash the lines when hovering or selecting them<br />
<br />
Material property is init-only so I need a different material for each object to accomplish that<br />
<br />
Could it be possible to make public setter to update material in runtime?]]></description>
			<content:encoded><![CDATA[Hi<br />
<br />
I have an scenario where I need to create many dimension lines that share same material that can react to my application settings, so I allocate much less resources by having single material for them all<br />
<br />
However, I also need to Paint/Wash the lines when hovering or selecting them<br />
<br />
Material property is init-only so I need a different material for each object to accomplish that<br />
<br />
Could it be possible to make public setter to update material in runtime?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Fatal signal when running Ab4d sample app on Samsung phone with Android 16]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4507</link>
			<pubDate>Fri, 20 Feb 2026 13:27:34 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=12227">henkt</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4507</guid>
			<description><![CDATA[I am getting issues with SharpEngine on Samsumg phone with Android 16. If I run the latest Ab4d sample app (3.2.9509) it crashes with Fatal Signal 11. The app runs fine on an Android 16 emulator.<br />
<br />
Are there any workarounds you can suggest- e.g. CreateEngineOptions?<br />
<br />
The sample app crashes in the e.Surface.Canvas.DrawBitmap(_renderedSceneBitmap, info.Rect); inside SharpEngineSceneView.CanvasViewOnPaintSurface<br />
<br />
02-20 14:15:17.739 V/XGL    (27083): ----------------------------------------------------------------------<br />
02-20 14:15:17.739 V/XGL    (27083): SUMD version compiled date    = 2025-06-11 14:47 - KST<br />
02-20 14:15:17.739 V/XGL    (27083): SUMD version revision number  = 1fc295b0d2<br />
02-20 14:15:17.739 V/XGL    (27083): SUMD version info              = Driver version: 24.0.545, git hash: 1fc295b0d2<br />
02-20 14:15:17.739 V/XGL    (27083): ----------------------------------------------------------------------<br />
02-20 14:15:17.739 V/XGL    (27083): Entering: Create<br />
02-20 14:15:17.743 V/XGL    (27083): Exiting: Create<br />
02-20 14:15:17.861 D/VRI[MainActivity]@c2164b1(27083): reportNextDraw android.view.ViewRootImpl.performTraversals:5443 android.view.ViewRootImpl.doTraversal:3924 android.view.ViewRootImpl&#36;TraversalRunnable.run:12903 android.view.Choreographer&#36;CallbackRecord.run:1901 android.view.Choreographer&#36;CallbackRecord.run:1910 <br />
02-20 14:15:17.862 D/VRI[MainActivity]@c2164b1(27083): Setup new sync=wmsSync-VRI[MainActivity]@c2164b1#0<br />
02-20 14:15:17.862 I/VRI[MainActivity]@c2164b1(27083): Creating new active sync group VRI[MainActivity]@c2164b1#1<br />
02-20 14:15:17.864 D/VRI[MainActivity]@c2164b1(27083): registerCallbacksForSync syncBuffer=false<br />
02-20 14:15:17.876 W/monodroid-assembly(27083): Shared library 'libjnigraphics.so' not loaded, p/invoke 'AndroidBitmap_lockPixels' may fail<br />
02-20 14:15:17.877 I/amples.maui.ios(27083): hiddenapi: Accessing hidden field Landroid/graphics/Bitmap;-&gt;mNativePtr:J (runtime_flags=0, domain=platform, api=unsupported) from Lcrc648e35430423bd4943/SKCanvasView; (domain=app) using JNI: allowed<br />
02-20 14:15:18.868 E/SurfaceSyncGroup(27083): Failed to receive transaction ready in 1000ms. Marking SurfaceSyncGroup(wmsSync-VRI[MainActivity]@c2164b1#0) as ready<br />
02-20 14:15:18.869 I/SurfaceSyncGroup(27083): checkIfSyncIsComplete: Callers=android.window.SurfaceSyncGroup.markSyncReady:281 android.window.SurfaceSyncGroup.lambda&#36;addTimeout&#36;6:860 android.window.SurfaceSyncGroup.&#36;r8&#36;lambda&#36;ButZILC1krkx4FHXNaBT92Z1Qt8:0 android.window.SurfaceSyncGroup&#36;&#36;ExternalSyntheticLambda3.run:0 android.os.Handler.handleCallback:995 <br />
02-20 14:15:18.869 D/SurfaceSyncGroup(27083): Successfully finished sync id=wmsSync-VRI[MainActivity]@c2164b1#0<br />
02-20 14:15:18.869 D/VRI[MainActivity]@c2164b1(27083): reportDrawFinished seqId=0<br />
02-20 14:15:18.871 E/SurfaceSyncGroup(27083): Failed to receive transaction ready in 1000ms. Marking SurfaceSyncGroup(VRI[MainActivity]@c2164b1#1) as ready<br />
02-20 14:15:18.871 I/SurfaceSyncGroup(27083): checkIfSyncIsComplete: Callers=android.window.SurfaceSyncGroup.markSyncReady:281 android.window.SurfaceSyncGroup.lambda&#36;addTimeout&#36;6:860 android.window.SurfaceSyncGroup.&#36;r8&#36;lambda&#36;ButZILC1krkx4FHXNaBT92Z1Qt8:0 android.window.SurfaceSyncGroup&#36;&#36;ExternalSyntheticLambda3.run:0 android.os.Handler.handleCallback:995 <br />
02-20 14:15:18.871 D/SurfaceSyncGroup(27083): Successfully finished sync id=VRI[MainActivity]@c2164b1#1<br />
02-20 14:15:25.531 I/GSC    (27083): SID[0] : ef82d8ce10ab7c83, Kind: 1, time : 29.523 ms<br />
02-20 14:15:25.537 I/GSC    (27083): SID[1] : 05ebe144822b6758, Kind: 0, time : 5.742 ms<br />
02-20 14:15:25.543 I/GSC    (27083): SID[2] : 5a197a1cc83b561c, Kind: 1, time : 1.654 ms<br />
02-20 14:15:25.562 I/GSC    (27083): SID[3] : 710015f16afb9a1f, Kind: 2, time : 18.198 ms<br />
02-20 14:15:25.596 I/GSC    (27083): SID[4] : 8bba210ad7cf2e91, Kind: 2, time : 32.451 ms<br />
02-20 14:15:36.492 F/libc    (27083): Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x7bd8f78000 in tid 27083 (amples.maui.ios), pid 27083 (amples.maui.ios)]]></description>
			<content:encoded><![CDATA[I am getting issues with SharpEngine on Samsumg phone with Android 16. If I run the latest Ab4d sample app (3.2.9509) it crashes with Fatal Signal 11. The app runs fine on an Android 16 emulator.<br />
<br />
Are there any workarounds you can suggest- e.g. CreateEngineOptions?<br />
<br />
The sample app crashes in the e.Surface.Canvas.DrawBitmap(_renderedSceneBitmap, info.Rect); inside SharpEngineSceneView.CanvasViewOnPaintSurface<br />
<br />
02-20 14:15:17.739 V/XGL    (27083): ----------------------------------------------------------------------<br />
02-20 14:15:17.739 V/XGL    (27083): SUMD version compiled date    = 2025-06-11 14:47 - KST<br />
02-20 14:15:17.739 V/XGL    (27083): SUMD version revision number  = 1fc295b0d2<br />
02-20 14:15:17.739 V/XGL    (27083): SUMD version info              = Driver version: 24.0.545, git hash: 1fc295b0d2<br />
02-20 14:15:17.739 V/XGL    (27083): ----------------------------------------------------------------------<br />
02-20 14:15:17.739 V/XGL    (27083): Entering: Create<br />
02-20 14:15:17.743 V/XGL    (27083): Exiting: Create<br />
02-20 14:15:17.861 D/VRI[MainActivity]@c2164b1(27083): reportNextDraw android.view.ViewRootImpl.performTraversals:5443 android.view.ViewRootImpl.doTraversal:3924 android.view.ViewRootImpl&#36;TraversalRunnable.run:12903 android.view.Choreographer&#36;CallbackRecord.run:1901 android.view.Choreographer&#36;CallbackRecord.run:1910 <br />
02-20 14:15:17.862 D/VRI[MainActivity]@c2164b1(27083): Setup new sync=wmsSync-VRI[MainActivity]@c2164b1#0<br />
02-20 14:15:17.862 I/VRI[MainActivity]@c2164b1(27083): Creating new active sync group VRI[MainActivity]@c2164b1#1<br />
02-20 14:15:17.864 D/VRI[MainActivity]@c2164b1(27083): registerCallbacksForSync syncBuffer=false<br />
02-20 14:15:17.876 W/monodroid-assembly(27083): Shared library 'libjnigraphics.so' not loaded, p/invoke 'AndroidBitmap_lockPixels' may fail<br />
02-20 14:15:17.877 I/amples.maui.ios(27083): hiddenapi: Accessing hidden field Landroid/graphics/Bitmap;-&gt;mNativePtr:J (runtime_flags=0, domain=platform, api=unsupported) from Lcrc648e35430423bd4943/SKCanvasView; (domain=app) using JNI: allowed<br />
02-20 14:15:18.868 E/SurfaceSyncGroup(27083): Failed to receive transaction ready in 1000ms. Marking SurfaceSyncGroup(wmsSync-VRI[MainActivity]@c2164b1#0) as ready<br />
02-20 14:15:18.869 I/SurfaceSyncGroup(27083): checkIfSyncIsComplete: Callers=android.window.SurfaceSyncGroup.markSyncReady:281 android.window.SurfaceSyncGroup.lambda&#36;addTimeout&#36;6:860 android.window.SurfaceSyncGroup.&#36;r8&#36;lambda&#36;ButZILC1krkx4FHXNaBT92Z1Qt8:0 android.window.SurfaceSyncGroup&#36;&#36;ExternalSyntheticLambda3.run:0 android.os.Handler.handleCallback:995 <br />
02-20 14:15:18.869 D/SurfaceSyncGroup(27083): Successfully finished sync id=wmsSync-VRI[MainActivity]@c2164b1#0<br />
02-20 14:15:18.869 D/VRI[MainActivity]@c2164b1(27083): reportDrawFinished seqId=0<br />
02-20 14:15:18.871 E/SurfaceSyncGroup(27083): Failed to receive transaction ready in 1000ms. Marking SurfaceSyncGroup(VRI[MainActivity]@c2164b1#1) as ready<br />
02-20 14:15:18.871 I/SurfaceSyncGroup(27083): checkIfSyncIsComplete: Callers=android.window.SurfaceSyncGroup.markSyncReady:281 android.window.SurfaceSyncGroup.lambda&#36;addTimeout&#36;6:860 android.window.SurfaceSyncGroup.&#36;r8&#36;lambda&#36;ButZILC1krkx4FHXNaBT92Z1Qt8:0 android.window.SurfaceSyncGroup&#36;&#36;ExternalSyntheticLambda3.run:0 android.os.Handler.handleCallback:995 <br />
02-20 14:15:18.871 D/SurfaceSyncGroup(27083): Successfully finished sync id=VRI[MainActivity]@c2164b1#1<br />
02-20 14:15:25.531 I/GSC    (27083): SID[0] : ef82d8ce10ab7c83, Kind: 1, time : 29.523 ms<br />
02-20 14:15:25.537 I/GSC    (27083): SID[1] : 05ebe144822b6758, Kind: 0, time : 5.742 ms<br />
02-20 14:15:25.543 I/GSC    (27083): SID[2] : 5a197a1cc83b561c, Kind: 1, time : 1.654 ms<br />
02-20 14:15:25.562 I/GSC    (27083): SID[3] : 710015f16afb9a1f, Kind: 2, time : 18.198 ms<br />
02-20 14:15:25.596 I/GSC    (27083): SID[4] : 8bba210ad7cf2e91, Kind: 2, time : 32.451 ms<br />
02-20 14:15:36.492 F/libc    (27083): Fatal signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x7bd8f78000 in tid 27083 (amples.maui.ios), pid 27083 (amples.maui.ios)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[InputEventsManager.PointerExited not fired]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4506</link>
			<pubDate>Thu, 12 Feb 2026 11:19:58 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=13161">sthTX</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4506</guid>
			<description><![CDATA[Hi,<br />
<br />
i'm testing out the SharpEngine for a upcoming project with Avalonia and WPF.<br />
During this testing i noticed that the PointerExited event doesn't seem to fire when using Avalonia or WPF framework.<br />
All other mouse events like PointerEntered or PointerMoved are working correctly when moving the mouse over the SharpEngine control. <br />
I've also tried it with your Samples application where it also doesn't seem to fire this event.<br />
<br />
Is this a bug or do i have to implement this event manually by routing it from WPF/Avalonia to the InputEventsManager?]]></description>
			<content:encoded><![CDATA[Hi,<br />
<br />
i'm testing out the SharpEngine for a upcoming project with Avalonia and WPF.<br />
During this testing i noticed that the PointerExited event doesn't seem to fire when using Avalonia or WPF framework.<br />
All other mouse events like PointerEntered or PointerMoved are working correctly when moving the mouse over the SharpEngine control. <br />
I've also tried it with your Samples application where it also doesn't seem to fire this event.<br />
<br />
Is this a bug or do i have to implement this event manually by routing it from WPF/Avalonia to the InputEventsManager?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Avalonia TabControl causes MainSceneView to be disposed]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4505</link>
			<pubDate>Sat, 07 Feb 2026 06:56:18 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=13160">Oplopanax</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4505</guid>
			<description><![CDATA[I am having an unexpected behaviour with the Avalonia TabControl.<br />
<br />
The Scene is initialized when the control is first shown, but if you tab to another control and come back the Scene is disposed. When you try to move the camera, the following exception is thrown:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>  at Ab4d.SharpEngine.SceneNodes.SceneNode.Update()<br />
  at Ab4d.SharpEngine.Scene.Update(Boolean forceUpdateAll)<br />
  at Ab4d.SharpEngine.Scene.GetClosestHitObject(Ray ray, SceneNode rootSceneNode, HitTestOptions customHitTestOptions)<br />
  at Ab4d.SharpEngine.SceneView.GetClosestHitObject(Ray ray, HitTestOptions customHitTestOptions)<br />
  at Ab4d.SharpEngine.Utilities.CameraController.GetRotationCenterPositionFromPointerPosition(Vector2 pointerPosition, Boolean calculatePositionWhenNoObjectIsHit)<br />
  at Ab4d.SharpEngine.Utilities.CameraController.UpdateRotationCenterPosition(Vector2 pointerPosition, Boolean calculatePositionWhenNoObjectIsHit)<br />
  at Ab4d.SharpEngine.Utilities.CameraController.StartCameraRotation(Vector2 pointerPosition)<br />
  at Ab4d.SharpEngine.Utilities.ManualPointerCameraController.StartPointerProcessing(Vector2 pointerPosition, PointerButtons pressedButtons, KeyboardModifiers keyboardModifiers)<br />
  at Ab4d.SharpEngine.Utilities.ManualPointerCameraController.ProcessPointerMoved(Vector2 pointerPosition, PointerButtons pressedPointerButtons, KeyboardModifiers keyboardModifiers)<br />
  at Ab4d.SharpEngine.AvaloniaUI.PointerCameraController.♔(Object ♔, PointerEventArgs ♔)<br />
  at Avalonia.Interactivity.Interactive.&lt;AddHandler&gt;g__InvokeAdapter|8_0[TEventArgs](Delegate baseHandler, Object sender, RoutedEventArgs args)<br />
  at Avalonia.Interactivity.Interactive.&lt;&gt;c__8`1.&lt;AddHandler&gt;b__8_1(Delegate baseHandler, Object sender, RoutedEventArgs args)<br />
  at Avalonia.Interactivity.EventRoute.RaiseEventImpl(RoutedEventArgs e)<br />
  at Avalonia.Interactivity.EventRoute.RaiseEvent(Interactive source, RoutedEventArgs e)<br />
  at Avalonia.Interactivity.Interactive.RaiseEvent(RoutedEventArgs e)<br />
  at Avalonia.Input.MouseDevice.ProcessRawEvent(RawPointerEventArgs e)<br />
  at Avalonia.Controls.TopLevel.&lt;&gt;c.&lt;HandleInput&gt;b__150_0(Object state)<br />
  at Avalonia.Threading.Dispatcher.Send(SendOrPostCallback action, Object arg, Nullable`1 priority)<br />
  at Avalonia.Controls.TopLevel.HandleInput(RawInputEventArgs e)<br />
  at Avalonia.Win32.WindowImpl.AppWndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)<br />
  at Avalonia.Win32.WindowImpl.WndProcMessageHandler(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)<br />
  at Avalonia.Win32.Interop.UnmanagedMethods.DispatchMessage(MSG&amp; lpmsg)<br />
  at Avalonia.Win32.Win32DispatcherImpl.RunLoop(CancellationToken cancellationToken)<br />
  at Avalonia.Threading.DispatcherFrame.Run(IControlledDispatcherImpl impl)<br />
  at Avalonia.Threading.Dispatcher.PushFrame(DispatcherFrame frame)<br />
  at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken)<br />
  at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.StartCore(String[] args)<br />
  at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args)<br />
  at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(AppBuilder builder, String[] args, Action`1 lifetimeBuilder)<br />
  at AB4D.TabControlIssue.Program.Main(String[] args) in D:&#92;Development&#92;Ab4d.SharpEngine.Samples-main&#92;TabControlSample&#92;Program.cs:line 12</code></div></div><br />
I created a project at GitHub to illustrate the issue<br />
<br />
<a href="https://github.com/MichaelFCoyle/AB4D.TabControlIssue" target="_blank" rel="noopener" class="mycode_url">https://github.com/MichaelFCoyle/AB4D.TabControlIssue</a><br />
<br />
In the main application I am working with a different exception is thrown because I am adding points to the root node but basically the MainSceneView, Scene, SceneView and RootNode are all disposed.<br />
<br />
Is there guidance where I can re-create the scene in code every time the TabControl is shown?]]></description>
			<content:encoded><![CDATA[I am having an unexpected behaviour with the Avalonia TabControl.<br />
<br />
The Scene is initialized when the control is first shown, but if you tab to another control and come back the Scene is disposed. When you try to move the camera, the following exception is thrown:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>  at Ab4d.SharpEngine.SceneNodes.SceneNode.Update()<br />
  at Ab4d.SharpEngine.Scene.Update(Boolean forceUpdateAll)<br />
  at Ab4d.SharpEngine.Scene.GetClosestHitObject(Ray ray, SceneNode rootSceneNode, HitTestOptions customHitTestOptions)<br />
  at Ab4d.SharpEngine.SceneView.GetClosestHitObject(Ray ray, HitTestOptions customHitTestOptions)<br />
  at Ab4d.SharpEngine.Utilities.CameraController.GetRotationCenterPositionFromPointerPosition(Vector2 pointerPosition, Boolean calculatePositionWhenNoObjectIsHit)<br />
  at Ab4d.SharpEngine.Utilities.CameraController.UpdateRotationCenterPosition(Vector2 pointerPosition, Boolean calculatePositionWhenNoObjectIsHit)<br />
  at Ab4d.SharpEngine.Utilities.CameraController.StartCameraRotation(Vector2 pointerPosition)<br />
  at Ab4d.SharpEngine.Utilities.ManualPointerCameraController.StartPointerProcessing(Vector2 pointerPosition, PointerButtons pressedButtons, KeyboardModifiers keyboardModifiers)<br />
  at Ab4d.SharpEngine.Utilities.ManualPointerCameraController.ProcessPointerMoved(Vector2 pointerPosition, PointerButtons pressedPointerButtons, KeyboardModifiers keyboardModifiers)<br />
  at Ab4d.SharpEngine.AvaloniaUI.PointerCameraController.♔(Object ♔, PointerEventArgs ♔)<br />
  at Avalonia.Interactivity.Interactive.&lt;AddHandler&gt;g__InvokeAdapter|8_0[TEventArgs](Delegate baseHandler, Object sender, RoutedEventArgs args)<br />
  at Avalonia.Interactivity.Interactive.&lt;&gt;c__8`1.&lt;AddHandler&gt;b__8_1(Delegate baseHandler, Object sender, RoutedEventArgs args)<br />
  at Avalonia.Interactivity.EventRoute.RaiseEventImpl(RoutedEventArgs e)<br />
  at Avalonia.Interactivity.EventRoute.RaiseEvent(Interactive source, RoutedEventArgs e)<br />
  at Avalonia.Interactivity.Interactive.RaiseEvent(RoutedEventArgs e)<br />
  at Avalonia.Input.MouseDevice.ProcessRawEvent(RawPointerEventArgs e)<br />
  at Avalonia.Controls.TopLevel.&lt;&gt;c.&lt;HandleInput&gt;b__150_0(Object state)<br />
  at Avalonia.Threading.Dispatcher.Send(SendOrPostCallback action, Object arg, Nullable`1 priority)<br />
  at Avalonia.Controls.TopLevel.HandleInput(RawInputEventArgs e)<br />
  at Avalonia.Win32.WindowImpl.AppWndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)<br />
  at Avalonia.Win32.WindowImpl.WndProcMessageHandler(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)<br />
  at Avalonia.Win32.Interop.UnmanagedMethods.DispatchMessage(MSG&amp; lpmsg)<br />
  at Avalonia.Win32.Win32DispatcherImpl.RunLoop(CancellationToken cancellationToken)<br />
  at Avalonia.Threading.DispatcherFrame.Run(IControlledDispatcherImpl impl)<br />
  at Avalonia.Threading.Dispatcher.PushFrame(DispatcherFrame frame)<br />
  at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken)<br />
  at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.StartCore(String[] args)<br />
  at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args)<br />
  at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(AppBuilder builder, String[] args, Action`1 lifetimeBuilder)<br />
  at AB4D.TabControlIssue.Program.Main(String[] args) in D:&#92;Development&#92;Ab4d.SharpEngine.Samples-main&#92;TabControlSample&#92;Program.cs:line 12</code></div></div><br />
I created a project at GitHub to illustrate the issue<br />
<br />
<a href="https://github.com/MichaelFCoyle/AB4D.TabControlIssue" target="_blank" rel="noopener" class="mycode_url">https://github.com/MichaelFCoyle/AB4D.TabControlIssue</a><br />
<br />
In the main application I am working with a different exception is thrown because I am adding points to the root node but basically the MainSceneView, Scene, SceneView and RootNode are all disposed.<br />
<br />
Is there guidance where I can re-create the scene in code every time the TabControl is shown?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[OBJ file not drawing correctly]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4504</link>
			<pubDate>Tue, 03 Feb 2026 04:21:31 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=13157">Gilrock</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4504</guid>
			<description><![CDATA[I'm testing out Ab4d.SharpEngine to use for a project and we plan to get a 4-seat license if I can demonstrate it will work for us.  One of my main needs is going to be rendering OBJ files.  I tested with an OBJ file of my house.<br />
<br />
This is what I get in Ab4d:<br />
<img src="https://i.imgur.com/w5OwgHD.png" loading="lazy"  alt="[Image: w5OwgHD.png]" class="mycode_img" /><br />
<br />
This is what the house should look like.  I'm rendering this in a program I work on called xLights.  We use the tinyobjloader for loading the OBJ file.  All our code is freeware on GitHub under xLights Sequencer.  But I can't use that code for this new project.  We want to use Avalonia and Ab4d already has nice integration.<br />
<img src="https://i.imgur.com/pEus7Er.png" loading="lazy"  alt="[Image: pEus7Er.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[I'm testing out Ab4d.SharpEngine to use for a project and we plan to get a 4-seat license if I can demonstrate it will work for us.  One of my main needs is going to be rendering OBJ files.  I tested with an OBJ file of my house.<br />
<br />
This is what I get in Ab4d:<br />
<img src="https://i.imgur.com/w5OwgHD.png" loading="lazy"  alt="[Image: w5OwgHD.png]" class="mycode_img" /><br />
<br />
This is what the house should look like.  I'm rendering this in a program I work on called xLights.  We use the tinyobjloader for loading the OBJ file.  All our code is freeware on GitHub under xLights Sequencer.  But I can't use that code for this new project.  We want to use Avalonia and Ab4d already has nice integration.<br />
<img src="https://i.imgur.com/pEus7Er.png" loading="lazy"  alt="[Image: pEus7Er.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Performance with multiple views]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4503</link>
			<pubDate>Tue, 13 Jan 2026 16:13:02 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=13001">matt@reefmaster.com.au</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4503</guid>
			<description><![CDATA[Hi,<br />
<br />
I am writing an Avalonia MDI application where it is possible to have many windows created at one time, each of which uses it's own SharpEngine view control.<br />
I notice that after say 5 windows are opened, performance in subsequent windows degrades sharply. This is not too surprising given the amount of resources that needs to be allocated to each view<br />
<br />
So far: I am sharing a single VulkanDevice across all renderers and have already set supersampling to 1 - the latter certainly improves performance over multiple screens but at some quality cost of course.<br />
<br />
Given that most of these views won't actually be *visible* at the same time, I am looking forguidance on what the best strategy is for trying to reduce resource use in my scenario. I do need to be able to let the user open multiple views, but of course the total screen area (even if all are visible) will never exceed the screen dimensions. Is there a recommended way to release the heaviest GPU assets whilst views are not visible that will allow quick resumption when the user reverts to the view?<br />
<br />
thanks!]]></description>
			<content:encoded><![CDATA[Hi,<br />
<br />
I am writing an Avalonia MDI application where it is possible to have many windows created at one time, each of which uses it's own SharpEngine view control.<br />
I notice that after say 5 windows are opened, performance in subsequent windows degrades sharply. This is not too surprising given the amount of resources that needs to be allocated to each view<br />
<br />
So far: I am sharing a single VulkanDevice across all renderers and have already set supersampling to 1 - the latter certainly improves performance over multiple screens but at some quality cost of course.<br />
<br />
Given that most of these views won't actually be *visible* at the same time, I am looking forguidance on what the best strategy is for trying to reduce resource use in my scenario. I do need to be able to let the user open multiple views, but of course the total screen area (even if all are visible) will never exceed the screen dimensions. Is there a recommended way to release the heaviest GPU assets whilst views are not visible that will allow quick resumption when the user reverts to the view?<br />
<br />
thanks!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[CameraQuickZoomStarted & CameraQuickZoomEnded not fired]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4502</link>
			<pubDate>Fri, 31 Oct 2025 15:18:46 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=12443">BiMMate</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4502</guid>
			<description><![CDATA[I think CameraQuickZoomStarted &amp; CameraQuickZoomEnded events are not fired for MouseCameraController<br />
<br />
I know I can subscribe to MouseCameraController.Camera.PropertyChanged, but there I can't know when zoom is done]]></description>
			<content:encoded><![CDATA[I think CameraQuickZoomStarted &amp; CameraQuickZoomEnded events are not fired for MouseCameraController<br />
<br />
I know I can subscribe to MouseCameraController.Camera.PropertyChanged, but there I can't know when zoom is done]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ab4d.OpenCascade - Lost curves from loaded step file]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4501</link>
			<pubDate>Thu, 30 Oct 2025 16:30:57 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=12972">Artipo</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4501</guid>
			<description><![CDATA[Hi,<br />
First of all thank you for your amazing work.<br />
<br />
We are trying to use your library Ab4d.OpenCascade to load a sample '.stp' file our customer has provided.<br />
This file contains multiple PRODUCT(...) whose geometries are curves.<br />
<br />
From what I understood reading the file I think the geometries are contained in 'GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION' rows.<br />
<br />
I've tried loading the file in the Ab4d.CadImported sample project, but I wasn't unable to see the lines.<br />
As a comparison I've loaded the same file in FreeCAD successfully, which from my knowledge uses OpenCascade as well.<br />
<br />
So my question is, are curve lines supported by your library? Should I be tweaking something to be able to load them?<br />
<br />
Thank you for your time.<br />
F. Rossi - AlmaItalia]]></description>
			<content:encoded><![CDATA[Hi,<br />
First of all thank you for your amazing work.<br />
<br />
We are trying to use your library Ab4d.OpenCascade to load a sample '.stp' file our customer has provided.<br />
This file contains multiple PRODUCT(...) whose geometries are curves.<br />
<br />
From what I understood reading the file I think the geometries are contained in 'GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION' rows.<br />
<br />
I've tried loading the file in the Ab4d.CadImported sample project, but I wasn't unable to see the lines.<br />
As a comparison I've loaded the same file in FreeCAD successfully, which from my knowledge uses OpenCascade as well.<br />
<br />
So my question is, are curve lines supported by your library? Should I be tweaking something to be able to load them?<br />
<br />
Thank you for your time.<br />
F. Rossi - AlmaItalia]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ortographic camera zoom to BoundingBox]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4499</link>
			<pubDate>Wed, 29 Oct 2025 09:24:36 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=12443">BiMMate</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4499</guid>
			<description><![CDATA[Hi<br />
I have this method to zoom to a BoundingBox:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;private void Zoom(bool isZoomSelection, BoundingBox? bBox = null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (this.BimScene is null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Threads.ExecuteOnUIThread(() =&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// BoundingBox can be NaN when there are no models -&gt; Get RootNode BoundingBox instead with the grid<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bBox ??= !isZoomSelection<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;? this.BimScene.GetSceneBoundingBox()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: this.BimScene.GetSelectionBoundingBox();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (bBox.Value.SizeX is float.NaN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| bBox.Value.SizeY is float.NaN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| bBox.Value.SizeZ is float.NaN)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bBox = this.BimScene.RootNode.GetLocalBoundingBox();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Settings.SingleInstance.CameraAnimationDuration &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var corn = bBox.Value.GetCorners();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var dist = this.targetPositionCamera.GetFitIntoViewDistanceOrViewWidth(corn, FitIntoViewType.CheckBounds, true, out var targ);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var cameraAnimation = AnimationBuilder.CreateCameraAnimation(this.targetPositionCamera);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cameraAnimation.EasingFunction = EasingFunctions.QuadraticEaseInOutFunction;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cameraAnimation.Set(CameraAnimatedProperties.TargetPosition, targ, Settings.SingleInstance.CameraAnimationDuration);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cameraAnimation.Set(CameraAnimatedProperties.Distance, dist, Settings.SingleInstance.CameraAnimationDuration);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (this.currentCameraAnimation is not null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.currentCameraAnimation.Completed -= this.CameraAnimation_Completed;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.currentCameraAnimation.Stop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cameraAnimation.Start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.currentCameraAnimation = cameraAnimation;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.currentCameraAnimation.Completed += this.CameraAnimation_Completed;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.targetPositionCamera.TargetPosition = bBox.Value.GetCenterPosition();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.targetPositionCamera.FitIntoView(bBox.Value, false, 1.1f);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.UpdateCameraPosition();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</code></div></div><br />
It works pretty well when in perspective projection, but it does not work for ortographic<br />
I know I must set ViewWidth and AspectRatio to handle that, so, could you please point me in the right direction to calculate the ViewWidth?]]></description>
			<content:encoded><![CDATA[Hi<br />
I have this method to zoom to a BoundingBox:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;private void Zoom(bool isZoomSelection, BoundingBox? bBox = null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (this.BimScene is null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Threads.ExecuteOnUIThread(() =&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// BoundingBox can be NaN when there are no models -&gt; Get RootNode BoundingBox instead with the grid<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bBox ??= !isZoomSelection<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;? this.BimScene.GetSceneBoundingBox()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: this.BimScene.GetSelectionBoundingBox();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (bBox.Value.SizeX is float.NaN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| bBox.Value.SizeY is float.NaN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| bBox.Value.SizeZ is float.NaN)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bBox = this.BimScene.RootNode.GetLocalBoundingBox();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Settings.SingleInstance.CameraAnimationDuration &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var corn = bBox.Value.GetCorners();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var dist = this.targetPositionCamera.GetFitIntoViewDistanceOrViewWidth(corn, FitIntoViewType.CheckBounds, true, out var targ);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var cameraAnimation = AnimationBuilder.CreateCameraAnimation(this.targetPositionCamera);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cameraAnimation.EasingFunction = EasingFunctions.QuadraticEaseInOutFunction;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cameraAnimation.Set(CameraAnimatedProperties.TargetPosition, targ, Settings.SingleInstance.CameraAnimationDuration);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cameraAnimation.Set(CameraAnimatedProperties.Distance, dist, Settings.SingleInstance.CameraAnimationDuration);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (this.currentCameraAnimation is not null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.currentCameraAnimation.Completed -= this.CameraAnimation_Completed;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.currentCameraAnimation.Stop();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cameraAnimation.Start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.currentCameraAnimation = cameraAnimation;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.currentCameraAnimation.Completed += this.CameraAnimation_Completed;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.targetPositionCamera.TargetPosition = bBox.Value.GetCenterPosition();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.targetPositionCamera.FitIntoView(bBox.Value, false, 1.1f);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.UpdateCameraPosition();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</code></div></div><br />
It works pretty well when in perspective projection, but it does not work for ortographic<br />
I know I must set ViewWidth and AspectRatio to handle that, so, could you please point me in the right direction to calculate the ViewWidth?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[EdgeLinesFactory CreateEdgeLines wrong index buffer returned for PlaneModelNode]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4498</link>
			<pubDate>Sun, 19 Oct 2025 19:01:18 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=12443">BiMMate</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4498</guid>
			<description><![CDATA[Hello<br />
<br />
Could it be possible that CreateEdgeLines method in EdgeLinesFactory static class is returning wrong index buffer so outter edges are rendered in diagonal?]]></description>
			<content:encoded><![CDATA[Hello<br />
<br />
Could it be possible that CreateEdgeLines method in EdgeLinesFactory static class is returning wrong index buffer so outter edges are rendered in diagonal?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Boxmeshde farklı materyal kullanımı]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4496</link>
			<pubDate>Sat, 04 Oct 2025 14:31:58 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=12995">Saim Türel</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4496</guid>
			<description><![CDATA[Merhaba. 3B yazılım üzerinde çalışıyorum. HelxToolkit ile biraz çalıştım ve 3B yazılımlar hakkında biraz bilgim var. AB4D de ilgimi çekti. Çalışmalarımda kullanıp kullanamayacağımı merak ediyorum. Örneklerde vurguladığım bazı noktaları göremedim. Bunlar hakkında bilgi edinmek istiyorum. Yardımcı olabileceğiniz umuduyla ilk sorumu sormak istiyorum. Bir kutunun önünü ve arkasını aynı malzemeyle, diğer taraflarını ise farklı bir malzemeyle doldurmak istiyorum. Bunu nasıl yapabilirim?]]></description>
			<content:encoded><![CDATA[Merhaba. 3B yazılım üzerinde çalışıyorum. HelxToolkit ile biraz çalıştım ve 3B yazılımlar hakkında biraz bilgim var. AB4D de ilgimi çekti. Çalışmalarımda kullanıp kullanamayacağımı merak ediyorum. Örneklerde vurguladığım bazı noktaları göremedim. Bunlar hakkında bilgi edinmek istiyorum. Yardımcı olabileceğiniz umuduyla ilk sorumu sormak istiyorum. Bir kutunun önünü ve arkasını aynı malzemeyle, diğer taraflarını ise farklı bir malzemeyle doldurmak istiyorum. Bunu nasıl yapabilirim?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Frustrum Culling]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4495</link>
			<pubDate>Wed, 01 Oct 2025 19:18:12 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=12443">BiMMate</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4495</guid>
			<description><![CDATA[I am facing the rendering of a scene with many, many triangles<br />
I cannot do mesh instancing as elements are not the same<br />
I cannot merge the meshes as I would loose individual elements selection<br />
<br />
... and I am getting low performance on camera operations<br />
<br />
Is it possible to do frustum culling so the engine is not rendering elements outside the visible area?<br />
<br />
In case not, what other advices can you give me?<br />
<br />
Thanks in advance]]></description>
			<content:encoded><![CDATA[I am facing the rendering of a scene with many, many triangles<br />
I cannot do mesh instancing as elements are not the same<br />
I cannot merge the meshes as I would loose individual elements selection<br />
<br />
... and I am getting low performance on camera operations<br />
<br />
Is it possible to do frustum culling so the engine is not rendering elements outside the visible area?<br />
<br />
In case not, what other advices can you give me?<br />
<br />
Thanks in advance]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Correct way to get bounding box of scene node?]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4494</link>
			<pubDate>Wed, 01 Oct 2025 05:40:10 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=12442">zacfromaustinpowder</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4494</guid>
			<description><![CDATA[What's the correct way to get the bounding box of a scene node? There is SceneNode.WorldBoundingBox, but I don't think this updates the bounding box when it's dirty, so I've considered calling SceneNode.Update before accessing the WorldBoundingBox. Then I found Scene.UpdateSceneNodeWorldMatrixData(SceneNode), which is another option. So I'm not sure what the best way to get the up-to-date bounding box is.<br />
<br />
On a related note, what is the correct way to get the up-to-date world matrix of the scene node?]]></description>
			<content:encoded><![CDATA[What's the correct way to get the bounding box of a scene node? There is SceneNode.WorldBoundingBox, but I don't think this updates the bounding box when it's dirty, so I've considered calling SceneNode.Update before accessing the WorldBoundingBox. Then I found Scene.UpdateSceneNodeWorldMatrixData(SceneNode), which is another option. So I'm not sure what the best way to get the up-to-date bounding box is.<br />
<br />
On a related note, what is the correct way to get the up-to-date world matrix of the scene node?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Custom light]]></title>
			<link>https://forum.ab4d.com/showthread.php?tid=4491</link>
			<pubDate>Sat, 30 Aug 2025 10:05:14 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.ab4d.com/member.php?action=profile&uid=12983">zergud</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.ab4d.com/showthread.php?tid=4491</guid>
			<description><![CDATA[Hello, <br />
Is it possible to implement custom light source (with shaders)?]]></description>
			<content:encoded><![CDATA[Hello, <br />
Is it possible to implement custom light source (with shaders)?]]></content:encoded>
		</item>
	</channel>
</rss>