From d3277e22f1baec65000ff40bb235a5726fa15699 Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Tue, 25 Nov 2025 11:53:41 +0100 Subject: [PATCH 1/8] bumped mesh reader module --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 92145b3..f569dec 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/Patch2PDF/GDTF-Parser go 1.25.4 -require github.com/Patch2PDF/GDTF-Mesh-Reader v0.4.0 +require github.com/Patch2PDF/GDTF-Mesh-Reader v0.5.0 require ( github.com/google/go-cmp v0.7.0 diff --git a/go.sum b/go.sum index 39d4cb5..41ad119 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/Patch2PDF/GDTF-Mesh-Reader v0.4.0 h1:WcfyiEjmVYtrgUjxQ9nSf7b/hgwaQ8EiLeL0ePWm0F4= -github.com/Patch2PDF/GDTF-Mesh-Reader v0.4.0/go.mod h1:4Uipj5UA1HhD3v032aSnEFlpItN80UY5zKB15mIeVwQ= +github.com/Patch2PDF/GDTF-Mesh-Reader v0.5.0 h1:LagYb6qTFhQBnaDSDBxoB40td/zO/Kg6qskBJdYXcog= +github.com/Patch2PDF/GDTF-Mesh-Reader v0.5.0/go.mod h1:4Uipj5UA1HhD3v032aSnEFlpItN80UY5zKB15mIeVwQ= github.com/go-test/deep v1.0.1 h1:UQhStjbkDClarlmv0am7OXXO4/GaPdCGiUiMTvi28sg= github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= From d63b3ba43afc949f26cba2aba257744356560ef0 Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Tue, 25 Nov 2025 11:54:07 +0100 Subject: [PATCH 2/8] added readme --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..41cbc91 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# GDTF-Parser + +This Go module allows reading and parsing the content of a `.gdtf` file. + +> [!NOTE] +> This module is a WIP, if you find an error or a feature is missing, feel to contribute or open an issue + +## Known Limitations: +- missing Default Values +- special Cases like `SubPhysicalUnits` might not be handled correctly as no reference was available (feel free to open an issue with sample data) From 9626d61926f044148c0121966a703df9f377de60 Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Tue, 25 Nov 2025 11:58:16 +0100 Subject: [PATCH 3/8] added ability to parse gdtf file by an io.Reader + moved example to `/examples` --- examples/parse-gdtf.go | 36 ++++++++++++ examples/stl/stl-writer.go | 73 ++++++++++++++++++++++++ gdtf-parser.go | 114 +++++++++++++++++++++++++------------ 3 files changed, 187 insertions(+), 36 deletions(-) create mode 100644 examples/parse-gdtf.go create mode 100644 examples/stl/stl-writer.go diff --git a/examples/parse-gdtf.go b/examples/parse-gdtf.go new file mode 100644 index 0000000..506179b --- /dev/null +++ b/examples/parse-gdtf.go @@ -0,0 +1,36 @@ +package main + +import ( + "fmt" + "log" + "os" + + GDTFMeshReader "github.com/Patch2PDF/GDTF-Mesh-Reader" + GDTFParser "github.com/Patch2PDF/GDTF-Parser" + STL "github.com/Patch2PDF/GDTF-Parser/examples/stl" +) + +func main() { + // Load Primitive Meshes + err := GDTFMeshReader.LoadPrimitives() + if err != nil { + log.Fatal(err) + } + + // open and read gdtf file + gdtf, err := GDTFParser.ParseGDTFByFilename("test.gdtf", true, true) + if err != nil { + log.Fatal(err) + } + fmt.Printf("%+v\n", *gdtf) + + // build gdtf model (by dmx mode) + mesh, err := gdtf.BuildMesh("32Ch") + if err != nil { + log.Fatal(err) + } + // write mesh as STL + f, _ := os.Create("Test.stl") + STL.WriteBinary(f, mesh) + f.Close() +} diff --git a/examples/stl/stl-writer.go b/examples/stl/stl-writer.go new file mode 100644 index 0000000..8085bc0 --- /dev/null +++ b/examples/stl/stl-writer.go @@ -0,0 +1,73 @@ +package STL + +import ( + "encoding/binary" + "io" + + "github.com/Patch2PDF/GDTF-Mesh-Reader/pkg/MeshTypes" +) + +// helper for `WriteBinary` +func computeNormal(t *MeshTypes.Triangle) MeshTypes.Vector { + // edge vectors + a := t.V1.Position.Sub(t.V0.Position) + + b := t.V2.Position.Sub(t.V0.Position) + + n := a.Cross(b) + + return n.Normalize() +} + +// helper for testing extracted vertices, will be removed +func WriteBinary(w io.Writer, mesh *MeshTypes.Mesh) error { + // 80-byte header + header := make([]byte, 80) + if _, err := w.Write(header); err != nil { + return err + } + + triCount := uint32(len(mesh.Triangles)) + if err := binary.Write(w, binary.LittleEndian, triCount); err != nil { + return err + } + + for _, t := range mesh.Triangles { + + // Use vertex normal if present, else compute one + var n MeshTypes.Vector + if t.V0.Normal != nil { + n = *t.V0.Normal + } else { + n = computeNormal(t) + } + + writeVec := func(v MeshTypes.Vector) error { + if err := binary.Write(w, binary.LittleEndian, float32(v.X)); err != nil { + return err + } + if err := binary.Write(w, binary.LittleEndian, float32(v.Y)); err != nil { + return err + } + return binary.Write(w, binary.LittleEndian, float32(v.Z)) + } + + // normal + 3 vertices + attribute byte count + if err := writeVec(n); err != nil { + return err + } + if err := writeVec(t.V0.Position); err != nil { + return err + } + if err := writeVec(t.V1.Position); err != nil { + return err + } + if err := writeVec(t.V2.Position); err != nil { + return err + } + + binary.Write(w, binary.LittleEndian, uint16(0)) // attribute + } + + return nil +} diff --git a/gdtf-parser.go b/gdtf-parser.go index 095be9b..d0ebfe8 100644 --- a/gdtf-parser.go +++ b/gdtf-parser.go @@ -1,7 +1,8 @@ -package main +package GDTFParser import ( "archive/zip" + "bytes" "encoding/xml" "fmt" "image" @@ -16,21 +17,19 @@ import ( Types "github.com/Patch2PDF/GDTF-Parser/pkg/types" ) -func ParseGDTF(filename string, readMeshes bool, readThumbnail bool) (*Types.GDTF, error) { - if filepath.Ext(filename) != ".gdtf" { - return nil, fmt.Errorf("%s is not a GDTF file", filename) - } - // unzip gdtf file - gdtf, err := zip.OpenReader(filename) - - if err != nil { - return nil, err - } - defer gdtf.Close() - +// Parse a GDTF file +// +// # Args: +// +// - zipfile: GDTF File as zip.Reader +// +// - readMeshes: wether to read model meshes (true) or leave nil (false) +// +// - readThumbnail: wether to read model thumbnail (true) or leave nil (false) +func ParseGDTFZipReader(zipfile *zip.Reader, readMeshes bool, readThumbnail bool) (*Types.GDTF, error) { // create map of files var fileMap map[string]*zip.File = make(map[string]*zip.File) - for _, file := range gdtf.File { + for _, file := range zipfile.File { fileMap[file.Name] = file } @@ -38,11 +37,11 @@ func ParseGDTF(filename string, readMeshes bool, readThumbnail bool) (*Types.GDT if err != nil { return nil, err } - defer xmlFile.Close() data, err := io.ReadAll(xmlFile) if err != nil { return nil, err } + xmlFile.Close() var gdtfContent XMLTypes.GDTF err = xml.Unmarshal(data, &gdtfContent) @@ -67,7 +66,8 @@ func ParseGDTF(filename string, readMeshes bool, readThumbnail bool) (*Types.GDT PrimitiveType: model.PrimitiveType, } - if model.File != nil && *model.File != "" && model.PrimitiveType == "Undefined" { + // model file has precedence + if model.File != nil && *model.File != "" { filename := getGDTFModelFileName(fileMap, *model.File) if filename == nil { return nil, fmt.Errorf("could not find model file '%s' in GDTF File", *model.File) @@ -89,7 +89,9 @@ func ParseGDTF(filename string, readMeshes bool, readThumbnail bool) (*Types.GDT }, ) if err != nil { - return nil, err + // return nil, err + log.Printf("invalid model: %s: %s", model.Name, err) + mesh = &MeshTypes.Mesh{} } model.Mesh = mesh } @@ -113,6 +115,65 @@ func ParseGDTF(filename string, readMeshes bool, readThumbnail bool) (*Types.GDT return &parsedGDTF, nil } +// Parse a GDTF file +// +// # Args: +// +// - filename: path to GDTF File (can be relative or absolute) +// +// - readMeshes: wether to read model meshes (true) or leave nil (false) +// +// - readThumbnail: wether to read model thumbnail (true) or leave nil (false) +func ParseGDTFByFilename(filename string, readMeshes bool, readThumbnail bool) (*Types.GDTF, error) { + if filepath.Ext(filename) != ".gdtf" { + return nil, fmt.Errorf("%s is not a GDTF file", filename) + } + // unzip gdtf file + gdtf, err := zip.OpenReader(filename) + if err != nil { + return nil, err + } + defer gdtf.Close() + + return ParseGDTFZipReader(&gdtf.Reader, readMeshes, readThumbnail) +} + +// TODO: test this one + +// Parse a GDTF file +// +// # Args: +// +// - file: GDTF File as io.Reader +// +// - readMeshes: wether to read model meshes (true) or leave nil (false) +// +// - readThumbnail: wether to read model thumbnail (true) or leave nil (false) +func ParseGDTFByFile(file io.Reader, readMeshes bool, readThumbnail bool) (*Types.GDTF, error) { + var in io.Reader + var size int64 + + if _, ok := in.(io.ReaderAt); !ok { + buffer, err := io.ReadAll(file) + + if err != nil { + return nil, err + } + + in = bytes.NewReader(buffer) + size = int64(len(buffer)) + } + + // unzip gdtf file + gdtf, err := zip.NewReader(in.(io.ReaderAt), size) + if err != nil { + return nil, err + } + + return ParseGDTFZipReader(gdtf, readMeshes, readThumbnail) +} + +// get path to model file by model name func getGDTFModelFileName(fileMap map[string]*zip.File, modelName string) *string { // prefer gltf, otherwise look for 3ds modelPaths := []string{ @@ -127,22 +188,3 @@ func getGDTFModelFileName(fileMap map[string]*zip.File, modelName string) *strin } return nil } - -func main() { - // Load Primitive Meshes - err := GDTFMeshReader.LoadPrimitives() - if err != nil { - log.Fatal(err) - } - - gdtf, err := ParseGDTF("test.gdtf", true, true) - if err != nil { - log.Fatal(err) - } - fmt.Printf("%+v\n", *gdtf) - - _, err = gdtf.BuildMesh("32Ch") - if err != nil { - log.Fatal(err) - } -} From b54cf3b26587ed1b71522a972c0db2610a3076a9 Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Tue, 25 Nov 2025 11:58:32 +0100 Subject: [PATCH 4/8] added gitignore --- .gitignore | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cf7bd94 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +*.stl + +# build file +GDTF-Parser + +# for now exclude all test gdtf's +*.gdtf From f2e448623136f971de807db85ee703170953dd6a Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Tue, 25 Nov 2025 12:37:13 +0100 Subject: [PATCH 5/8] removed todo in main parser --- gdtf-parser.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/gdtf-parser.go b/gdtf-parser.go index d0ebfe8..a8f0f77 100644 --- a/gdtf-parser.go +++ b/gdtf-parser.go @@ -138,8 +138,6 @@ func ParseGDTFByFilename(filename string, readMeshes bool, readThumbnail bool) ( return ParseGDTFZipReader(&gdtf.Reader, readMeshes, readThumbnail) } -// TODO: test this one - // Parse a GDTF file // // # Args: From 1f29fee1e695d0f7bc957574434500933a7779af Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Tue, 25 Nov 2025 12:38:06 +0100 Subject: [PATCH 6/8] remove prerelease flag in release action --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4efc8e1..49e071c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,4 +27,4 @@ jobs: with: generateReleaseNotes: true tag: ${{ steps.tag_version.outputs.new_tag }} - prerelease: true \ No newline at end of file + prerelease: false \ No newline at end of file From 4b481fe2c2401737884a0399a148525120e53061 Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Tue, 25 Nov 2025 12:48:54 +0100 Subject: [PATCH 7/8] added dependency licenses --- .../Patch2PDF/GDTF-Mesh-Reader/LICENSE | 201 ++++++++++++++++++ Licenses/github.com/google/go-cmp/LICENSE | 27 +++ Licenses/github.com/qmuntal/gltf/LICENSE | 25 +++ 3 files changed, 253 insertions(+) create mode 100644 Licenses/github.com/Patch2PDF/GDTF-Mesh-Reader/LICENSE create mode 100644 Licenses/github.com/google/go-cmp/LICENSE create mode 100644 Licenses/github.com/qmuntal/gltf/LICENSE diff --git a/Licenses/github.com/Patch2PDF/GDTF-Mesh-Reader/LICENSE b/Licenses/github.com/Patch2PDF/GDTF-Mesh-Reader/LICENSE new file mode 100644 index 0000000..c8f608b --- /dev/null +++ b/Licenses/github.com/Patch2PDF/GDTF-Mesh-Reader/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2025 Jannik-Hm + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Licenses/github.com/google/go-cmp/LICENSE b/Licenses/github.com/google/go-cmp/LICENSE new file mode 100644 index 0000000..d9b732c --- /dev/null +++ b/Licenses/github.com/google/go-cmp/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2017 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Licenses/github.com/qmuntal/gltf/LICENSE b/Licenses/github.com/qmuntal/gltf/LICENSE new file mode 100644 index 0000000..3b273c3 --- /dev/null +++ b/Licenses/github.com/qmuntal/gltf/LICENSE @@ -0,0 +1,25 @@ +BSD 2-Clause License + +Copyright (c) 2018, Quim Muntal +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file From d42320d66ac0b18b4d6798ff9aa28b928433e900 Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Tue, 25 Nov 2025 12:53:27 +0100 Subject: [PATCH 8/8] bumped mesh reader module --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f569dec..2fb4101 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/Patch2PDF/GDTF-Parser go 1.25.4 -require github.com/Patch2PDF/GDTF-Mesh-Reader v0.5.0 +require github.com/Patch2PDF/GDTF-Mesh-Reader v0.5.1 require ( github.com/google/go-cmp v0.7.0 diff --git a/go.sum b/go.sum index 41ad119..6a86e18 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/Patch2PDF/GDTF-Mesh-Reader v0.5.0 h1:LagYb6qTFhQBnaDSDBxoB40td/zO/Kg6qskBJdYXcog= -github.com/Patch2PDF/GDTF-Mesh-Reader v0.5.0/go.mod h1:4Uipj5UA1HhD3v032aSnEFlpItN80UY5zKB15mIeVwQ= +github.com/Patch2PDF/GDTF-Mesh-Reader v0.5.1 h1:8kU9Crs7sxt35pI37gmOhbQJzTnVCbXwVAdP7wFl+tY= +github.com/Patch2PDF/GDTF-Mesh-Reader v0.5.1/go.mod h1:4Uipj5UA1HhD3v032aSnEFlpItN80UY5zKB15mIeVwQ= github.com/go-test/deep v1.0.1 h1:UQhStjbkDClarlmv0am7OXXO4/GaPdCGiUiMTvi28sg= github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=