Files
Pilz/Pilz.Simple3DFileParser/FileParser/Aspose3DLoader.vb
2025-10-15 10:51:07 +02:00

251 lines
10 KiB
VB.net

'Imports System.Globalization
'Imports System.IO
'Imports System.Threading
'Imports Aspose.ThreeD
'Imports Aspose.ThreeD.Entities
'Imports Aspose.ThreeD.Shading
'Imports Aspose.ThreeD.Utilities
'Namespace Aspose3DModule
' Public Class Aspose3DLoader
' Private Shared hasActivatedMemoryPatching As Boolean = False
' Private Shared Sub ActivateMemoryPatching()
' If Not hasActivatedMemoryPatching Then
' LicenseHelper.AsposeModifyInMemory.ActivateMemoryPatching()
' hasActivatedMemoryPatching = True
' End If
' End Sub
' Public Shared Function FromFile(fileName As String, LoadMaterials As Boolean, UpAxis As UpAxis) As Object3D
' ActivateMemoryPatching()
' 'Create new Model
' Dim obj3d As New Object3D
' 'Create new temporary CultureInfo
' Dim curThread As Thread = Thread.CurrentThread
' Dim curCultInfo As CultureInfo = curThread.CurrentCulture
' Dim newCultInfo As New CultureInfo(curCultInfo.Name)
' newCultInfo.NumberFormat.NumberDecimalSeparator = "."
' newCultInfo.NumberFormat.PercentDecimalSeparator = "."
' newCultInfo.NumberFormat.CurrencyDecimalSeparator = "."
' newCultInfo.NumberFormat.NumberGroupSeparator = ","
' newCultInfo.NumberFormat.PercentGroupSeparator = ","
' newCultInfo.NumberFormat.CurrencyGroupSeparator = ","
' curThread.CurrentCulture = newCultInfo
' 'Load Model from file
' Dim scene As New Scene
' 'Reset Cultur-Info
' curThread.CurrentCulture = curCultInfo
' 'Triangulate the Model
' PolygonModifier.Triangulate(scene)
' 'Create Dictionary for Materials
' Dim dicMaterials As New Dictionary(Of Aspose.ThreeD.Shading.Material, Material)
' 'Create List of all avaiable Map-States
' Dim MapNames As String() = {Aspose.ThreeD.Shading.Material.MapDiffuse, Aspose.ThreeD.Shading.Material.MapAmbient, Aspose.ThreeD.Shading.Material.MapSpecular, Aspose.ThreeD.Shading.Material.MapEmissive, Aspose.ThreeD.Shading.Material.MapNormal}
' Dim ColorNames As String() = {"DiffuseColor", "AmbientColor", "SpecularColor", "EmissiveColor"}
' For Each node As Node In scene.RootNode.ChildNodes
' 'Add new Materials, if not added
' For Each mat As Aspose.ThreeD.Shading.Material In node.Materials
' If Not dicMaterials.ContainsKey(mat) Then
' 'Create new Material
' Dim newMat As New Material
' 'Get TextureBase
' Dim texBase As TextureBase = Nothing
' Dim curmnindex As Byte = 0
' Do While texBase Is Nothing AndAlso curmnindex < MapNames.Length
' texBase = mat.GetTexture(MapNames(curmnindex))
' curmnindex += 1
' Loop
' If texBase IsNot Nothing Then
' If LoadMaterials Then
' 'Get Texture Image
' Dim imgFile As String = texBase.GetPropertyValue("FileName")
' imgFile = imgFile.Replace("/", "\")
' 'Load and set Image
' If imgFile <> "" Then
' Dim fs As New FileStream(imgFile, FileMode.Open, FileAccess.Read)
' newMat.Image = Image.FromStream(fs)
' fs.Close()
' End If
' End If
' End If
' 'Get Texture Color
' Dim texcol As Vector3? = Nothing
' Dim curcnindex As Byte = 0
' Do While texcol Is Nothing AndAlso curcnindex < ColorNames.Length
' texcol = mat.GetPropertyValue(ColorNames(curcnindex))
' curcnindex += 1
' Loop
' If texcol IsNot Nothing Then
' newMat.Color = Color.FromArgb(texcol?.x, texcol?.y, texcol?.z)
' End If
' 'Add Material to Object3D
' obj3d.Materials.Add(mat.Name, newMat)
' 'Add Dictionary-Entry
' dicMaterials.Add(mat, newMat)
' End If
' Next
' 'Get Aspose-Mesh
' Dim curMesh As Entities.Mesh = node.GetEntity(Of Entities.Mesh)
' If curMesh IsNot Nothing Then
' 'Create new Mesh
' Dim newMesh As New Mesh
' 'Create Vertices
' For Each vert As Vector4 In curMesh.ControlPoints
' 'Create new Vertex
' 'Set Vertex Data
' Dim newVert As New Vertex With {
' .X = vert.x,
' .Y = vert.y,
' .Z = vert.z
' }
' 'Add new Vertex
' newMesh.Vertices.Add(newVert)
' Next
' 'Create Normals
' Dim veNormals As VertexElementNormal = curMesh.GetElement(VertexElementType.Normal)
' If veNormals IsNot Nothing Then
' For Each n As Vector4 In veNormals.Data
' 'Create new Normal
' 'Set Normal Data
' Dim newNormal As New Normal With {
' .X = n.x,
' .Y = n.y,
' .Z = n.z
' }
' 'Add new Normal
' newMesh.Normals.Add(newNormal)
' Next
' End If
' 'Create Normals
' Dim veUVs As VertexElementUV = curMesh.GetElement(VertexElementType.UV)
' If veUVs IsNot Nothing Then
' For Each uv As Vector4 In veUVs.Data
' 'Create new UV
' 'Set UV Data
' Dim newUV As New UV With {
' .U = uv.x,
' .V = uv.y
' }
' 'Add new UV
' newMesh.UVs.Add(newUV)
' Next
' End If
' 'Create Normals
' Dim veVertexColor As VertexElementVertexColor = curMesh.GetElement(VertexElementType.VertexColor)
' If veVertexColor IsNot Nothing Then
' For Each n As Vector4 In veVertexColor.Data
' 'Create new Normal
' 'Set Normal Data
' Dim newVC As New VertexColor With {
' .R = n.x,
' .G = n.y,
' .B = n.z,
' .A = n.w
' }
' 'Add new Normal
' newMesh.VertexColors.Add(newVC)
' Next
' End If
' 'Get Material-Indicies
' Dim veMaterials As VertexElementMaterial = curMesh.GetElement(VertexElementType.Material)
' 'Definde Index for VertexElement.Indicies
' Dim veIndex As Integer = 0
' 'Build Polygones
' For iPoly = 0 To curMesh.Polygons.Count - 1
' 'Get current Polygon
' Dim poly As Integer() = curMesh.Polygons(iPoly)
' 'Create new Face
' Dim f As New Face
' 'Set Texture, if avaiable
' If veMaterials IsNot Nothing Then
' f.Material = dicMaterials(node.Materials(veMaterials.Indices(iPoly)))
' ElseIf node.Material IsNot Nothing Then
' f.Material = dicMaterials(node.Material)
' End If
' For Each index As Integer In poly
' 'Create new Point
' 'Set Vertex
' Dim p As New Point With {
' .Vertex = newMesh.Vertices(index)
' }
' 'Set Normal
' If veNormals IsNot Nothing Then
' p.Normal = newMesh.Normals(veNormals.Indices(veIndex))
' End If
' 'Set UV
' If veUVs IsNot Nothing Then
' p.UV = newMesh.UVs(veUVs.Indices(veIndex))
' End If
' 'Set Vertex Color
' If veVertexColor IsNot Nothing Then
' p.VertexColor = newMesh.VertexColors(veVertexColor.Indices(veIndex))
' End If
' 'Add new Point
' f.Points.Add(p)
' 'Increment VertexElementIndicies-Index
' veIndex += 1
' Next
' 'Add new Face
' newMesh.Faces.Add(f)
' Next
' 'Add new Mesh
' obj3d.Meshes.Add(newMesh)
' End If
' Next
' 'Return the new Object3D
' Return obj3d
' End Function
' End Class
'End Namespace