Skip to content

Commit ce24c44

Browse files
authored
BREAKING CHANGE: converted size vector to ptr, allowing nil for original size
Nullable Size Vector
2 parents dcd0289 + caec357 commit ce24c44

3 files changed

Lines changed: 24 additions & 15 deletions

File tree

main.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func LoadPrimitives() error {
2424
// Get Model by mesh file or PrimitiveType.
2525
//
2626
// Note: requires LoadPrimitives() to be run beforehand if you want to get a primitive
27-
func GetModel(conf ModelReaderConf, desiredSize MeshTypes.Vector) (*MeshTypes.Mesh, error) {
27+
func GetModel(conf ModelReaderConf, desiredSize *MeshTypes.Vector) (*MeshTypes.Mesh, error) {
2828
var mesh *MeshTypes.Mesh
2929

3030
if conf.File != nil && conf.Filename != nil && *conf.Filename != "" {
@@ -41,7 +41,7 @@ func GetModel(conf ModelReaderConf, desiredSize MeshTypes.Vector) (*MeshTypes.Me
4141
if err != nil {
4242
return nil, err
4343
}
44-
mesh, err = FileHandlers.Load3DS(&data, &desiredSize)
44+
mesh, err = FileHandlers.Load3DS(&data, desiredSize)
4545
if err != nil {
4646
return nil, err
4747
}
@@ -54,7 +54,9 @@ func GetModel(conf ModelReaderConf, desiredSize MeshTypes.Vector) (*MeshTypes.Me
5454
}
5555
tempMesh := Primitives.Primitives[conf.PrimitiveType].Copy()
5656
mesh = &tempMesh
57-
mesh.ScaleToDimensions(&desiredSize)
57+
if desiredSize != nil {
58+
mesh.ScaleToDimensions(desiredSize)
59+
}
5860
}
5961

6062
return mesh, nil

pkg/MeshTypes/mesh.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,7 @@ func (obj *Mesh) calculateBoundingBox() Vector {
7171
}
7272
}
7373

74-
func (obj *Mesh) ScaleToDimensions(desiredSize *Vector) error {
75-
actual := obj.calculateBoundingBox()
76-
if actual.X == 0 && actual.Y == 0 && actual.Z == 0 {
77-
return fmt.Errorf("invalid Mesh with 0 dimension")
78-
}
79-
scaling := desiredSize.Div(actual)
74+
func (obj *Mesh) Scale(scaling Vector) error {
8075
scaledVectors := make(map[*Vertex]struct{})
8176
for _, triangle := range obj.Triangles {
8277
if _, exists := scaledVectors[triangle.V0]; !exists {
@@ -94,3 +89,12 @@ func (obj *Mesh) ScaleToDimensions(desiredSize *Vector) error {
9489
}
9590
return nil
9691
}
92+
93+
func (obj *Mesh) ScaleToDimensions(desiredSize *Vector) error {
94+
actual := obj.calculateBoundingBox()
95+
if actual.X == 0 && actual.Y == 0 && actual.Z == 0 {
96+
return fmt.Errorf("invalid Mesh with 0 dimension")
97+
}
98+
scaling := desiredSize.Div(actual)
99+
return obj.Scale(scaling)
100+
}

pkg/file_handlers/gltf.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"github.com/qmuntal/gltf"
1111
)
1212

13-
func LoadGLTF(file io.Reader, desiredSize Types.Vector) ([]*Types.Mesh, error) {
13+
func LoadGLTF(file io.Reader, desiredSize *Types.Vector) ([]*Types.Mesh, error) {
1414
var doc gltf.Document
1515
gltf.NewDecoder(file).Decode(&doc)
1616

@@ -20,11 +20,14 @@ func LoadGLTF(file io.Reader, desiredSize Types.Vector) ([]*Types.Mesh, error) {
2020
for _, p := range m.Primitives {
2121
// contains Min and Max attr (for dimension calc)
2222
posAccessor := doc.Accessors[p.Attributes[gltf.POSITION]]
23-
scaling := Types.Vector{
24-
// axes inverted to convert to correct coordinate system
25-
X: desiredSize.X / (posAccessor.Max[0] - posAccessor.Min[0]),
26-
Y: desiredSize.Y / (posAccessor.Max[2] - posAccessor.Min[2]),
27-
Z: desiredSize.Z / (posAccessor.Max[1] - posAccessor.Min[1]),
23+
scaling := Types.Vector{X: 1, Y: 1, Z: 1}
24+
if desiredSize != nil {
25+
scaling = Types.Vector{
26+
// axes inverted to convert to correct coordinate system
27+
X: desiredSize.X / (posAccessor.Max[0] - posAccessor.Min[0]),
28+
Y: desiredSize.Y / (posAccessor.Max[2] - posAccessor.Min[2]),
29+
Z: desiredSize.Z / (posAccessor.Max[1] - posAccessor.Min[1]),
30+
}
2831
}
2932
positions, err := gltfVec3(&doc, posAccessor, scaling)
3033
if err != nil {

0 commit comments

Comments
 (0)