├── .gitignore ├── .settings ├── launch.json └── tasks.json ├── Gruntfile.js ├── LICENSE ├── README.md ├── car.png ├── compiled ├── parts-server │ ├── file-fetcher.js │ ├── file-fetcher.js.map │ ├── parts-server.js │ └── parts-server.js.map ├── scripts │ ├── ldraw-visualizer.js │ ├── ldraw-visualizer.js.map │ ├── parser │ │ ├── Color.js │ │ ├── Color.js.map │ │ ├── Coordinates.js │ │ ├── Coordinates.js.map │ │ ├── FileParser.js │ │ ├── FileParser.js.map │ │ ├── FileService.js │ │ ├── FileService.js.map │ │ ├── LdrawFile.js │ │ ├── LdrawFile.js.map │ │ └── lines │ │ │ ├── CommentLine.js │ │ │ ├── CommentLine.js.map │ │ │ ├── LdrawFileLine.js │ │ │ ├── LdrawFileLine.js.map │ │ │ ├── LineLine.js │ │ │ ├── LineLine.js.map │ │ │ ├── LineTypes.js │ │ │ ├── LineTypes.js.map │ │ │ ├── OptionalLineLine.js │ │ │ ├── OptionalLineLine.js.map │ │ │ ├── QuadrilateralLine.js │ │ │ ├── QuadrilateralLine.js.map │ │ │ ├── SubFileReferenceLine.js │ │ │ ├── SubFileReferenceLine.js.map │ │ │ ├── TriangleLine.js │ │ │ ├── TriangleLine.js.map │ │ │ └── meta-lines │ │ │ ├── AuthorMETALine.js │ │ │ ├── AuthorMETALine.js.map │ │ │ ├── ColourMETALine.js │ │ │ ├── ColourMETALine.js.map │ │ │ ├── FileMETALine.js │ │ │ ├── FileMETALine.js.map │ │ │ ├── LdrawOrgMETALine.js │ │ │ ├── LdrawOrgMETALine.js.map │ │ │ ├── METALine.js │ │ │ ├── METALine.js.map │ │ │ ├── NameMETALine.js │ │ │ ├── NameMETALine.js.map │ │ │ ├── NoFileMETALine.js │ │ │ ├── NoFileMETALine.js.map │ │ │ ├── PartDescription.js │ │ │ ├── PartDescription.js.map │ │ │ ├── RotationCenterMETALine.js │ │ │ ├── RotationCenterMETALine.js.map │ │ │ ├── RotationConfigMETALine.js │ │ │ ├── RotationConfigMETALine.js.map │ │ │ ├── RotationStepMETALine.js │ │ │ ├── RotationStepMETALine.js.map │ │ │ ├── StepMETALine.js │ │ │ └── StepMETALine.js.map │ ├── renderer │ │ ├── ColorLookup.js │ │ ├── ColorLookup.js.map │ │ ├── EdgeMap.js │ │ ├── EdgeMap.js.map │ │ ├── LdrawFileRenderer.js │ │ ├── LdrawFileRenderer.js.map │ │ ├── Smoother.js │ │ ├── Smoother.js.map │ │ ├── VertexMapBase.js │ │ ├── VertexMapBase.js.map │ │ ├── VertexToFaceMap.js │ │ ├── VertexToFaceMap.js.map │ │ ├── VertexToLineMap.js │ │ └── VertexToLineMap.js.map │ ├── utility.js │ └── utility.js.map └── typings │ ├── references.js │ └── references.js.map ├── dist ├── favicon.ico ├── images │ ├── Thumbs.db │ ├── studlogo-old.png │ └── studlogo.png ├── index.html ├── ldraw-visualizer-0.2.0.min.css ├── ldraw-visualizer-0.2.0.min.js ├── models │ ├── 1st Place Robot Design Round 1.ldr │ ├── 31018.mpd │ ├── CAR.DAT │ ├── Gearbox.ldr │ └── Thumbs.db └── server │ └── parts-server │ ├── file-fetcher.js │ ├── file-fetcher.js.map │ ├── parts-server.js │ └── parts-server.js.map ├── favicon.ico ├── fll.png ├── gearbox.png ├── images ├── Thumbs.db ├── studlogo-old.png └── studlogo.png ├── index.html ├── lib ├── jquery │ └── jquery-2.1.4.min.js └── threejs │ ├── Detector.js │ ├── OrbitControls.js │ └── three.min.js ├── models ├── 1st Place Robot Design Round 1.ldr ├── 31018.mpd ├── CAR.DAT ├── Gearbox.ldr ├── Thumbs.db ├── test.ldr └── test2.ldr ├── motorcycle.png ├── package.json ├── parts-server ├── file-fetcher.ts └── parts-server.ts ├── scripts ├── ldraw-visualizer.ts ├── parser │ ├── Color.ts │ ├── Coordinates.ts │ ├── FileParser.ts │ ├── FileService.ts │ ├── LdrawFile.ts │ └── lines │ │ ├── CommentLine.ts │ │ ├── LdrawFileLine.ts │ │ ├── LineLine.ts │ │ ├── LineTypes.ts │ │ ├── OptionalLineLine.ts │ │ ├── QuadrilateralLine.ts │ │ ├── SubFileReferenceLine.ts │ │ ├── TriangleLine.ts │ │ └── meta-lines │ │ ├── AuthorMETALine.ts │ │ ├── ColourMETALine.ts │ │ ├── FileMETALine.ts │ │ ├── LdrawOrgMETALine.ts │ │ ├── NameMETALine.ts │ │ ├── NoFileMETALine.ts │ │ ├── PartDescription.ts │ │ ├── RotationCenterMETALine.ts │ │ ├── RotationConfigMETALine.ts │ │ ├── RotationStepMETALine.ts │ │ └── StepMETALine.ts ├── renderer │ ├── ColorLookup.ts │ ├── EdgeMap.ts │ ├── LdrawFileRenderer.ts │ ├── Smoother.ts │ ├── VertexToFaceMap.ts │ └── VertexToLineMap.ts └── utility.ts ├── styles ├── ldraw-visualizer.css ├── ldraw-visualizer.css.map └── ldraw-visualizer.less ├── test.html ├── tsconfig.json └── typings ├── jquery └── jquery.d.ts ├── node └── node-0.11.d.ts ├── references.js ├── references.js.map ├── references.ts ├── threejs ├── detector.d.ts ├── three-canvasrenderer.d.ts ├── three-copyshader.d.ts ├── three-css3drenderer.d.ts ├── three-effectcomposer.d.ts ├── three-maskpass.d.ts ├── three-orbitcontrols.d.ts ├── three-projector.d.ts ├── three-renderpass.d.ts ├── three-shaderpass.d.ts ├── three-trackballcontrols.d.ts └── three.d.ts └── webrtc ├── MediaStream.d.ts └── RTCPeerConnection.d.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | LDraw -------------------------------------------------------------------------------- /.settings/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1.0", 3 | // List of configurations. Add new configurations or edit existing ones. 4 | // ONLY "node" and "mono" are supported, change "type" to switch. 5 | "configurations": [ 6 | { 7 | // Name of configuration; appears in the launch configuration drop down menu. 8 | "name": "Launch parts-server", 9 | // Type of configuration. Possible values: "node", "mono". 10 | "type": "node", 11 | // Workspace relative or absolute path to the program. 12 | "program": "compiled/parts-server/parts-server.js", 13 | // Automatically stop program after launch. 14 | "stopOnEntry": true, 15 | // Command line arguments passed to the program. 16 | "args": [], 17 | // Workspace relative or absolute path to the working directory of the program being debugged. Default is the current workspace. 18 | "cwd": ".", 19 | // Workspace relative or absolute path to the runtime executable to be used. Default is the runtime executable on the PATH. 20 | "runtimeExecutable": null, 21 | // Optional arguments passed to the runtime executable. 22 | "runtimeArguments": [], 23 | // Environment variables passed to the program. 24 | "env": { }, 25 | // Use JavaScript source maps (if they exist). 26 | "sourceMaps": false 27 | }, 28 | { 29 | "name": "Attach", 30 | "type": "node", 31 | // TCP/IP address. Default is "localhost". 32 | "address": "localhost", 33 | // Port to attach to. 34 | "port": 5858, 35 | "sourceMaps": false 36 | } 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function (grunt) { 2 | 3 | grunt.initConfig({ 4 | pkg: grunt.file.readJSON('package.json'), 5 | dom_munger: { 6 | main: { 7 | options: { 8 | read: [ 9 | { selector: 'link:not(.dom_munger-ignore)', attribute: 'href', writeto: 'cssRefs', isPath: true }, 10 | { selector: 'script:not(.dom_munger-ignore)', attribute: 'src', writeto: 'jsRefs', isPath: true } 11 | ], 12 | remove: ['link:not(.dom_munger-ignore)', 'script:not(.dom_munger-ignore)', 'script.dom_munger-remove'], 13 | append: [ 14 | { selector: 'head', html: '' }, 15 | { selector: 'body', html: '' } 16 | ] 17 | }, 18 | src: './index.html', 19 | dest: './dist/index.html' 20 | }, 21 | }, 22 | clean: ['./dist'], 23 | cssmin: { 24 | options: { 25 | shorthandCompacting: false, 26 | roundingPrecision: -1 27 | }, 28 | target: { 29 | files: { 30 | './dist/ldraw-visualizer-<%= pkg.version %>.min.css': './styles/ldraw-visualizer.css' 31 | } 32 | } 33 | }, 34 | htmlmin: { 35 | options: { 36 | removeComments: true, 37 | collapseWhitespace: true 38 | }, 39 | files: { 40 | './dist/index.html': './dist/index.html' 41 | } 42 | }, 43 | uglify: { 44 | options: { 45 | mangle: true 46 | }, 47 | main: { 48 | src: '<%= dom_munger.data.jsRefs %>', 49 | dest: './dist/ldraw-visualizer-<%= pkg.version %>.min.js' 50 | } 51 | }, 52 | less: { 53 | development: { 54 | options: { 55 | compress: true, 56 | optimization: 2, 57 | sourceMap: true, 58 | sourceMapFilename: "./styles/ldraw-visualizer.css.map", 59 | sourceMapBasepath: "./styles/" 60 | }, 61 | files: { 62 | './styles/ldraw-visualizer.css': './styles/ldraw-visualizer.less' 63 | } 64 | } 65 | }, 66 | copy: { 67 | main: { 68 | files: [ 69 | { 70 | expand: true, 71 | src: ['./favicon.ico'], 72 | dest: './dist', 73 | filter: 'isFile' 74 | }, 75 | { 76 | expand: true, 77 | src: ['./images/**'], 78 | dest: './dist' 79 | }, 80 | { 81 | expand: true, 82 | src: ['./models/**'], 83 | dest: './dist' 84 | }, 85 | { 86 | expand: true, 87 | src: ['./parts-server/**'], 88 | cwd: './compiled', 89 | dest: './dist/server/' 90 | } 91 | ] 92 | } 93 | }, 94 | connect: { 95 | server: { 96 | options: { 97 | useAvailablePort: true, 98 | base: '.', 99 | open: true, 100 | appName: 'open' 101 | } 102 | } 103 | }, 104 | watch: { 105 | options: { 106 | livereload: true 107 | }, 108 | js: { 109 | files: ['./scripts/**/*.js', './styles/**/*.less', './**/*.html'] 110 | } 111 | } 112 | }); 113 | 114 | grunt.loadNpmTasks('grunt-contrib-less'); 115 | grunt.loadNpmTasks('grunt-contrib-connect'); 116 | grunt.loadNpmTasks('grunt-contrib-watch'); 117 | grunt.loadNpmTasks('grunt-contrib-uglify'); 118 | grunt.loadNpmTasks('grunt-contrib-cssmin'); 119 | grunt.loadNpmTasks('grunt-contrib-htmlmin'); 120 | grunt.loadNpmTasks('grunt-contrib-clean'); 121 | grunt.loadNpmTasks('grunt-contrib-copy'); 122 | grunt.loadNpmTasks('grunt-dom-munger'); 123 | 124 | grunt.registerTask('dist', ['clean', 'dom_munger', 'less', 'cssmin', 'htmlmin', 'uglify', 'copy']); 125 | 126 | grunt.registerTask('default', ['less', 'connect', 'watch']); 127 | }; -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Nathan Friend 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ldraw-visualizer 2 | A in-browser LEGO model viewer, built using three.js and LDraw part files. 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/car.png -------------------------------------------------------------------------------- /compiled/parts-server/parts-server.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | // to set up node and apache to run on the same server: http://stackoverflow.com/a/18604082/1063392 4 | var express = require('express'); 5 | var bodyParser = require('body-parser'); 6 | var fileFetcher = require('./file-fetcher'); 7 | var domain = require('domain'); 8 | var app = express(); 9 | app.use(bodyParser.urlencoded({ extended: false, limit: 1048576 })); 10 | app.post('/', function (req, res) { 11 | var d = domain.create(); 12 | var responseHasBeenSent = false; 13 | d.on('error', function (er) { 14 | if (!responseHasBeenSent) { 15 | responseHasBeenSent = true; 16 | console.log(er); 17 | res.status(500).send(er); 18 | } 19 | }); 20 | d.run(function () { 21 | var start = Date.now(); 22 | fileFetcher.fetchFiles(req.body.file, function (allFiles) { 23 | console.log('request took ' + (Date.now() - start) + ' ms to complete'); 24 | res.status(200).send(allFiles); 25 | }); 26 | }); 27 | }); 28 | var server = app.listen(17352); 29 | //# sourceMappingURL=parts-server.js.map -------------------------------------------------------------------------------- /compiled/parts-server/parts-server.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"parts-server.js","sourceRoot":"","sources":["../../parts-server/parts-server.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,0CAA0C;AAE1C,mGAAmG;AAEnG,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACjC,IAAI,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AACxC,IAAI,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC5C,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC/B,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;AACpB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAEpE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,UAAC,GAAG,EAAE,GAAG;IACtB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IACxB,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,UAAS,EAAE;QACxB,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC1B,mBAAmB,GAAG,IAAI,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,CAAC;QACL,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAC,QAAkB;YACxD,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,iBAAiB,CAAC,CAAC;YACxE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC"} -------------------------------------------------------------------------------- /compiled/scripts/parser/Color.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var LdrawVisualizer; 4 | (function (LdrawVisualizer) { 5 | var Parser; 6 | (function (Parser) { 7 | var Color = (function () { 8 | function Color(hexValue) { 9 | this.HexValue = hexValue; 10 | } 11 | Color.prototype.IsValid = function () { 12 | return LdrawVisualizer.Utility.isValidColorHexString(this.HexValue); 13 | }; 14 | return Color; 15 | })(); 16 | Parser.Color = Color; 17 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 18 | })(LdrawVisualizer || (LdrawVisualizer = {})); 19 | //# sourceMappingURL=Color.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/Color.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"Color.js","sourceRoot":"","sources":["../../../scripts/parser/Color.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Color","LdrawVisualizer.Parser.Color.constructor","LdrawVisualizer.Parser.Color.IsValid"],"mappings":"AAAA,oDAAoD;AACpD,sCAAsC;AAEtC,IAAO,eAAe,CAYrB;AAZD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAY5BA;IAZsBA,WAAAA,MAAMA,EAACA,CAACA;QAC9BC;YACCC,eAAYA,QAAgBA;gBAC3BC,IAAIA,CAACA,QAAQA,GAAGA,QAAQA,CAACA;YAC1BA,CAACA;YAIDD,uBAAOA,GAAPA;gBACCE,MAAMA,CAACA,uBAAOA,CAACA,qBAAqBA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA;YACrDA,CAACA;YACFF,YAACA;QAADA,CAACA,AAVDD,IAUCA;QAVYA,YAAKA,QAUjBA,CAAAA;IACFA,CAACA,EAZsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAY5BA;AAADA,CAACA,EAZM,eAAe,KAAf,eAAe,QAYrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/Coordinates.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var LdrawVisualizer; 4 | (function (LdrawVisualizer) { 5 | var Parser; 6 | (function (Parser) { 7 | var Coordinates = (function () { 8 | function Coordinates(x, y, z) { 9 | this.X = x; 10 | this.Y = y; 11 | this.Z = z; 12 | } 13 | Coordinates.prototype.IsValid = function () { 14 | return LdrawVisualizer.Utility.isNumber(this.X) 15 | && LdrawVisualizer.Utility.isNumber(this.Y) 16 | && LdrawVisualizer.Utility.isNumber(this.Z); 17 | }; 18 | return Coordinates; 19 | })(); 20 | Parser.Coordinates = Coordinates; 21 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 22 | })(LdrawVisualizer || (LdrawVisualizer = {})); 23 | //# sourceMappingURL=Coordinates.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/Coordinates.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"Coordinates.js","sourceRoot":"","sources":["../../../scripts/parser/Coordinates.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Coordinates","LdrawVisualizer.Parser.Coordinates.constructor","LdrawVisualizer.Parser.Coordinates.IsValid"],"mappings":"AAAA,oDAAoD;AACpD,sCAAsC;AAEtC,IAAO,eAAe,CAmBrB;AAnBD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAmB5BA;IAnBsBA,WAAAA,MAAMA,EAACA,CAACA;QAC9BC;YAECC,qBAAYA,CAASA,EAAEA,CAASA,EAAEA,CAASA;gBAC1CC,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA;gBACXA,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA;gBACXA,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA;YACZA,CAACA;YAMDD,6BAAOA,GAAPA;gBACCE,MAAMA,CAACA,uBAAOA,CAACA,QAAQA,CAACA,IAAIA,CAACA,CAACA,CAACA;uBAC3BA,uBAAOA,CAACA,QAAQA,CAACA,IAAIA,CAACA,CAACA,CAACA;uBACxBA,uBAAOA,CAACA,QAAQA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA;YAC9BA,CAACA;YACFF,kBAACA;QAADA,CAACA,AAjBDD,IAiBCA;QAjBYA,kBAAWA,cAiBvBA,CAAAA;IACFA,CAACA,EAnBsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAmB5BA;AAADA,CAACA,EAnBM,eAAe,KAAf,eAAe,QAmBrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/FileService.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | var SubFileReferenceLine = LdrawVisualizer.Parser.Lines.SubFileReferenceLine; 6 | var LdrawFileLineType = LdrawVisualizer.Parser.Lines.LdrawFileLineType; 7 | var LdrawVisualizer; 8 | (function (LdrawVisualizer) { 9 | var FileService = (function () { 10 | function FileService() { 11 | } 12 | FileService.GetLdrawFile = function (ldrawFile, callback, isDev) { 13 | if (isDev === void 0) { isDev = true; } 14 | var returnFile, url = isDev ? 'http://localhost:17352/' : './parts-server'; 15 | $.ajax({ 16 | type: 'POST', 17 | url: url, 18 | data: { file: ldrawFile }, 19 | success: function (files) { 20 | var parsedFiles = {}; 21 | // parse each line into a LdrawFile object 22 | for (var prop in files) { 23 | if (files.hasOwnProperty(prop)) { 24 | parsedFiles[prop] = (LdrawVisualizer.Parser.FileParser.Parse(files[prop])); 25 | } 26 | } 27 | var rootFile = parsedFiles['$rootfile$'], ldConfig = parsedFiles['LDConfig.ldr']; 28 | // break any .mpd subparts into their own "parts" 29 | var mpdSubFiles = rootFile.Lines.filter(function (l) { return l.LineType === LdrawFileLineType.File; }); 30 | for (var i = mpdSubFiles.length - 1; i > 0; i--) { 31 | var mpdLine = mpdSubFiles[i], originalIndex = rootFile.Lines.indexOf(mpdLine); 32 | console.log('found subpart number ' + i + ', chopping off starting at ' + originalIndex); 33 | var newSubpartLdrawFile = new LdrawVisualizer.LdrawFile(); 34 | newSubpartLdrawFile.Lines = rootFile.Lines.splice(originalIndex, rootFile.Lines.length /* to the end of the array */); 35 | parsedFiles[LdrawVisualizer.Utility.fixFilePath(mpdLine.Filename)] = newSubpartLdrawFile; 36 | } 37 | // console.log(rootFile); 38 | // console.log(parsedFiles['Core.ldr']); 39 | // console.log('hello'); 40 | // link up subfile references lines to their SubFileReferenceLine instances 41 | for (var prop in parsedFiles) { 42 | if (parsedFiles.hasOwnProperty(prop)) { 43 | parsedFiles[prop].Lines.filter(function (l) { return l.LineType === LdrawFileLineType.SubFileReference; }).forEach(function (l) { 44 | var subfile = l; 45 | subfile.File = parsedFiles[LdrawVisualizer.Utility.fixFilePath(subfile.Filename)]; 46 | }); 47 | } 48 | } 49 | callback(rootFile, ldConfig); 50 | }, 51 | dataType: 'JSON' 52 | }); 53 | }; 54 | return FileService; 55 | })(); 56 | LdrawVisualizer.FileService = FileService; 57 | })(LdrawVisualizer || (LdrawVisualizer = {})); 58 | //# sourceMappingURL=FileService.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/FileService.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"FileService.js","sourceRoot":"","sources":["../../../scripts/parser/FileService.ts"],"names":["LdrawVisualizer","LdrawVisualizer.FileService","LdrawVisualizer.FileService.constructor","LdrawVisualizer.FileService.GetLdrawFile"],"mappings":"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"} -------------------------------------------------------------------------------- /compiled/scripts/parser/LdrawFile.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | var LdrawVisualizer; 5 | (function (LdrawVisualizer) { 6 | var LdrawFile = (function () { 7 | function LdrawFile() { 8 | this.Lines = []; 9 | } 10 | LdrawFile.prototype.IsValid = function () { 11 | return this.Lines.every(function (l) { return l.IsValid(); }); 12 | }; 13 | return LdrawFile; 14 | })(); 15 | LdrawVisualizer.LdrawFile = LdrawFile; 16 | })(LdrawVisualizer || (LdrawVisualizer = {})); 17 | //# sourceMappingURL=LdrawFile.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/LdrawFile.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"LdrawFile.js","sourceRoot":"","sources":["../../../scripts/parser/LdrawFile.ts"],"names":["LdrawVisualizer","LdrawVisualizer.LdrawFile","LdrawVisualizer.LdrawFile.constructor","LdrawVisualizer.LdrawFile.IsValid"],"mappings":"AAAA,oDAAoD;AACpD,sCAAsC;AACtC,iDAAiD;AAEjD,IAAO,eAAe,CAQrB;AARD,WAAO,eAAe,EAAC,CAAC;IACvBA;QAAAC;YACCC,UAAKA,GAAiCA,EAAEA,CAACA;QAK1CA,CAACA;QAHAD,2BAAOA,GAAPA;YACCE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,KAAKA,CAACA,UAAAA,CAACA,IAAIA,OAAAA,CAACA,CAACA,OAAOA,EAAEA,EAAXA,CAAWA,CAACA,CAACA;QAC3CA,CAACA;QACFF,gBAACA;IAADA,CAACA,AANDD,IAMCA;IANYA,yBAASA,YAMrBA,CAAAA;AACFA,CAACA,EARM,eAAe,KAAf,eAAe,QAQrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/CommentLine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | var __extends = this.__extends || function (d, b) { 7 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 8 | function __() { this.constructor = d; } 9 | __.prototype = b.prototype; 10 | d.prototype = new __(); 11 | }; 12 | var LdrawVisualizer; 13 | (function (LdrawVisualizer) { 14 | var Parser; 15 | (function (Parser) { 16 | var Lines; 17 | (function (Lines) { 18 | var CommentLine = (function (_super) { 19 | __extends(CommentLine, _super); 20 | function CommentLine(lineContent) { 21 | _super.call(this, Lines.LdrawFileLineType.Comment); 22 | this.LineContent = lineContent; 23 | } 24 | CommentLine.prototype.IsValid = function () { 25 | return true; 26 | }; 27 | CommentLine.Parse = function (line, splitLine, lineNumber) { 28 | return new Lines.CommentLine(line.substring(line.indexOf('0') + 2)); 29 | }; 30 | return CommentLine; 31 | })(Lines.LdrawFileLine); 32 | Lines.CommentLine = CommentLine; 33 | })(Lines = Parser.Lines || (Parser.Lines = {})); 34 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 35 | })(LdrawVisualizer || (LdrawVisualizer = {})); 36 | //# sourceMappingURL=CommentLine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/CommentLine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"CommentLine.js","sourceRoot":"","sources":["../../../../scripts/parser/lines/CommentLine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.CommentLine","LdrawVisualizer.Parser.Lines.CommentLine.constructor","LdrawVisualizer.Parser.Lines.CommentLine.IsValid","LdrawVisualizer.Parser.Lines.CommentLine.Parse"],"mappings":"AAAA,uDAAuD;AACvD,wCAAwC;AACxC,2CAA2C;AAC3C,yCAAyC;AACzC,uCAAuC;;;;;;;AAEvC,IAAO,eAAe,CAkBrB;AAlBD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAkB5BA;IAlBsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAkBlCA;QAlB6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAAiCC,+BAAaA;gBAC7CA,qBAAYA,WAAmBA;oBAC9BC,kBAAMA,uBAAiBA,CAACA,OAAOA,CAACA,CAAAA;oBAEhCA,IAAIA,CAACA,WAAWA,GAAGA,WAAWA,CAACA;gBAChCA,CAACA;gBAIDD,6BAAOA,GAAPA;oBACCE,MAAMA,CAACA,IAAIA,CAACA;gBACbA,CAACA;gBAEMF,iBAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,MAAMA,CAACA,IAAIA,KAAKA,CAACA,WAAWA,CAACA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,OAAOA,CAACA,GAAGA,CAACA,GAAGA,CAACA,CAACA,CAACA,CAACA;gBACrEA,CAACA;gBACFH,kBAACA;YAADA,CAACA,AAhBDD,EAAiCA,mBAAaA,EAgB7CA;YAhBYA,iBAAWA,cAgBvBA,CAAAA;QACFA,CAACA,EAlB6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAkBlCA;IAADA,CAACA,EAlBsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAkB5BA;AAADA,CAACA,EAlBM,eAAe,KAAf,eAAe,QAkBrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/LdrawFileLine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | var LdrawVisualizer; 6 | (function (LdrawVisualizer) { 7 | var Parser; 8 | (function (Parser) { 9 | var Lines; 10 | (function (Lines) { 11 | var LdrawFileLine = (function () { 12 | function LdrawFileLine(lineType) { 13 | this.LineType = lineType; 14 | } 15 | LdrawFileLine.prototype.IsValid = function () { 16 | throw 'This method is abstract and should be overriden in a derived class - it should not be called directly'; 17 | }; 18 | LdrawFileLine.Parse = function (line, splitLine, lineNumber) { 19 | throw 'This method is abstract and should be overriden in a derived class - it should not be called directly'; 20 | }; 21 | return LdrawFileLine; 22 | })(); 23 | Lines.LdrawFileLine = LdrawFileLine; 24 | })(Lines = Parser.Lines || (Parser.Lines = {})); 25 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 26 | })(LdrawVisualizer || (LdrawVisualizer = {})); 27 | //# sourceMappingURL=LdrawFileLine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/LdrawFileLine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"LdrawFileLine.js","sourceRoot":"","sources":["../../../../scripts/parser/lines/LdrawFileLine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.LdrawFileLine","LdrawVisualizer.Parser.Lines.LdrawFileLine.constructor","LdrawVisualizer.Parser.Lines.LdrawFileLine.IsValid","LdrawVisualizer.Parser.Lines.LdrawFileLine.Parse"],"mappings":"AAAA,uDAAuD;AACvD,wCAAwC;AACxC,yCAAyC;AACzC,uCAAuC;AAEvC,IAAO,eAAe,CAgBrB;AAhBD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAgB5BA;IAhBsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAgBlCA;QAhB6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBACCC,uBAAYA,QAA2BA;oBACtCC,IAAIA,CAACA,QAAQA,GAAGA,QAAQA,CAACA;gBAC1BA,CAACA;gBAIDD,+BAAOA,GAAPA;oBACCE,MAAMA,uGAAuGA,CAACA;gBAC/GA,CAACA;gBAEMF,mBAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,MAAMA,uGAAuGA,CAACA;gBAC/GA,CAACA;gBACFH,oBAACA;YAADA,CAACA,AAdDD,IAcCA;YAdYA,mBAAaA,gBAczBA,CAAAA;QACFA,CAACA,EAhB6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAgBlCA;IAADA,CAACA,EAhBsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAgB5BA;AAADA,CAACA,EAhBM,eAAe,KAAf,eAAe,QAgBrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/LineLine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | var __extends = this.__extends || function (d, b) { 7 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 8 | function __() { this.constructor = d; } 9 | __.prototype = b.prototype; 10 | d.prototype = new __(); 11 | }; 12 | var LdrawVisualizer; 13 | (function (LdrawVisualizer) { 14 | var Parser; 15 | (function (Parser) { 16 | var Lines; 17 | (function (Lines) { 18 | var LineLine = (function (_super) { 19 | __extends(LineLine, _super); 20 | function LineLine(color, point1, point2) { 21 | _super.call(this, Lines.LdrawFileLineType.Line); 22 | this.Point1 = point1; 23 | this.Point2 = point2; 24 | } 25 | LineLine.prototype.IsValid = function () { 26 | return this.Point1.IsValid() 27 | && this.Point2.IsValid(); 28 | }; 29 | LineLine.Parse = function (line, splitLine, lineNumber) { 30 | var point1Coords = new Parser.Coordinates(parseFloat(splitLine[2]), parseFloat(splitLine[3]), parseFloat(splitLine[4])), point2Coords = new Parser.Coordinates(parseFloat(splitLine[5]), parseFloat(splitLine[6]), parseFloat(splitLine[7])), lineLine = new Lines.LineLine(parseInt(splitLine[1], 10), point1Coords, point2Coords); 31 | if (!lineLine.IsValid()) { 32 | throw 'Unable to parse line line: Invalid line arguments on line ' + lineNumber; 33 | } 34 | return lineLine; 35 | }; 36 | return LineLine; 37 | })(Lines.LdrawFileLine); 38 | Lines.LineLine = LineLine; 39 | })(Lines = Parser.Lines || (Parser.Lines = {})); 40 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 41 | })(LdrawVisualizer || (LdrawVisualizer = {})); 42 | //# sourceMappingURL=LineLine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/LineLine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"LineLine.js","sourceRoot":"","sources":["../../../../scripts/parser/lines/LineLine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.LineLine","LdrawVisualizer.Parser.Lines.LineLine.constructor","LdrawVisualizer.Parser.Lines.LineLine.IsValid","LdrawVisualizer.Parser.Lines.LineLine.Parse"],"mappings":"AAAA,uDAAuD;AACvD,yCAAyC;AACzC,2CAA2C;AAC3C,0CAA0C;AAC1C,uCAAuC;;;;;;;AAEvC,IAAO,eAAe,CA6BrB;AA7BD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CA6B5BA;IA7BsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CA6BlCA;QA7B6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAA8BC,4BAAaA;gBAC1CA,kBAAYA,KAAaA,EAAEA,MAAmBA,EAAEA,MAAmBA;oBAClEC,kBAAMA,uBAAiBA,CAACA,IAAIA,CAACA,CAACA;oBAE9BA,IAAIA,CAACA,MAAMA,GAAGA,MAAMA,CAACA;oBACrBA,IAAIA,CAACA,MAAMA,GAAGA,MAAMA,CAACA;gBACtBA,CAACA;gBAKDD,0BAAOA,GAAPA;oBACCE,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,OAAOA,EAAEA;2BACxBA,IAAIA,CAACA,MAAMA,CAACA,OAAOA,EAAEA,CAACA;gBAC3BA,CAACA;gBAEMF,cAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,IAAIA,YAAYA,GAAGA,IAAIA,kBAAWA,CAACA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA,EAC/GA,YAAYA,GAAGA,IAAIA,kBAAWA,CAACA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA,EAC5GA,QAAQA,GAAGA,IAAIA,KAAKA,CAACA,QAAQA,CAACA,QAAQA,CAACA,SAASA,CAACA,CAACA,CAACA,EAAEA,EAAEA,CAACA,EAAEA,YAAYA,EAAEA,YAAYA,CAACA,CAACA;oBAEvFA,EAAEA,CAACA,CAACA,CAACA,QAAQA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA;wBACzBA,MAAMA,4DAA4DA,GAAGA,UAAUA,CAACA;oBACjFA,CAACA;oBAEDA,MAAMA,CAACA,QAAQA,CAACA;gBACjBA,CAACA;gBACFH,eAACA;YAADA,CAACA,AA3BDD,EAA8BA,mBAAaA,EA2B1CA;YA3BYA,cAAQA,WA2BpBA,CAAAA;QACFA,CAACA,EA7B6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QA6BlCA;IAADA,CAACA,EA7BsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QA6B5BA;AAADA,CAACA,EA7BM,eAAe,KAAf,eAAe,QA6BrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/LineTypes.js: -------------------------------------------------------------------------------- 1 | var LdrawVisualizer; 2 | (function (LdrawVisualizer) { 3 | var Parser; 4 | (function (Parser) { 5 | var Lines; 6 | (function (Lines) { 7 | (function (LdrawFileLineType) { 8 | LdrawFileLineType[LdrawFileLineType["Comment"] = 0] = "Comment"; 9 | LdrawFileLineType[LdrawFileLineType["SubFileReference"] = 1] = "SubFileReference"; 10 | LdrawFileLineType[LdrawFileLineType["Line"] = 2] = "Line"; 11 | LdrawFileLineType[LdrawFileLineType["Triangle"] = 3] = "Triangle"; 12 | LdrawFileLineType[LdrawFileLineType["Quadrilateral"] = 4] = "Quadrilateral"; 13 | LdrawFileLineType[LdrawFileLineType["OptionalLine"] = 5] = "OptionalLine"; 14 | LdrawFileLineType[LdrawFileLineType["Colour"] = 6] = "Colour"; 15 | LdrawFileLineType[LdrawFileLineType["Step"] = 7] = "Step"; 16 | LdrawFileLineType[LdrawFileLineType["Name"] = 8] = "Name"; 17 | LdrawFileLineType[LdrawFileLineType["Author"] = 9] = "Author"; 18 | LdrawFileLineType[LdrawFileLineType["RotationCenter"] = 10] = "RotationCenter"; 19 | LdrawFileLineType[LdrawFileLineType["RotationConfig"] = 11] = "RotationConfig"; 20 | LdrawFileLineType[LdrawFileLineType["RotationStep"] = 12] = "RotationStep"; 21 | LdrawFileLineType[LdrawFileLineType["LDrawOrg"] = 13] = "LDrawOrg"; 22 | LdrawFileLineType[LdrawFileLineType["File"] = 14] = "File"; 23 | LdrawFileLineType[LdrawFileLineType["NoFile"] = 15] = "NoFile"; 24 | })(Lines.LdrawFileLineType || (Lines.LdrawFileLineType = {})); 25 | var LdrawFileLineType = Lines.LdrawFileLineType; 26 | })(Lines = Parser.Lines || (Parser.Lines = {})); 27 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 28 | })(LdrawVisualizer || (LdrawVisualizer = {})); 29 | //# sourceMappingURL=LineTypes.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/LineTypes.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"LineTypes.js","sourceRoot":"","sources":["../../../../scripts/parser/lines/LineTypes.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.LdrawFileLineType"],"mappings":"AAAA,IAAO,eAAe,CAmBrB;AAnBD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAmB5BA;IAnBsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAmBlCA;QAnB6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC,WAAYA,iBAAiBA;gBAC5BC,+DAAWA,CAAAA;gBACXA,iFAAoBA,CAAAA;gBACpBA,yDAAQA,CAAAA;gBACRA,iEAAYA,CAAAA;gBACZA,2EAAiBA,CAAAA;gBACjBA,yEAAgBA,CAAAA;gBAChBA,6DAAUA,CAAAA;gBACVA,yDAAQA,CAAAA;gBACRA,yDAAQA,CAAAA;gBACRA,6DAAUA,CAAAA;gBACVA,8EAAmBA,CAAAA;gBACnBA,8EAAmBA,CAAAA;gBACnBA,0EAAiBA,CAAAA;gBACjBA,kEAAaA,CAAAA;gBACbA,0DAASA,CAAAA;gBACTA,8DAAWA,CAAAA;YACZA,CAACA,EAjBWD,uBAAiBA,KAAjBA,uBAAiBA,QAiB5BA;YAjBDA,IAAYA,iBAAiBA,GAAjBA,uBAiBXA,CAAAA;QACFA,CAACA,EAnB6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAmBlCA;IAADA,CAACA,EAnBsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAmB5BA;AAADA,CAACA,EAnBM,eAAe,KAAf,eAAe,QAmBrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/OptionalLineLine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | /// 7 | var __extends = this.__extends || function (d, b) { 8 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 9 | function __() { this.constructor = d; } 10 | __.prototype = b.prototype; 11 | d.prototype = new __(); 12 | }; 13 | var LdrawVisualizer; 14 | (function (LdrawVisualizer) { 15 | var Parser; 16 | (function (Parser) { 17 | var Lines; 18 | (function (Lines) { 19 | var OptionalLineLine = (function (_super) { 20 | __extends(OptionalLineLine, _super); 21 | function OptionalLineLine(color, point1, point2, controlPoint1, controlPoint2) { 22 | _super.call(this, Lines.LdrawFileLineType.OptionalLine); 23 | this.Color = color; 24 | this.Point1 = point1; 25 | this.Point2 = point2; 26 | this.ControlPoint1 = controlPoint1; 27 | this.ControlPoint2 = controlPoint2; 28 | } 29 | OptionalLineLine.prototype.IsValid = function () { 30 | return LdrawVisualizer.Utility.isValidColorCode(this.Color) 31 | && this.Point1.IsValid() 32 | && this.Point2.IsValid() 33 | && this.ControlPoint1.IsValid() 34 | && this.ControlPoint2.IsValid(); 35 | }; 36 | OptionalLineLine.Parse = function (line, splitLine, lineNumber) { 37 | var point1Coords = new Parser.Coordinates(parseFloat(splitLine[2]), parseFloat(splitLine[3]), parseFloat(splitLine[4])), point2Coords = new Parser.Coordinates(parseFloat(splitLine[5]), parseFloat(splitLine[6]), parseFloat(splitLine[7])), controlPoint1Coords = new Parser.Coordinates(parseFloat(splitLine[8]), parseFloat(splitLine[9]), parseFloat(splitLine[10])), controlPoint2Coords = new Parser.Coordinates(parseFloat(splitLine[11]), parseFloat(splitLine[12]), parseFloat(splitLine[13])), optLine = new Lines.OptionalLineLine(parseInt(splitLine[1], 10), point1Coords, point2Coords, controlPoint1Coords, controlPoint2Coords); 38 | if (!optLine.IsValid()) { 39 | throw 'Unable to parse optional line: Invalid line arguments on line ' + lineNumber; 40 | } 41 | return optLine; 42 | }; 43 | return OptionalLineLine; 44 | })(Lines.LdrawFileLine); 45 | Lines.OptionalLineLine = OptionalLineLine; 46 | })(Lines = Parser.Lines || (Parser.Lines = {})); 47 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 48 | })(LdrawVisualizer || (LdrawVisualizer = {})); 49 | //# sourceMappingURL=OptionalLineLine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/OptionalLineLine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"OptionalLineLine.js","sourceRoot":"","sources":["../../../../scripts/parser/lines/OptionalLineLine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.OptionalLineLine","LdrawVisualizer.Parser.Lines.OptionalLineLine.constructor","LdrawVisualizer.Parser.Lines.OptionalLineLine.IsValid","LdrawVisualizer.Parser.Lines.OptionalLineLine.Parse"],"mappings":"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"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/QuadrilateralLine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | var __extends = this.__extends || function (d, b) { 7 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 8 | function __() { this.constructor = d; } 9 | __.prototype = b.prototype; 10 | d.prototype = new __(); 11 | }; 12 | var LdrawVisualizer; 13 | (function (LdrawVisualizer) { 14 | var Parser; 15 | (function (Parser) { 16 | var Lines; 17 | (function (Lines) { 18 | var QuadrilateralLine = (function (_super) { 19 | __extends(QuadrilateralLine, _super); 20 | function QuadrilateralLine(color, point1, point2, point3, point4) { 21 | _super.call(this, Lines.LdrawFileLineType.Quadrilateral); 22 | this.Color = color; 23 | this.Point1 = point1; 24 | this.Point2 = point2; 25 | this.Point3 = point3; 26 | this.Point4 = point4; 27 | } 28 | QuadrilateralLine.prototype.IsValid = function () { 29 | return LdrawVisualizer.Utility.isValidColorCode(this.Color) 30 | && this.Point1.IsValid() 31 | && this.Point2.IsValid() 32 | && this.Point3.IsValid() 33 | && this.Point4.IsValid(); 34 | }; 35 | QuadrilateralLine.Parse = function (line, splitLine, lineNumber) { 36 | var point1Coords = new Parser.Coordinates(parseFloat(splitLine[2]), parseFloat(splitLine[3]), parseFloat(splitLine[4])), point2Coords = new Parser.Coordinates(parseFloat(splitLine[5]), parseFloat(splitLine[6]), parseFloat(splitLine[7])), point3Coords = new Parser.Coordinates(parseFloat(splitLine[8]), parseFloat(splitLine[9]), parseFloat(splitLine[10])), point4Coords = new Parser.Coordinates(parseFloat(splitLine[11]), parseFloat(splitLine[12]), parseFloat(splitLine[13])), quadLine = new Lines.QuadrilateralLine(parseInt(splitLine[1], 10), point1Coords, point2Coords, point3Coords, point4Coords); 37 | if (!quadLine.IsValid()) { 38 | throw 'Unable to parse quadrilateral line: Invalid line arguments on line ' + lineNumber; 39 | } 40 | return quadLine; 41 | }; 42 | return QuadrilateralLine; 43 | })(Lines.LdrawFileLine); 44 | Lines.QuadrilateralLine = QuadrilateralLine; 45 | })(Lines = Parser.Lines || (Parser.Lines = {})); 46 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 47 | })(LdrawVisualizer || (LdrawVisualizer = {})); 48 | //# sourceMappingURL=QuadrilateralLine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/QuadrilateralLine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"QuadrilateralLine.js","sourceRoot":"","sources":["../../../../scripts/parser/lines/QuadrilateralLine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.QuadrilateralLine","LdrawVisualizer.Parser.Lines.QuadrilateralLine.constructor","LdrawVisualizer.Parser.Lines.QuadrilateralLine.IsValid","LdrawVisualizer.Parser.Lines.QuadrilateralLine.Parse"],"mappings":"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"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/SubFileReferenceLine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | var __extends = this.__extends || function (d, b) { 7 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 8 | function __() { this.constructor = d; } 9 | __.prototype = b.prototype; 10 | d.prototype = new __(); 11 | }; 12 | var LdrawVisualizer; 13 | (function (LdrawVisualizer) { 14 | var Parser; 15 | (function (Parser) { 16 | var Lines; 17 | (function (Lines) { 18 | var SubFileReferenceLine = (function (_super) { 19 | __extends(SubFileReferenceLine, _super); 20 | function SubFileReferenceLine(color, coordinates, transformMatrix, filename) { 21 | _super.call(this, Lines.LdrawFileLineType.SubFileReference); 22 | this.Color = color; 23 | this.Coordinates = coordinates; 24 | this.TransformMatrix = transformMatrix; 25 | this.Filename = filename; 26 | } 27 | SubFileReferenceLine.prototype.IsValid = function () { 28 | var transformMatrixIsValid = this.TransformMatrix && this.TransformMatrix.length === 3; 29 | if (transformMatrixIsValid) { 30 | outer: for (var i = 0; i < 3; i++) { 31 | if (LdrawVisualizer.Utility.isArray(this.TransformMatrix[i]) && this.TransformMatrix[i].length === 3) { 32 | for (var j = 0; j < 3; j++) { 33 | if (!LdrawVisualizer.Utility.isNumber(this.TransformMatrix[i][j])) { 34 | transformMatrixIsValid = false; 35 | break outer; 36 | } 37 | } 38 | } 39 | else { 40 | transformMatrixIsValid = false; 41 | break; 42 | } 43 | } 44 | } 45 | return (LdrawVisualizer.Utility.isValidColorCode(this.Color) 46 | && this.Coordinates.IsValid() 47 | && transformMatrixIsValid 48 | && LdrawVisualizer.Utility.hasAtLeastOneNonWhitespaceCharacter(this.Filename)); 49 | }; 50 | SubFileReferenceLine.Parse = function (line, splitLine, lineNumber) { 51 | var coords = new Parser.Coordinates(parseFloat(splitLine[2]), parseFloat(splitLine[3]), parseFloat(splitLine[4])), matrix = [ 52 | [parseFloat(splitLine[5]), parseFloat(splitLine[6]), parseFloat(splitLine[7])], 53 | [parseFloat(splitLine[8]), parseFloat(splitLine[9]), parseFloat(splitLine[10])], 54 | [parseFloat(splitLine[11]), parseFloat(splitLine[12]), parseFloat(splitLine[13])] 55 | ], refLine = new Lines.SubFileReferenceLine(parseInt(splitLine[1], 10), coords, matrix, line.substring(line.indexOf(splitLine[14])).trim()); 56 | if (!refLine.IsValid()) { 57 | throw 'Unable to parse subfile reference line: Invalid line arguments on line ' + lineNumber; 58 | } 59 | return refLine; 60 | }; 61 | return SubFileReferenceLine; 62 | })(Lines.LdrawFileLine); 63 | Lines.SubFileReferenceLine = SubFileReferenceLine; 64 | })(Lines = Parser.Lines || (Parser.Lines = {})); 65 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 66 | })(LdrawVisualizer || (LdrawVisualizer = {})); 67 | //# sourceMappingURL=SubFileReferenceLine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/SubFileReferenceLine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"SubFileReferenceLine.js","sourceRoot":"","sources":["../../../../scripts/parser/lines/SubFileReferenceLine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.SubFileReferenceLine","LdrawVisualizer.Parser.Lines.SubFileReferenceLine.constructor","LdrawVisualizer.Parser.Lines.SubFileReferenceLine.IsValid","LdrawVisualizer.Parser.Lines.SubFileReferenceLine.Parse"],"mappings":"AAAA,uDAAuD;AACvD,yCAAyC;AACzC,2CAA2C;AAC3C,0CAA0C;AAC1C,uCAAuC;;;;;;;AAEvC,IAAO,eAAe,CAyDrB;AAzDD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAyD5BA;IAzDsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAyDlCA;QAzD6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAA0CC,wCAAaA;gBACtDA,8BAAYA,KAAaA,EAAEA,WAAwBA,EAAEA,eAA2BA,EAAEA,QAAgBA;oBACjGC,kBAAMA,uBAAiBA,CAACA,gBAAgBA,CAACA,CAACA;oBAE1CA,IAAIA,CAACA,KAAKA,GAAGA,KAAKA,CAACA;oBACnBA,IAAIA,CAACA,WAAWA,GAAGA,WAAWA,CAACA;oBAC/BA,IAAIA,CAACA,eAAeA,GAAGA,eAAeA,CAACA;oBACvCA,IAAIA,CAACA,QAAQA,GAAGA,QAAQA,CAACA;gBAC1BA,CAACA;gBAQDD,sCAAOA,GAAPA;oBACCE,IAAIA,sBAAsBA,GAAGA,IAAIA,CAACA,eAAeA,IAAIA,IAAIA,CAACA,eAAeA,CAACA,MAAMA,KAAKA,CAACA,CAAAA;oBACtFA,EAAEA,CAACA,CAACA,sBAAsBA,CAACA,CAACA,CAACA;wBAC5BA,KAAKA,EAAEA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;4BACnCA,EAAEA,CAACA,CAACA,uBAAOA,CAACA,OAAOA,CAACA,IAAIA,CAACA,eAAeA,CAACA,CAACA,CAACA,CAACA,IAAIA,IAAIA,CAACA,eAAeA,CAACA,CAACA,CAACA,CAACA,MAAMA,KAAKA,CAACA,CAACA,CAACA,CAACA;gCACtFA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;oCAC5BA,EAAEA,CAACA,CAACA,CAACA,uBAAOA,CAACA,QAAQA,CAACA,IAAIA,CAACA,eAAeA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;wCACnDA,sBAAsBA,GAAGA,KAAKA,CAACA;wCAC/BA,KAAKA,CAACA,KAAKA,CAACA;oCACbA,CAACA;gCACFA,CAACA;4BACFA,CAACA;4BAACA,IAAIA,CAACA,CAACA;gCACPA,sBAAsBA,GAAGA,KAAKA,CAACA;gCAC/BA,KAAKA,CAACA;4BACPA,CAACA;wBACFA,CAACA;oBACFA,CAACA;oBAEDA,MAAMA,CAACA,CAACA,uBAAOA,CAACA,gBAAgBA,CAACA,IAAIA,CAACA,KAAKA,CAACA;2BACxCA,IAAIA,CAACA,WAAWA,CAACA,OAAOA,EAAEA;2BAC1BA,sBAAsBA;2BACtBA,uBAAOA,CAACA,mCAAmCA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA,CAACA;gBACjEA,CAACA;gBAEMF,0BAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,IAAIA,MAAMA,GAAGA,IAAIA,kBAAWA,CAACA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA,EACzGA,MAAMA,GAAGA;wBACRA,CAACA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA;wBAC9EA,CAACA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA,CAACA;wBAC/EA,CAACA,UAAUA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA,CAACA;qBACjFA,EACDA,OAAOA,GAAGA,IAAIA,KAAKA,CAACA,oBAAoBA,CAACA,QAAQA,CAACA,SAASA,CAACA,CAACA,CAACA,EAAEA,EAAEA,CAACA,EAAEA,MAAMA,EAAEA,MAAMA,EAAEA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,OAAOA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA,CAACA,CAACA,IAAIA,EAAEA,CAACA,CAACA;oBAE1IA,EAAEA,CAACA,CAACA,CAACA,OAAOA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA;wBACxBA,MAAMA,yEAAyEA,GAAGA,UAAUA,CAACA;oBAC9FA,CAACA;oBAEDA,MAAMA,CAACA,OAAOA,CAACA;gBAChBA,CAACA;gBACFH,2BAACA;YAADA,CAACA,AAvDDD,EAA0CA,mBAAaA,EAuDtDA;YAvDYA,0BAAoBA,uBAuDhCA,CAAAA;QACFA,CAACA,EAzD6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAyDlCA;IAADA,CAACA,EAzDsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAyD5BA;AAADA,CAACA,EAzDM,eAAe,KAAf,eAAe,QAyDrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/TriangleLine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | var __extends = this.__extends || function (d, b) { 7 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 8 | function __() { this.constructor = d; } 9 | __.prototype = b.prototype; 10 | d.prototype = new __(); 11 | }; 12 | var LdrawVisualizer; 13 | (function (LdrawVisualizer) { 14 | var Parser; 15 | (function (Parser) { 16 | var Lines; 17 | (function (Lines) { 18 | var TriangleLine = (function (_super) { 19 | __extends(TriangleLine, _super); 20 | function TriangleLine(color, point1, point2, point3) { 21 | _super.call(this, Lines.LdrawFileLineType.Triangle); 22 | this.Color = color; 23 | this.Point1 = point1; 24 | this.Point2 = point2; 25 | this.Point3 = point3; 26 | } 27 | TriangleLine.prototype.IsValid = function () { 28 | return LdrawVisualizer.Utility.isValidColorCode(this.Color) 29 | && this.Point1.IsValid() 30 | && this.Point2.IsValid() 31 | && this.Point3.IsValid(); 32 | }; 33 | TriangleLine.Parse = function (line, splitLine, lineNumber) { 34 | var point1Coords = new Parser.Coordinates(parseFloat(splitLine[2]), parseFloat(splitLine[3]), parseFloat(splitLine[4])), point2Coords = new Parser.Coordinates(parseFloat(splitLine[5]), parseFloat(splitLine[6]), parseFloat(splitLine[7])), point3Coords = new Parser.Coordinates(parseFloat(splitLine[8]), parseFloat(splitLine[9]), parseFloat(splitLine[10])), triangleLine = new Lines.TriangleLine(parseInt(splitLine[1], 10), point1Coords, point2Coords, point3Coords); 35 | if (!triangleLine.IsValid()) { 36 | throw 'Unable to parse triangle line: Invalid line arguments on line ' + lineNumber; 37 | } 38 | return triangleLine; 39 | }; 40 | return TriangleLine; 41 | })(Lines.LdrawFileLine); 42 | Lines.TriangleLine = TriangleLine; 43 | })(Lines = Parser.Lines || (Parser.Lines = {})); 44 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 45 | })(LdrawVisualizer || (LdrawVisualizer = {})); 46 | //# sourceMappingURL=TriangleLine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/TriangleLine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"TriangleLine.js","sourceRoot":"","sources":["../../../../scripts/parser/lines/TriangleLine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.TriangleLine","LdrawVisualizer.Parser.Lines.TriangleLine.constructor","LdrawVisualizer.Parser.Lines.TriangleLine.IsValid","LdrawVisualizer.Parser.Lines.TriangleLine.Parse"],"mappings":"AAAA,uDAAuD;AACvD,yCAAyC;AACzC,2CAA2C;AAC3C,0CAA0C;AAC1C,uCAAuC;;;;;;;AAEvC,IAAO,eAAe,CAoCrB;AApCD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAoC5BA;IApCsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAoClCA;QApC6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAAkCC,gCAAaA;gBAC9CA,sBAAYA,KAAaA,EAAEA,MAAmBA,EAAEA,MAAmBA,EAAEA,MAAmBA;oBACvFC,kBAAMA,uBAAiBA,CAACA,QAAQA,CAACA,CAACA;oBAElCA,IAAIA,CAACA,KAAKA,GAAGA,KAAKA,CAACA;oBACnBA,IAAIA,CAACA,MAAMA,GAAGA,MAAMA,CAACA;oBACrBA,IAAIA,CAACA,MAAMA,GAAGA,MAAMA,CAACA;oBACrBA,IAAIA,CAACA,MAAMA,GAAGA,MAAMA,CAACA;gBACtBA,CAACA;gBAODD,8BAAOA,GAAPA;oBACCE,MAAMA,CAACA,uBAAOA,CAACA,gBAAgBA,CAACA,IAAIA,CAACA,KAAKA,CAACA;2BACvCA,IAAIA,CAACA,MAAMA,CAACA,OAAOA,EAAEA;2BACrBA,IAAIA,CAACA,MAAMA,CAACA,OAAOA,EAAEA;2BACrBA,IAAIA,CAACA,MAAMA,CAACA,OAAOA,EAAEA,CAACA;gBAC3BA,CAACA;gBAEMF,kBAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,IAAIA,YAAYA,GAAGA,IAAIA,kBAAWA,CAACA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA,EAC/GA,YAAYA,GAAGA,IAAIA,kBAAWA,CAACA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA,EAC5GA,YAAYA,GAAGA,IAAIA,kBAAWA,CAACA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,SAASA,CAACA,EAAEA,CAACA,CAACA,CAACA,EAC7GA,YAAYA,GAAGA,IAAIA,KAAKA,CAACA,YAAYA,CAACA,QAAQA,CAACA,SAASA,CAACA,CAACA,CAACA,EAAEA,EAAEA,CAACA,EAAEA,YAAYA,EAAEA,YAAYA,EAAEA,YAAYA,CAACA,CAACA;oBAE7GA,EAAEA,CAACA,CAACA,CAACA,YAAYA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA;wBAC7BA,MAAMA,gEAAgEA,GAAGA,UAAUA,CAACA;oBACrFA,CAACA;oBAEDA,MAAMA,CAACA,YAAYA,CAACA;gBACrBA,CAACA;gBACFH,mBAACA;YAADA,CAACA,AAlCDD,EAAkCA,mBAAaA,EAkC9CA;YAlCYA,kBAAYA,eAkCxBA,CAAAA;QACFA,CAACA,EApC6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAoClCA;IAADA,CAACA,EApCsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAoC5BA;AAADA,CAACA,EApCM,eAAe,KAAf,eAAe,QAoCrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/AuthorMETALine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var __extends = this.__extends || function (d, b) { 4 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 5 | function __() { this.constructor = d; } 6 | __.prototype = b.prototype; 7 | d.prototype = new __(); 8 | }; 9 | var LdrawVisualizer; 10 | (function (LdrawVisualizer) { 11 | var Parser; 12 | (function (Parser) { 13 | var Lines; 14 | (function (Lines) { 15 | var AuthorMETALine = (function (_super) { 16 | __extends(AuthorMETALine, _super); 17 | function AuthorMETALine(author) { 18 | _super.call(this, Lines.LdrawFileLineType.Author); 19 | this.Author = author; 20 | } 21 | AuthorMETALine.prototype.IsValid = function () { 22 | return LdrawVisualizer.Utility.hasAtLeastOneNonWhitespaceCharacter(this.Author); 23 | }; 24 | AuthorMETALine.Parse = function (line, splitLine, lineNumber) { 25 | var authorLine = new AuthorMETALine(splitLine[2]); 26 | if (!authorLine.IsValid()) { 27 | throw 'Unable to parse author META line: Invalid line arguments on line ' + lineNumber; 28 | } 29 | return authorLine; 30 | }; 31 | return AuthorMETALine; 32 | })(Lines.LdrawFileLine); 33 | Lines.AuthorMETALine = AuthorMETALine; 34 | })(Lines = Parser.Lines || (Parser.Lines = {})); 35 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 36 | })(LdrawVisualizer || (LdrawVisualizer = {})); 37 | //# sourceMappingURL=AuthorMETALine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/AuthorMETALine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"AuthorMETALine.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/AuthorMETALine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.AuthorMETALine","LdrawVisualizer.Parser.Lines.AuthorMETALine.constructor","LdrawVisualizer.Parser.Lines.AuthorMETALine.IsValid","LdrawVisualizer.Parser.Lines.AuthorMETALine.Parse"],"mappings":"AAAA,0DAA0D;AAC1D,wCAAwC;;;;;;;AAExC,IAAO,eAAe,CAuBrB;AAvBD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAuB5BA;IAvBsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAuBlCA;QAvB6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAAoCC,kCAAaA;gBAChDA,wBAAYA,MAAcA;oBACzBC,kBAAMA,uBAAiBA,CAACA,MAAMA,CAACA,CAACA;oBAChCA,IAAIA,CAACA,MAAMA,GAAGA,MAAMA,CAACA;gBACtBA,CAACA;gBAIDD,gCAAOA,GAAPA;oBACCE,MAAMA,CAACA,uBAAOA,CAACA,mCAAmCA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA;gBACjEA,CAACA;gBAEMF,oBAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,IAAIA,UAAUA,GAAGA,IAAIA,cAAcA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA;oBAElDA,EAAEA,CAACA,CAACA,CAACA,UAAUA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA;wBAC3BA,MAAMA,mEAAmEA,GAAGA,UAAUA,CAACA;oBACxFA,CAACA;oBAEDA,MAAMA,CAACA,UAAUA,CAACA;gBACnBA,CAACA;gBACFH,qBAACA;YAADA,CAACA,AArBDD,EAAoCA,mBAAaA,EAqBhDA;YArBYA,oBAAcA,iBAqB1BA,CAAAA;QACFA,CAACA,EAvB6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAuBlCA;IAADA,CAACA,EAvBsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAuB5BA;AAADA,CAACA,EAvBM,eAAe,KAAf,eAAe,QAuBrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/FileMETALine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var __extends = this.__extends || function (d, b) { 4 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 5 | function __() { this.constructor = d; } 6 | __.prototype = b.prototype; 7 | d.prototype = new __(); 8 | }; 9 | var LdrawVisualizer; 10 | (function (LdrawVisualizer) { 11 | var Parser; 12 | (function (Parser) { 13 | var Lines; 14 | (function (Lines) { 15 | var FileMETALine = (function (_super) { 16 | __extends(FileMETALine, _super); 17 | function FileMETALine(filename) { 18 | _super.call(this, Lines.LdrawFileLineType.File); 19 | this.Filename = filename; 20 | } 21 | FileMETALine.prototype.IsValid = function () { 22 | return LdrawVisualizer.Utility.hasAtLeastOneNonWhitespaceCharacter(this.Filename); 23 | }; 24 | FileMETALine.Parse = function (line, splitLine, lineNumber) { 25 | var fileLine = new FileMETALine(line.substring(line.indexOf(splitLine[2]))); 26 | if (!fileLine.IsValid()) { 27 | throw 'Unable to parse file META line: Invalid line arguments on line ' + lineNumber; 28 | } 29 | return fileLine; 30 | }; 31 | return FileMETALine; 32 | })(Lines.LdrawFileLine); 33 | Lines.FileMETALine = FileMETALine; 34 | })(Lines = Parser.Lines || (Parser.Lines = {})); 35 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 36 | })(LdrawVisualizer || (LdrawVisualizer = {})); 37 | //# sourceMappingURL=FileMETALine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/FileMETALine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"FileMETALine.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/FileMETALine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.FileMETALine","LdrawVisualizer.Parser.Lines.FileMETALine.constructor","LdrawVisualizer.Parser.Lines.FileMETALine.IsValid","LdrawVisualizer.Parser.Lines.FileMETALine.Parse"],"mappings":"AAAA,0DAA0D;AAC1D,wCAAwC;;;;;;;AAExC,IAAO,eAAe,CAwBrB;AAxBD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAwB5BA;IAxBsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAwBlCA;QAxB6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAAkCC,gCAAaA;gBAC9CA,sBAAYA,QAAgBA;oBAC3BC,kBAAMA,uBAAiBA,CAACA,IAAIA,CAACA,CAACA;oBAE9BA,IAAIA,CAACA,QAAQA,GAAGA,QAAQA,CAACA;gBAC1BA,CAACA;gBAIDD,8BAAOA,GAAPA;oBACCE,MAAMA,CAACA,uBAAOA,CAACA,mCAAmCA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA;gBACnEA,CAACA;gBAEMF,kBAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,IAAIA,QAAQA,GAAGA,IAAIA,YAAYA,CAACA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,OAAOA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;oBAE5EA,EAAEA,CAACA,CAACA,CAACA,QAAQA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA;wBACzBA,MAAMA,iEAAiEA,GAAGA,UAAUA,CAACA;oBACtFA,CAACA;oBAEDA,MAAMA,CAACA,QAAQA,CAACA;gBACjBA,CAACA;gBACFH,mBAACA;YAADA,CAACA,AAtBDD,EAAkCA,mBAAaA,EAsB9CA;YAtBYA,kBAAYA,eAsBxBA,CAAAA;QACFA,CAACA,EAxB6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAwBlCA;IAADA,CAACA,EAxBsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAwB5BA;AAADA,CAACA,EAxBM,eAAe,KAAf,eAAe,QAwBrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/LdrawOrgMETALine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"LdrawOrgMETALine.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/LdrawOrgMETALine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.LdrawOrgMETALine","LdrawVisualizer.Parser.Lines.LdrawOrgMETALine.constructor","LdrawVisualizer.Parser.Lines.LdrawOrgMETALine.IsValid","LdrawVisualizer.Parser.Lines.LdrawOrgMETALine.Parse","LdrawVisualizer.Parser.Lines.LdrawOrgPartType"],"mappings":"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"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/METALine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | var __extends = this.__extends || function (d, b) { 5 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 6 | function __() { this.constructor = d; } 7 | __.prototype = b.prototype; 8 | d.prototype = new __(); 9 | }; 10 | var LdrawVisualizer; 11 | (function (LdrawVisualizer) { 12 | var Parser; 13 | (function (Parser) { 14 | var Lines; 15 | (function (Lines) { 16 | var METALine = (function (_super) { 17 | __extends(METALine, _super); 18 | function METALine(metaLineType) { 19 | _super.call(this, Lines.LdrawFileLineType.CommentOrMETA); 20 | this.METALineType = metaLineType; 21 | } 22 | // attempts to parse the line as a META line. If no matching META declaration is found, 23 | // this function returns null 24 | METALine.Parse = function (line, splitLine, lineNumber) { 25 | if (LdrawVisualizer.Utility.isNullOrUndefined(splitLine[1])) { 26 | return null; 27 | } 28 | var metaTag = splitLine[1].replace('!', '').toUpperCase().trim(); 29 | // test for a standard comment line 30 | if (/^\/\//.test(metaTag)) { 31 | return null; 32 | } 33 | if (metaTag === 'COLOUR') { 34 | return Lines.ColourMETALine.Parse(line, splitLine, lineNumber); 35 | } 36 | else if (metaTag === 'STEP') { 37 | return Lines.StepMETALine.Parse(line, splitLine, lineNumber); 38 | } 39 | else if (metaTag === 'ROTSTEP') { 40 | return Lines.RotationStepMETALine.Parse(line, splitLine, lineNumber); 41 | } 42 | else if (/^Name:?$/i.test(metaTag)) { 43 | return Lines.NameMETALine.Parse(line, splitLine, lineNumber); 44 | } 45 | else if (/^Author:?$/i.test(metaTag)) { 46 | return Lines.AuthorMETALine.Parse(line, splitLine, lineNumber); 47 | } 48 | else if (metaTag === 'ROTATION') { 49 | if (splitLine[2] && splitLine[2].toUpperCase().trim() === 'CENTER') { 50 | return Lines.RotationCenterMETALine.Parse(line, splitLine, lineNumber); 51 | } 52 | else if (splitLine[2] && splitLine[2].toUpperCase().trim() === 'CONFIG') { 53 | return Lines.RotationConfigMETALine.Parse(line, splitLine, lineNumber); 54 | } 55 | else { 56 | console.log('Unknown ROTATION META tag subtype on line ' + lineNumber); 57 | return null; 58 | } 59 | } 60 | else if (/!?LDRAW_ORG/.test(metaTag)) { 61 | return Lines.LdrawOrgMETALine.Parse(line, splitLine, lineNumber); 62 | } 63 | else { 64 | //console.log('Unknown or unimplemented META tag on line ' + lineNumber + ': "' + metaTag + '"'); 65 | return null; 66 | } 67 | }; 68 | return METALine; 69 | })(Lines.LdrawFileLine); 70 | Lines.METALine = METALine; 71 | })(Lines = Parser.Lines || (Parser.Lines = {})); 72 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 73 | })(LdrawVisualizer || (LdrawVisualizer = {})); 74 | //# sourceMappingURL=METALine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/METALine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"METALine.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/METALine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.METALine","LdrawVisualizer.Parser.Lines.METALine.constructor","LdrawVisualizer.Parser.Lines.METALine.Parse"],"mappings":"AAAA,0DAA0D;AAC1D,4CAA4C;AAC5C,wCAAwC;;;;;;;AAExC,IAAO,eAAe,CAkDrB;AAlDD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAkD5BA;IAlDsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAkDlCA;QAlD6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAA8BC,4BAAaA;gBAC1CA,kBAAYA,YAAmCA;oBAC9CC,kBAAMA,uBAAiBA,CAACA,aAAaA,CAACA,CAACA;oBACvCA,IAAIA,CAACA,YAAYA,GAAGA,YAAYA,CAACA;gBAClCA,CAACA;gBAIDD,wFAAwFA;gBACxFA,6BAA6BA;gBACtBA,cAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEE,EAAEA,CAACA,CAACA,uBAAOA,CAACA,iBAAiBA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;wBAC7CA,MAAMA,CAACA,IAAIA,CAACA;oBACbA,CAACA;oBAEDA,IAAIA,OAAOA,GAAGA,SAASA,CAACA,CAACA,CAACA,CAACA,OAAOA,CAACA,GAAGA,EAAEA,EAAEA,CAACA,CAACA,WAAWA,EAAEA,CAACA,IAAIA,EAAEA,CAACA;oBAEjEA,mCAAmCA;oBACnCA,EAAEA,CAACA,CAACA,OAAOA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA,CAACA,CAACA;wBAC3BA,MAAMA,CAACA,IAAIA,CAACA;oBACbA,CAACA;oBAEDA,EAAEA,CAACA,CAACA,OAAOA,KAAKA,QAAQA,CAACA,CAACA,CAACA;wBAC1BA,MAAMA,CAACA,oBAAcA,CAACA,KAAKA,CAACA,IAAIA,EAAEA,SAASA,EAAEA,UAAUA,CAACA,CAACA;oBAC1DA,CAACA;oBAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA,OAAOA,KAAKA,MAAMA,CAACA,CAACA,CAACA;wBAC/BA,MAAMA,CAACA,kBAAYA,CAACA,KAAKA,CAACA,IAAIA,EAAEA,SAASA,EAAEA,UAAUA,CAACA,CAACA;oBACxDA,CAACA;oBAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA,OAAOA,KAAKA,SAASA,CAACA,CAACA,CAACA;wBAClCA,MAAMA,CAACA,0BAAoBA,CAACA,KAAKA,CAACA,IAAIA,EAAEA,SAASA,EAAEA,UAAUA,CAACA,CAACA;oBAChEA,CAACA;oBAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA,WAAWA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA,CAACA,CAACA;wBACtCA,MAAMA,CAACA,kBAAYA,CAACA,KAAKA,CAACA,IAAIA,EAAEA,SAASA,EAAEA,UAAUA,CAACA,CAACA;oBACxDA,CAACA;oBAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA,aAAaA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA,CAACA,CAACA;wBACxCA,MAAMA,CAACA,oBAAcA,CAACA,KAAKA,CAACA,IAAIA,EAAEA,SAASA,EAAEA,UAAUA,CAACA,CAACA;oBAC1DA,CAACA;oBAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA,OAAOA,KAAKA,UAAUA,CAACA,CAACA,CAACA;wBACnCA,EAAEA,CAACA,CAACA,SAASA,CAACA,CAACA,CAACA,IAAIA,SAASA,CAACA,CAACA,CAACA,CAACA,WAAWA,EAAEA,CAACA,IAAIA,EAAEA,KAAKA,QAAQA,CAACA,CAACA,CAACA;4BACpEA,MAAMA,CAACA,4BAAsBA,CAACA,KAAKA,CAACA,IAAIA,EAAEA,SAASA,EAAEA,UAAUA,CAACA,CAACA;wBAClEA,CAACA;wBAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA,SAASA,CAACA,CAACA,CAACA,IAAIA,SAASA,CAACA,CAACA,CAACA,CAACA,WAAWA,EAAEA,CAACA,IAAIA,EAAEA,KAAKA,QAAQA,CAACA,CAACA,CAACA;4BAC3EA,MAAMA,CAACA,4BAAsBA,CAACA,KAAKA,CAACA,IAAIA,EAAEA,SAASA,EAAEA,UAAUA,CAACA,CAACA;wBAClEA,CAACA;wBAACA,IAAIA,CAACA,CAACA;4BACPA,OAAOA,CAACA,GAAGA,CAACA,4CAA4CA,GAAGA,UAAUA,CAACA,CAACA;4BACvEA,MAAMA,CAACA,IAAIA,CAACA;wBACbA,CAACA;oBACFA,CAACA;oBAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA,aAAaA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA,CAACA,CAACA;wBACxCA,MAAMA,CAACA,sBAAgBA,CAACA,KAAKA,CAACA,IAAIA,EAAEA,SAASA,EAAEA,UAAUA,CAACA,CAACA;oBAC5DA,CAACA;oBAACA,IAAIA,CAACA,CAACA;wBACPA,iGAAiGA;wBACjGA,MAAMA,CAACA,IAAIA,CAACA;oBACbA,CAACA;gBACFA,CAACA;gBACFF,eAACA;YAADA,CAACA,AAhDDD,EAA8BA,mBAAaA,EAgD1CA;YAhDYA,cAAQA,WAgDpBA,CAAAA;QACFA,CAACA,EAlD6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAkDlCA;IAADA,CAACA,EAlDsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAkD5BA;AAADA,CAACA,EAlDM,eAAe,KAAf,eAAe,QAkDrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/NameMETALine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var __extends = this.__extends || function (d, b) { 4 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 5 | function __() { this.constructor = d; } 6 | __.prototype = b.prototype; 7 | d.prototype = new __(); 8 | }; 9 | var LdrawVisualizer; 10 | (function (LdrawVisualizer) { 11 | var Parser; 12 | (function (Parser) { 13 | var Lines; 14 | (function (Lines) { 15 | var NameMETALine = (function (_super) { 16 | __extends(NameMETALine, _super); 17 | function NameMETALine(name) { 18 | _super.call(this, Lines.LdrawFileLineType.Name); 19 | this.Name = name; 20 | } 21 | NameMETALine.prototype.IsValid = function () { 22 | return LdrawVisualizer.Utility.hasAtLeastOneNonWhitespaceCharacter(this.Name); 23 | }; 24 | NameMETALine.Parse = function (line, splitLine, lineNumber) { 25 | var nameLine = new NameMETALine(line.substring(line.indexOf(splitLine[2]))); 26 | if (!nameLine.IsValid()) { 27 | throw 'Unable to parse name META line: Invalid line arguments on line ' + lineNumber; 28 | } 29 | return nameLine; 30 | }; 31 | return NameMETALine; 32 | })(Lines.LdrawFileLine); 33 | Lines.NameMETALine = NameMETALine; 34 | })(Lines = Parser.Lines || (Parser.Lines = {})); 35 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 36 | })(LdrawVisualizer || (LdrawVisualizer = {})); 37 | //# sourceMappingURL=NameMETALine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/NameMETALine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"NameMETALine.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/NameMETALine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.NameMETALine","LdrawVisualizer.Parser.Lines.NameMETALine.constructor","LdrawVisualizer.Parser.Lines.NameMETALine.IsValid","LdrawVisualizer.Parser.Lines.NameMETALine.Parse"],"mappings":"AAAA,0DAA0D;AAC1D,wCAAwC;;;;;;;AAExC,IAAO,eAAe,CAwBrB;AAxBD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAwB5BA;IAxBsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAwBlCA;QAxB6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAAkCC,gCAAaA;gBAC9CA,sBAAYA,IAAYA;oBACvBC,kBAAMA,uBAAiBA,CAACA,IAAIA,CAACA,CAACA;oBAE9BA,IAAIA,CAACA,IAAIA,GAAGA,IAAIA,CAACA;gBAClBA,CAACA;gBAIDD,8BAAOA,GAAPA;oBACCE,MAAMA,CAACA,uBAAOA,CAACA,mCAAmCA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;gBAC/DA,CAACA;gBAEMF,kBAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,IAAIA,QAAQA,GAAGA,IAAIA,YAAYA,CAACA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,OAAOA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA,CAACA;oBAE5EA,EAAEA,CAACA,CAACA,CAACA,QAAQA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA;wBACzBA,MAAMA,iEAAiEA,GAAGA,UAAUA,CAACA;oBACtFA,CAACA;oBAEDA,MAAMA,CAACA,QAAQA,CAACA;gBACjBA,CAACA;gBACFH,mBAACA;YAADA,CAACA,AAtBDD,EAAkCA,mBAAaA,EAsB9CA;YAtBYA,kBAAYA,eAsBxBA,CAAAA;QACFA,CAACA,EAxB6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAwBlCA;IAADA,CAACA,EAxBsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAwB5BA;AAADA,CAACA,EAxBM,eAAe,KAAf,eAAe,QAwBrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/NoFileMETALine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var __extends = this.__extends || function (d, b) { 4 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 5 | function __() { this.constructor = d; } 6 | __.prototype = b.prototype; 7 | d.prototype = new __(); 8 | }; 9 | var LdrawVisualizer; 10 | (function (LdrawVisualizer) { 11 | var Parser; 12 | (function (Parser) { 13 | var Lines; 14 | (function (Lines) { 15 | var NoFileMETALine = (function (_super) { 16 | __extends(NoFileMETALine, _super); 17 | function NoFileMETALine() { 18 | _super.call(this, Lines.LdrawFileLineType.NoFile); 19 | } 20 | NoFileMETALine.prototype.IsValid = function () { 21 | return true; 22 | }; 23 | NoFileMETALine.Parse = function (line, splitLine, lineNumber) { 24 | var noFileLine = new NoFileMETALine(); 25 | if (!noFileLine.IsValid()) { 26 | throw 'Unable to parse NOFILE META line: Invalid line arguments on line ' + lineNumber; 27 | } 28 | return noFileLine; 29 | }; 30 | return NoFileMETALine; 31 | })(Lines.LdrawFileLine); 32 | Lines.NoFileMETALine = NoFileMETALine; 33 | })(Lines = Parser.Lines || (Parser.Lines = {})); 34 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 35 | })(LdrawVisualizer || (LdrawVisualizer = {})); 36 | //# sourceMappingURL=NoFileMETALine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/NoFileMETALine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"NoFileMETALine.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/NoFileMETALine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.NoFileMETALine","LdrawVisualizer.Parser.Lines.NoFileMETALine.constructor","LdrawVisualizer.Parser.Lines.NoFileMETALine.IsValid","LdrawVisualizer.Parser.Lines.NoFileMETALine.Parse"],"mappings":"AAAA,0DAA0D;AAC1D,wCAAwC;;;;;;;AAExC,IAAO,eAAe,CAoBrB;AApBD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAoB5BA;IApBsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAoBlCA;QApB6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAAoCC,kCAAaA;gBAChDA;oBACCC,kBAAMA,uBAAiBA,CAACA,MAAMA,CAACA,CAACA;gBACjCA,CAACA;gBAEDD,gCAAOA,GAAPA;oBACCE,MAAMA,CAACA,IAAIA,CAACA;gBACbA,CAACA;gBAEMF,oBAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,IAAIA,UAAUA,GAAGA,IAAIA,cAAcA,EAAEA,CAACA;oBAEtCA,EAAEA,CAACA,CAACA,CAACA,UAAUA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA;wBAC3BA,MAAMA,mEAAmEA,GAAGA,UAAUA,CAACA;oBACxFA,CAACA;oBAEDA,MAAMA,CAACA,UAAUA,CAACA;gBACnBA,CAACA;gBACFH,qBAACA;YAADA,CAACA,AAlBDD,EAAoCA,mBAAaA,EAkBhDA;YAlBYA,oBAAcA,iBAkB1BA,CAAAA;QACFA,CAACA,EApB6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAoBlCA;IAADA,CAACA,EApBsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAoB5BA;AAADA,CAACA,EApBM,eAAe,KAAf,eAAe,QAoBrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/PartDescription.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var __extends = this.__extends || function (d, b) { 4 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 5 | function __() { this.constructor = d; } 6 | __.prototype = b.prototype; 7 | d.prototype = new __(); 8 | }; 9 | var LdrawVisualizer; 10 | (function (LdrawVisualizer) { 11 | var Parser; 12 | (function (Parser) { 13 | var Lines; 14 | (function (Lines) { 15 | var PartDescriptionMETALine = (function (_super) { 16 | __extends(PartDescriptionMETALine, _super); 17 | function PartDescriptionMETALine(name) { 18 | _super.call(this, Lines.LdrawFileLineType.Name); 19 | this.Name = name; 20 | } 21 | PartDescriptionMETALine.prototype.IsValid = function () { 22 | return LdrawVisualizer.Utility.hasAtLeastOneNonWhitespaceCharacter(this.Name); 23 | }; 24 | PartDescriptionMETALine.Parse = function (line, splitLine, lineNumber) { 25 | var nameLine = new Lines.NameMETALine(splitLine[2]); 26 | if (!nameLine.IsValid()) { 27 | throw 'Unable to parse name META line: Invalid line arguments on line ' + lineNumber; 28 | } 29 | return nameLine; 30 | }; 31 | return PartDescriptionMETALine; 32 | })(Lines.LdrawFileLine); 33 | Lines.PartDescriptionMETALine = PartDescriptionMETALine; 34 | })(Lines = Parser.Lines || (Parser.Lines = {})); 35 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 36 | })(LdrawVisualizer || (LdrawVisualizer = {})); 37 | //# sourceMappingURL=PartDescription.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/PartDescription.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"PartDescription.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/PartDescription.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.PartDescriptionMETALine","LdrawVisualizer.Parser.Lines.PartDescriptionMETALine.constructor","LdrawVisualizer.Parser.Lines.PartDescriptionMETALine.IsValid","LdrawVisualizer.Parser.Lines.PartDescriptionMETALine.Parse"],"mappings":"AAAA,0DAA0D;AAC1D,wCAAwC;;;;;;;AAExC,IAAO,eAAe,CAwBrB;AAxBD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAwB5BA;IAxBsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAwBlCA;QAxB6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAA6CC,2CAAaA;gBACzDA,iCAAYA,IAAYA;oBACvBC,kBAAMA,uBAAiBA,CAACA,IAAIA,CAACA,CAACA;oBAE9BA,IAAIA,CAACA,IAAIA,GAAGA,IAAIA,CAACA;gBAClBA,CAACA;gBAIDD,yCAAOA,GAAPA;oBACCE,MAAMA,CAACA,uBAAOA,CAACA,mCAAmCA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;gBAC/DA,CAACA;gBAEMF,6BAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,IAAIA,QAAQA,GAAGA,IAAIA,kBAAYA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA,CAACA;oBAE9CA,EAAEA,CAACA,CAACA,CAACA,QAAQA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA;wBACzBA,MAAMA,iEAAiEA,GAAGA,UAAUA,CAACA;oBACtFA,CAACA;oBAEDA,MAAMA,CAACA,QAAQA,CAACA;gBACjBA,CAACA;gBACFH,8BAACA;YAADA,CAACA,AAtBDD,EAA6CA,mBAAaA,EAsBzDA;YAtBYA,6BAAuBA,0BAsBnCA,CAAAA;QACFA,CAACA,EAxB6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAwBlCA;IAADA,CAACA,EAxBsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAwB5BA;AAADA,CAACA,EAxBM,eAAe,KAAf,eAAe,QAwBrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/RotationCenterMETALine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var __extends = this.__extends || function (d, b) { 4 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 5 | function __() { this.constructor = d; } 6 | __.prototype = b.prototype; 7 | d.prototype = new __(); 8 | }; 9 | var LdrawVisualizer; 10 | (function (LdrawVisualizer) { 11 | var Parser; 12 | (function (Parser) { 13 | var Lines; 14 | (function (Lines) { 15 | var RotationCenterMETALine = (function (_super) { 16 | __extends(RotationCenterMETALine, _super); 17 | function RotationCenterMETALine(x, y, z, whatIsThisNumberFor, name) { 18 | _super.call(this, Lines.LdrawFileLineType.RotationCenter); 19 | this.X = x; 20 | this.Y = y; 21 | this.Z = z; 22 | this.WhatIsThisNumberFor = whatIsThisNumberFor; 23 | this.Name = name; 24 | } 25 | RotationCenterMETALine.prototype.IsValid = function () { 26 | return (LdrawVisualizer.Utility.isNumber(this.X) 27 | && LdrawVisualizer.Utility.isNumber(this.Y) 28 | && LdrawVisualizer.Utility.isNumber(this.Z) 29 | && LdrawVisualizer.Utility.isNonEmpty(this.Name)); 30 | }; 31 | RotationCenterMETALine.Parse = function (line, splitLine, lineNumber) { 32 | var x = parseInt(splitLine[3], 10), y = parseInt(splitLine[4], 10), z = parseInt(splitLine[5], 10), whatIsThisNumberFor = parseInt(splitLine[6], 10), name = splitLine[7]; 33 | var rotationCenterLine = new RotationCenterMETALine(x, y, z, whatIsThisNumberFor, name); 34 | if (!rotationCenterLine.IsValid()) { 35 | throw 'Unable to parse rotation center META line: Invalid line arguments on line ' + lineNumber; 36 | } 37 | return rotationCenterLine; 38 | }; 39 | return RotationCenterMETALine; 40 | })(Lines.LdrawFileLine); 41 | Lines.RotationCenterMETALine = RotationCenterMETALine; 42 | })(Lines = Parser.Lines || (Parser.Lines = {})); 43 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 44 | })(LdrawVisualizer || (LdrawVisualizer = {})); 45 | //# sourceMappingURL=RotationCenterMETALine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/RotationCenterMETALine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"RotationCenterMETALine.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/RotationCenterMETALine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.RotationCenterMETALine","LdrawVisualizer.Parser.Lines.RotationCenterMETALine.constructor","LdrawVisualizer.Parser.Lines.RotationCenterMETALine.IsValid","LdrawVisualizer.Parser.Lines.RotationCenterMETALine.Parse"],"mappings":"AAAA,0DAA0D;AAC1D,wCAAwC;;;;;;;AAExC,IAAO,eAAe,CA2CrB;AA3CD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CA2C5BA;IA3CsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CA2ClCA;QA3C6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAA4CC,0CAAaA;gBACxDA,gCAAYA,CAASA,EAAEA,CAASA,EAAEA,CAASA,EAAEA,mBAA2BA,EAAEA,IAAYA;oBACrFC,kBAAMA,uBAAiBA,CAACA,cAAcA,CAACA,CAACA;oBAExCA,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA;oBACXA,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA;oBACXA,IAAIA,CAACA,CAACA,GAAGA,CAACA,CAACA;oBACXA,IAAIA,CAACA,mBAAmBA,GAAGA,mBAAmBA,CAACA;oBAC/CA,IAAIA,CAACA,IAAIA,GAAGA,IAAIA,CAACA;gBAClBA,CAACA;gBAQDD,wCAAOA,GAAPA;oBACCE,MAAMA,CAACA,CAACA,uBAAOA,CAACA,QAAQA,CAACA,IAAIA,CAACA,CAACA,CAACA;2BAC5BA,uBAAOA,CAACA,QAAQA,CAACA,IAAIA,CAACA,CAACA,CAACA;2BACxBA,uBAAOA,CAACA,QAAQA,CAACA,IAAIA,CAACA,CAACA,CAACA;2BAExBA,uBAAOA,CAACA,UAAUA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA;gBACpCA,CAACA;gBAEMF,4BAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBAEjEG,IAAIA,CAACA,GAAGA,QAAQA,CAACA,SAASA,CAACA,CAACA,CAACA,EAAEA,EAAEA,CAACA,EACjCA,CAACA,GAAGA,QAAQA,CAACA,SAASA,CAACA,CAACA,CAACA,EAAEA,EAAEA,CAACA,EAC9BA,CAACA,GAAGA,QAAQA,CAACA,SAASA,CAACA,CAACA,CAACA,EAAEA,EAAEA,CAACA,EAC9BA,mBAAmBA,GAAGA,QAAQA,CAACA,SAASA,CAACA,CAACA,CAACA,EAAEA,EAAEA,CAACA,EAChDA,IAAIA,GAAGA,SAASA,CAACA,CAACA,CAACA,CAACA;oBAErBA,IAAIA,kBAAkBA,GAAGA,IAAIA,sBAAsBA,CAACA,CAACA,EAAEA,CAACA,EAAEA,CAACA,EAAEA,mBAAmBA,EAAEA,IAAIA,CAACA,CAACA;oBAExFA,EAAEA,CAACA,CAACA,CAACA,kBAAkBA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA;wBACnCA,MAAMA,4EAA4EA,GAAGA,UAAUA,CAACA;oBACjGA,CAACA;oBAEDA,MAAMA,CAACA,kBAAkBA,CAACA;gBAC3BA,CAACA;gBACFH,6BAACA;YAADA,CAACA,AAzCDD,EAA4CA,mBAAaA,EAyCxDA;YAzCYA,4BAAsBA,yBAyClCA,CAAAA;QACFA,CAACA,EA3C6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QA2ClCA;IAADA,CAACA,EA3CsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QA2C5BA;AAADA,CAACA,EA3CM,eAAe,KAAf,eAAe,QA2CrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/RotationConfigMETALine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var __extends = this.__extends || function (d, b) { 4 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 5 | function __() { this.constructor = d; } 6 | __.prototype = b.prototype; 7 | d.prototype = new __(); 8 | }; 9 | var LdrawVisualizer; 10 | (function (LdrawVisualizer) { 11 | var Parser; 12 | (function (Parser) { 13 | var Lines; 14 | (function (Lines) { 15 | var RotationConfigMETALine = (function (_super) { 16 | __extends(RotationConfigMETALine, _super); 17 | function RotationConfigMETALine(rotationId, isVisible) { 18 | _super.call(this, Lines.LdrawFileLineType.RotationConfig); 19 | this.RotationId = rotationId; 20 | this.IsVisible = isVisible; 21 | } 22 | RotationConfigMETALine.prototype.IsValid = function () { 23 | return (LdrawVisualizer.Utility.isInt(this.RotationId) 24 | && !LdrawVisualizer.Utility.isNullOrUndefined(this.IsVisible)); 25 | }; 26 | RotationConfigMETALine.Parse = function (line, splitLine, lineNumber) { 27 | var rotId = parseInt(splitLine[3], 10), isVisible = parseInt(splitLine[4], 10) === 1; 28 | var rotationConfigLine = new RotationConfigMETALine(rotId, isVisible); 29 | if (!rotationConfigLine.IsValid()) { 30 | throw 'Unable to parse rotation config META line: Invalid line arguments on line ' + lineNumber; 31 | } 32 | return rotationConfigLine; 33 | }; 34 | return RotationConfigMETALine; 35 | })(Lines.LdrawFileLine); 36 | Lines.RotationConfigMETALine = RotationConfigMETALine; 37 | })(Lines = Parser.Lines || (Parser.Lines = {})); 38 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 39 | })(LdrawVisualizer || (LdrawVisualizer = {})); 40 | //# sourceMappingURL=RotationConfigMETALine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/RotationConfigMETALine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"RotationConfigMETALine.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/RotationConfigMETALine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.RotationConfigMETALine","LdrawVisualizer.Parser.Lines.RotationConfigMETALine.constructor","LdrawVisualizer.Parser.Lines.RotationConfigMETALine.IsValid","LdrawVisualizer.Parser.Lines.RotationConfigMETALine.Parse"],"mappings":"AAAA,0DAA0D;AAC1D,wCAAwC;;;;;;;AAExC,IAAO,eAAe,CA8BrB;AA9BD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CA8B5BA;IA9BsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CA8BlCA;QA9B6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAA4CC,0CAAaA;gBACxDA,gCAAYA,UAAkBA,EAAEA,SAAkBA;oBACjDC,kBAAMA,uBAAiBA,CAACA,cAAcA,CAACA,CAACA;oBACxCA,IAAIA,CAACA,UAAUA,GAAGA,UAAUA,CAACA;oBAC7BA,IAAIA,CAACA,SAASA,GAAGA,SAASA,CAACA;gBAC5BA,CAACA;gBAKDD,wCAAOA,GAAPA;oBACCE,MAAMA,CAACA,CAACA,uBAAOA,CAACA,KAAKA,CAACA,IAAIA,CAACA,UAAUA,CAACA;2BAClCA,CAACA,uBAAOA,CAACA,iBAAiBA,CAACA,IAAIA,CAACA,SAASA,CAACA,CAACA,CAACA;gBACjDA,CAACA;gBAEMF,4BAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBAEjEG,IAAIA,KAAKA,GAAGA,QAAQA,CAACA,SAASA,CAACA,CAACA,CAACA,EAAEA,EAAEA,CAACA,EACrCA,SAASA,GAAGA,QAAQA,CAACA,SAASA,CAACA,CAACA,CAACA,EAAEA,EAAEA,CAACA,KAAKA,CAACA,CAACA;oBAE9CA,IAAIA,kBAAkBA,GAAGA,IAAIA,sBAAsBA,CAACA,KAAKA,EAAEA,SAASA,CAACA,CAACA;oBAEtEA,EAAEA,CAACA,CAACA,CAACA,kBAAkBA,CAACA,OAAOA,EAAEA,CAACA,CAACA,CAACA;wBACnCA,MAAMA,4EAA4EA,GAAGA,UAAUA,CAACA;oBACjGA,CAACA;oBAEDA,MAAMA,CAACA,kBAAkBA,CAACA;gBAC3BA,CAACA;gBACFH,6BAACA;YAADA,CAACA,AA5BDD,EAA4CA,mBAAaA,EA4BxDA;YA5BYA,4BAAsBA,yBA4BlCA,CAAAA;QACFA,CAACA,EA9B6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QA8BlCA;IAADA,CAACA,EA9BsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QA8B5BA;AAADA,CAACA,EA9BM,eAAe,KAAf,eAAe,QA8BrB"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/RotationStepMETALine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var __extends = this.__extends || function (d, b) { 4 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 5 | function __() { this.constructor = d; } 6 | __.prototype = b.prototype; 7 | d.prototype = new __(); 8 | }; 9 | var LdrawVisualizer; 10 | (function (LdrawVisualizer) { 11 | var Parser; 12 | (function (Parser) { 13 | var Lines; 14 | (function (Lines) { 15 | var RotationStepMETALine = (function (_super) { 16 | __extends(RotationStepMETALine, _super); 17 | function RotationStepMETALine(xAngle, yAngle, zAngle, rotationType) { 18 | _super.call(this, Lines.LdrawFileLineType.RotationStep); 19 | this.XAngle = xAngle; 20 | this.YAngle = yAngle; 21 | this.ZAngle = zAngle; 22 | this.RotationType = rotationType; 23 | } 24 | RotationStepMETALine.prototype.IsValid = function () { 25 | // if any of the rotation angles are defined, 26 | // ensure ALL rotation angles are valid 27 | if (!LdrawVisualizer.Utility.isNullOrUndefined(this.XAngle) 28 | || !LdrawVisualizer.Utility.isNullOrUndefined(this.YAngle) 29 | || !LdrawVisualizer.Utility.isNullOrUndefined(this.ZAngle)) { 30 | return (LdrawVisualizer.Utility.isNumber(this.XAngle) 31 | && LdrawVisualizer.Utility.isNumber(this.YAngle) 32 | && LdrawVisualizer.Utility.isNumber(this.ZAngle)); 33 | } 34 | else { 35 | return true; 36 | } 37 | }; 38 | RotationStepMETALine.Parse = function (line, splitLine, lineNumber) { 39 | var x, y, z, rotType; 40 | if (splitLine[2] !== 'END') { 41 | x = parseFloat(splitLine[2]); 42 | y = parseFloat(splitLine[3]); 43 | z = parseFloat(splitLine[4]); 44 | if (splitLine[5] === 'REL') { 45 | rotType = RotationType.Relative; 46 | } 47 | else if (splitLine[5] === 'ADD') { 48 | rotType = RotationType.Additive; 49 | } 50 | else if (splitLine[5] === 'ABS') { 51 | rotType = RotationType.Absolute; 52 | } 53 | else { 54 | throw 'Unknown rotation step type: ' + splitLine[5]; 55 | } 56 | } 57 | var rotStepLine = new RotationStepMETALine(x, y, z, rotType); 58 | if (!rotStepLine.IsValid()) { 59 | throw 'Unable to parse rotation step META line: Invalid line arguments on line ' + lineNumber; 60 | } 61 | return rotStepLine; 62 | }; 63 | return RotationStepMETALine; 64 | })(Lines.LdrawFileLine); 65 | Lines.RotationStepMETALine = RotationStepMETALine; 66 | (function (RotationType) { 67 | RotationType[RotationType["Relative"] = 0] = "Relative"; 68 | RotationType[RotationType["Additive"] = 1] = "Additive"; 69 | RotationType[RotationType["Absolute"] = 2] = "Absolute"; 70 | })(Lines.RotationType || (Lines.RotationType = {})); 71 | var RotationType = Lines.RotationType; 72 | })(Lines = Parser.Lines || (Parser.Lines = {})); 73 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 74 | })(LdrawVisualizer || (LdrawVisualizer = {})); 75 | //# sourceMappingURL=RotationStepMETALine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/RotationStepMETALine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"RotationStepMETALine.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/RotationStepMETALine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.RotationStepMETALine","LdrawVisualizer.Parser.Lines.RotationStepMETALine.constructor","LdrawVisualizer.Parser.Lines.RotationStepMETALine.IsValid","LdrawVisualizer.Parser.Lines.RotationStepMETALine.Parse","LdrawVisualizer.Parser.Lines.RotationType"],"mappings":"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"} -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/StepMETALine.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var __extends = this.__extends || function (d, b) { 4 | for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 5 | function __() { this.constructor = d; } 6 | __.prototype = b.prototype; 7 | d.prototype = new __(); 8 | }; 9 | var LdrawVisualizer; 10 | (function (LdrawVisualizer) { 11 | var Parser; 12 | (function (Parser) { 13 | var Lines; 14 | (function (Lines) { 15 | var StepMETALine = (function (_super) { 16 | __extends(StepMETALine, _super); 17 | function StepMETALine() { 18 | _super.call(this, Lines.LdrawFileLineType.Step); 19 | } 20 | StepMETALine.prototype.IsValid = function () { 21 | return true; 22 | }; 23 | StepMETALine.Parse = function (line, splitLine, lineNumber) { 24 | return new StepMETALine(); 25 | }; 26 | return StepMETALine; 27 | })(Lines.LdrawFileLine); 28 | Lines.StepMETALine = StepMETALine; 29 | })(Lines = Parser.Lines || (Parser.Lines = {})); 30 | })(Parser = LdrawVisualizer.Parser || (LdrawVisualizer.Parser = {})); 31 | })(LdrawVisualizer || (LdrawVisualizer = {})); 32 | //# sourceMappingURL=StepMETALine.js.map -------------------------------------------------------------------------------- /compiled/scripts/parser/lines/meta-lines/StepMETALine.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"StepMETALine.js","sourceRoot":"","sources":["../../../../../scripts/parser/lines/meta-lines/StepMETALine.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Parser","LdrawVisualizer.Parser.Lines","LdrawVisualizer.Parser.Lines.StepMETALine","LdrawVisualizer.Parser.Lines.StepMETALine.constructor","LdrawVisualizer.Parser.Lines.StepMETALine.IsValid","LdrawVisualizer.Parser.Lines.StepMETALine.Parse"],"mappings":"AAAA,0DAA0D;AAC1D,wCAAwC;;;;;;;AAExC,IAAO,eAAe,CAcrB;AAdD,WAAO,eAAe;IAACA,IAAAA,MAAMA,CAc5BA;IAdsBA,WAAAA,MAAMA;QAACC,IAAAA,KAAKA,CAclCA;QAd6BA,WAAAA,KAAKA,EAACA,CAACA;YACpCC;gBAAkCC,gCAAaA;gBAC9CA;oBACCC,kBAAMA,uBAAiBA,CAACA,IAAIA,CAACA,CAACA;gBAC/BA,CAACA;gBAEDD,8BAAOA,GAAPA;oBACCE,MAAMA,CAACA,IAAIA,CAACA;gBACbA,CAACA;gBAEMF,kBAAKA,GAAZA,UAAaA,IAAYA,EAAEA,SAAmBA,EAAEA,UAAkBA;oBACjEG,MAAMA,CAACA,IAAIA,YAAYA,EAAEA,CAACA;gBAC3BA,CAACA;gBACFH,mBAACA;YAADA,CAACA,AAZDD,EAAkCA,mBAAaA,EAY9CA;YAZYA,kBAAYA,eAYxBA,CAAAA;QACFA,CAACA,EAd6BD,KAAKA,GAALA,YAAKA,KAALA,YAAKA,QAclCA;IAADA,CAACA,EAdsBD,MAAMA,GAANA,sBAAMA,KAANA,sBAAMA,QAc5BA;AAADA,CAACA,EAdM,eAAe,KAAf,eAAe,QAcrB"} -------------------------------------------------------------------------------- /compiled/scripts/renderer/ColorLookup.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | var LdrawVisualizer; 5 | (function (LdrawVisualizer) { 6 | var Renderer; 7 | (function (Renderer) { 8 | Renderer.ColorLookup = {}; 9 | })(Renderer = LdrawVisualizer.Renderer || (LdrawVisualizer.Renderer = {})); 10 | })(LdrawVisualizer || (LdrawVisualizer = {})); 11 | //# sourceMappingURL=ColorLookup.js.map -------------------------------------------------------------------------------- /compiled/scripts/renderer/ColorLookup.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"ColorLookup.js","sourceRoot":"","sources":["../../../scripts/renderer/ColorLookup.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Renderer"],"mappings":"AAAA,iDAAiD;AACjD,+CAA+C;AAC/C,qDAAqD;AAErD,IAAO,eAAe,CA2CrB;AA3CD,WAAO,eAAe;IAACA,IAAAA,QAAQA,CA2C9BA;IA3CsBA,WAAAA,QAAQA,EAACA,CAACA;QACrBC,oBAAWA,GAAwDA,EAyC7EA,CAAAA;IACFA,CAACA,EA3CsBD,QAAQA,GAARA,wBAAQA,KAARA,wBAAQA,QA2C9BA;AAADA,CAACA,EA3CM,eAAe,KAAf,eAAe,QA2CrB"} -------------------------------------------------------------------------------- /compiled/scripts/renderer/EdgeMap.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"EdgeMap.js","sourceRoot":"","sources":["../../../scripts/renderer/EdgeMap.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Renderer","LdrawVisualizer.Renderer.EdgeMap","LdrawVisualizer.Renderer.EdgeMap.constructor","LdrawVisualizer.Renderer.EdgeMap.addGeometry","LdrawVisualizer.Renderer.EdgeMap.addGeometries","LdrawVisualizer.Renderer.EdgeMap.getGeometries","LdrawVisualizer.Renderer.EdgeMap.getGeometriesFromKey","LdrawVisualizer.Renderer.EdgeMap.GetMapKey"],"mappings":"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ACA,CAACA;wBAEPA,EAAEA,CAACA,CAACA,OAAOA,CAACA,CAACA,GAAGA,OAAOA,CAACA,CAACA,CAACA,CAACA,CAACA;4BAC3BA,KAAKA,GAAGA,OAAOA,CAACA;4BAChBA,MAAMA,GAAGA,OAAOA,CAACA;wBAClBA,CAACA;wBAACA,IAAIA,CAACA,EAAEA,CAACA,CAACA,OAAOA,CAACA,CAACA,GAAGA,OAAOA,CAACA,CAACA,CAACA,CAACA,CAACA;4BAClCA,KAAKA,GAAGA,OAAOA,CAACA;4BAChBA,MAAMA,GAAGA,OAAOA,CAACA;wBAClBA,CAACA;wBAACA,IAAIA,CAACA,CAACA;4BACPA,yBAAyBA;4BAEzBA,KAAKA,GAAGA,OAAOA,CAACA;4BAChBA,MAAMA,GAAGA,OAAOA,CAACA;wBAClBA,CAACA;oBACFA,CAACA;gBACFA,CAACA;gBAEDA,MAAMA,CAACA,CAACA,IAAIA,CAACA,KAAKA,CAACA,KAAKA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA;oBAC3CA,IAAIA,CAACA,KAAKA,CAACA,KAAKA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA;oBACpCA,IAAIA,CAACA,KAAKA,CAACA,KAAKA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA;oBACpCA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA;oBACrCA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA;oBACrCA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA,CAACA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;YACnDA,CAACA;YACFN,cAACA;QAADA,CAACA,AAjFDD,IAiFCA;QAjFYA,gBAAOA,UAiFnBA,CAAAA;IACFA,CAACA,EApFsBD,QAAQA,GAARA,wBAAQA,KAARA,wBAAQA,QAoF9BA;AAADA,CAACA,EApFM,eAAe,KAAf,eAAe,QAoFrB"} -------------------------------------------------------------------------------- /compiled/scripts/renderer/Smoother.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"Smoother.js","sourceRoot":"","sources":["../../../scripts/renderer/Smoother.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Renderer","LdrawVisualizer.Renderer.Smoother","LdrawVisualizer.Renderer.Smoother.constructor","LdrawVisualizer.Renderer.Smoother.CombineAndSmooth","LdrawVisualizer.Renderer.Smoother.getConnectedGeometriesGroup"],"mappings":"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"} -------------------------------------------------------------------------------- /compiled/scripts/renderer/VertexMapBase.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var LdrawVisualizer; 4 | (function (LdrawVisualizer) { 5 | var Renderer; 6 | (function (Renderer) { 7 | var VertexMapBase = (function () { 8 | function VertexMapBase() { 9 | } 10 | // returns a string key based on three vertices of a point 11 | VertexMapBase.GetMapKey = function (vertex) { 12 | return [Math.round(vertex.x * this.precision), 13 | Math.round(vertex.y * this.precision), 14 | Math.round(vertex.z * this.precision)].join('|'); 15 | }; 16 | // how close the vertices must be to be considered the same point 17 | VertexMapBase.precision = 10000; 18 | return VertexMapBase; 19 | })(); 20 | Renderer.VertexMapBase = VertexMapBase; 21 | })(Renderer = LdrawVisualizer.Renderer || (LdrawVisualizer.Renderer = {})); 22 | })(LdrawVisualizer || (LdrawVisualizer = {})); 23 | //# sourceMappingURL=VertexMapBase.js.map -------------------------------------------------------------------------------- /compiled/scripts/renderer/VertexMapBase.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"VertexMapBase.js","sourceRoot":"","sources":["../../../scripts/renderer/VertexMapBase.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Renderer","LdrawVisualizer.Renderer.VertexMapBase","LdrawVisualizer.Renderer.VertexMapBase.constructor","LdrawVisualizer.Renderer.VertexMapBase.GetMapKey"],"mappings":"AAAA,oDAAoD;AACpD,sCAAsC;AAEtC,IAAO,eAAe,CAcrB;AAdD,WAAO,eAAe;IAACA,IAAAA,QAAQA,CAc9BA;IAdsBA,WAAAA,QAAQA,EAACA,CAACA;QAEhCC;YAAAC;YAWAC,CAACA;YANAD,0DAA0DA;YAC5CA,uBAASA,GAAvBA,UAAwBA,MAAqBA;gBAC5CE,MAAMA,CAACA,CAACA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA;oBAC5CA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA;oBACrCA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA,CAACA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;YACnDA,CAACA;YARDF,iEAAiEA;YACnDA,uBAASA,GAAWA,KAAKA,CAACA;YAQzCA,oBAACA;QAADA,CAACA,AAXDD,IAWCA;QAXYA,sBAAaA,gBAWzBA,CAAAA;IACFA,CAACA,EAdsBD,QAAQA,GAARA,wBAAQA,KAARA,wBAAQA,QAc9BA;AAADA,CAACA,EAdM,eAAe,KAAf,eAAe,QAcrB"} -------------------------------------------------------------------------------- /compiled/scripts/renderer/VertexToFaceMap.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var LdrawVisualizer; 4 | (function (LdrawVisualizer) { 5 | var Renderer; 6 | (function (Renderer) { 7 | (function (Face3VertexIndex) { 8 | Face3VertexIndex[Face3VertexIndex["A"] = 0] = "A"; 9 | Face3VertexIndex[Face3VertexIndex["B"] = 1] = "B"; 10 | Face3VertexIndex[Face3VertexIndex["C"] = 2] = "C"; 11 | })(Renderer.Face3VertexIndex || (Renderer.Face3VertexIndex = {})); 12 | var Face3VertexIndex = Renderer.Face3VertexIndex; 13 | var VertexToFaceMap = (function () { 14 | function VertexToFaceMap() { 15 | // a map of vertex keys to faces. 16 | this.map = {}; 17 | // how close the vertices must be to be considered the same point 18 | this.precision = 10000; 19 | } 20 | // adds all of the faces in the geometry to the map, indexed by their vertices. 21 | // note each face will appear in the internal map 3 times, once for each vertex 22 | VertexToFaceMap.prototype.addGeometry = function (geometry) { 23 | var _this = this; 24 | geometry.faces.forEach(function (f) { 25 | [f.a, f.b, f.c].forEach(function (vertexIndex, index) { 26 | var vertexMapKey = _this.getMapKey(geometry.vertices[vertexIndex]); 27 | _this.map[vertexMapKey] = _this.map[vertexMapKey] || []; 28 | _this.map[vertexMapKey].push({ 29 | face: f, 30 | matchingVertexIndex: index 31 | }); 32 | }); 33 | }); 34 | }; 35 | // returns a list of unique faces that contain the given vertex 36 | VertexToFaceMap.prototype.getFaces = function (vertex) { 37 | var _this = this; 38 | if (LdrawVisualizer.Utility.isArray(vertex)) { 39 | var allFaces = []; 40 | vertex.forEach(function (v) { 41 | var faces = _this.map[_this.getMapKey(v)]; 42 | if (faces) { 43 | allFaces = allFaces.concat(faces); 44 | } 45 | }); 46 | var uniqueFaces = allFaces.filter(function (value, index, self) { 47 | return self.indexOf(value) === index; 48 | }); 49 | return uniqueFaces; 50 | } 51 | else { 52 | return this.map[this.getMapKey(vertex)]; 53 | } 54 | }; 55 | VertexToFaceMap.prototype.getFacesFromVertexKey = function (vertexKey) { 56 | return this.map[vertexKey]; 57 | }; 58 | // returns a string key based on three vertices of a point 59 | VertexToFaceMap.prototype.getMapKey = function (vertex) { 60 | return [Math.round(vertex.x * this.precision), 61 | Math.round(vertex.y * this.precision), 62 | Math.round(vertex.z * this.precision)].join('|'); 63 | }; 64 | return VertexToFaceMap; 65 | })(); 66 | Renderer.VertexToFaceMap = VertexToFaceMap; 67 | })(Renderer = LdrawVisualizer.Renderer || (LdrawVisualizer.Renderer = {})); 68 | })(LdrawVisualizer || (LdrawVisualizer = {})); 69 | //# sourceMappingURL=VertexToFaceMap.js.map -------------------------------------------------------------------------------- /compiled/scripts/renderer/VertexToFaceMap.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"VertexToFaceMap.js","sourceRoot":"","sources":["../../../scripts/renderer/VertexToFaceMap.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Renderer","LdrawVisualizer.Renderer.Face3VertexIndex","LdrawVisualizer.Renderer.VertexToFaceMap","LdrawVisualizer.Renderer.VertexToFaceMap.constructor","LdrawVisualizer.Renderer.VertexToFaceMap.addGeometry","LdrawVisualizer.Renderer.VertexToFaceMap.getFaces","LdrawVisualizer.Renderer.VertexToFaceMap.getFacesFromVertexKey","LdrawVisualizer.Renderer.VertexToFaceMap.getMapKey"],"mappings":"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"} -------------------------------------------------------------------------------- /compiled/scripts/renderer/VertexToLineMap.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | var LdrawVisualizer; 4 | (function (LdrawVisualizer) { 5 | var Renderer; 6 | (function (Renderer) { 7 | var VertexToLineMap = (function () { 8 | function VertexToLineMap() { 9 | // a map of vertex keys to lines. 10 | this.map = {}; 11 | // how close the vertices must be to be considered the same point 12 | this.precision = 10000; 13 | } 14 | // adds a line (defined by two THREE.Vector3's) to the map. 15 | // note that each line will appear in the map twice - once for each point 16 | VertexToLineMap.prototype.addLine = function (vertex1, vertex2) { 17 | var _this = this; 18 | [vertex1, vertex2].forEach(function (v) { 19 | var vertexMapKey = _this.getMapKey(v); 20 | _this.map[vertexMapKey] = _this.map[vertexMapKey] || []; 21 | _this.map[vertexMapKey].push({ 22 | vertex1: vertex1, 23 | vertex2: vertex2 24 | }); 25 | }); 26 | }; 27 | // returns a list of unique lines that contain the given vertex 28 | VertexToLineMap.prototype.getLines = function (vertex) { 29 | return this.map[this.getMapKey(vertex)]; 30 | }; 31 | // returns a string key based on three vertices of a point 32 | VertexToLineMap.prototype.getMapKey = function (vertex) { 33 | return [Math.round(vertex.x * this.precision), 34 | Math.round(vertex.y * this.precision), 35 | Math.round(vertex.z * this.precision)].join('|'); 36 | }; 37 | return VertexToLineMap; 38 | })(); 39 | Renderer.VertexToLineMap = VertexToLineMap; 40 | })(Renderer = LdrawVisualizer.Renderer || (LdrawVisualizer.Renderer = {})); 41 | })(LdrawVisualizer || (LdrawVisualizer = {})); 42 | //# sourceMappingURL=VertexToLineMap.js.map -------------------------------------------------------------------------------- /compiled/scripts/renderer/VertexToLineMap.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"VertexToLineMap.js","sourceRoot":"","sources":["../../../scripts/renderer/VertexToLineMap.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Renderer","LdrawVisualizer.Renderer.VertexToLineMap","LdrawVisualizer.Renderer.VertexToLineMap.constructor","LdrawVisualizer.Renderer.VertexToLineMap.addLine","LdrawVisualizer.Renderer.VertexToLineMap.getLines","LdrawVisualizer.Renderer.VertexToLineMap.getMapKey"],"mappings":"AAAA,oDAAoD;AACpD,sCAAsC;AAEtC,IAAO,eAAe,CAwCrB;AAxCD,WAAO,eAAe;IAACA,IAAAA,QAAQA,CAwC9BA;IAxCsBA,WAAAA,QAAQA,EAACA,CAACA;QAOhCC;YAAAC;gBAECC,iCAAiCA;gBACzBA,QAAGA,GAA8CA,EAAEA,CAACA;gBAE5DA,iEAAiEA;gBACzDA,cAASA,GAAWA,KAAKA,CAACA;YA0BnCA,CAACA;YAxBAD,2DAA2DA;YAC3DA,yEAAyEA;YACzEA,iCAAOA,GAAPA,UAAQA,OAAsBA,EAAEA,OAAsBA;gBAAtDE,iBASCA;gBARAA,CAACA,OAAOA,EAAEA,OAAOA,CAACA,CAACA,OAAOA,CAACA,UAACA,CAACA;oBAC5BA,IAAIA,YAAYA,GAAGA,KAAIA,CAACA,SAASA,CAACA,CAACA,CAACA,CAACA;oBACrCA,KAAIA,CAACA,GAAGA,CAACA,YAAYA,CAACA,GAAGA,KAAIA,CAACA,GAAGA,CAACA,YAAYA,CAACA,IAAIA,EAAEA,CAACA;oBACtDA,KAAIA,CAACA,GAAGA,CAACA,YAAYA,CAACA,CAACA,IAAIA,CAACA;wBAC3BA,OAAOA,EAAEA,OAAOA;wBAChBA,OAAOA,EAAEA,OAAOA;qBAChBA,CAACA,CAACA;gBACJA,CAACA,CAACA,CAACA;YACJA,CAACA;YAEDF,+DAA+DA;YAC/DA,kCAAQA,GAARA,UAASA,MAAqBA;gBAC7BG,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,IAAIA,CAACA,SAASA,CAAgBA,MAAMA,CAACA,CAACA,CAACA;YACxDA,CAACA;YAEDH,0DAA0DA;YAClDA,mCAASA,GAAjBA,UAAkBA,MAAqBA;gBACtCI,MAAMA,CAACA,CAACA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA;oBAC5CA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA;oBACrCA,IAAIA,CAACA,KAAKA,CAACA,MAAMA,CAACA,CAACA,GAAGA,IAAIA,CAACA,SAASA,CAACA,CAACA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;YACnDA,CAACA;YACFJ,sBAACA;QAADA,CAACA,AAhCDD,IAgCCA;QAhCYA,wBAAeA,kBAgC3BA,CAAAA;IACFA,CAACA,EAxCsBD,QAAQA,GAARA,wBAAQA,KAARA,wBAAQA,QAwC9BA;AAADA,CAACA,EAxCM,eAAe,KAAf,eAAe,QAwCrB"} -------------------------------------------------------------------------------- /compiled/scripts/utility.js: -------------------------------------------------------------------------------- 1 | var LdrawVisualizer; 2 | (function (LdrawVisualizer) { 3 | var Utility; 4 | (function (Utility) { 5 | function isString(obj) { 6 | return Object.prototype.toString.call(obj) === '[object String]'; 7 | } 8 | Utility.isString = isString; 9 | function isNumber(obj) { 10 | return Object.prototype.toString.call(obj) === '[object Number]' && !isNaN(obj); 11 | } 12 | Utility.isNumber = isNumber; 13 | function isInt(obj) { 14 | return isNumber(obj) && (obj % 1) === 0; 15 | } 16 | Utility.isInt = isInt; 17 | function isByte(obj) { 18 | return isInt(obj) && obj >= 0 && obj <= 255; 19 | } 20 | Utility.isByte = isByte; 21 | function isArray(obj) { 22 | return Object.prototype.toString.call(obj) === '[object Array]'; 23 | } 24 | Utility.isArray = isArray; 25 | function isValidColorCode(obj) { 26 | return isInt(obj) && obj >= 0; 27 | //return isInt(obj) && obj >= 0 && obj <= 511; 28 | } 29 | Utility.isValidColorCode = isValidColorCode; 30 | function isValidColorHexString(obj) { 31 | return isString(obj) && obj && /^#[a-f0-9]{6}$/i.test(obj); 32 | } 33 | Utility.isValidColorHexString = isValidColorHexString; 34 | function isNullOrUndefined(obj) { 35 | return obj === null || typeof obj === 'undefined'; 36 | } 37 | Utility.isNullOrUndefined = isNullOrUndefined; 38 | function hasAtLeastOneNonWhitespaceCharacter(s) { 39 | return /^(?!\s*$).+/.test(s); 40 | } 41 | Utility.hasAtLeastOneNonWhitespaceCharacter = hasAtLeastOneNonWhitespaceCharacter; 42 | function isNonEmpty(s) { 43 | return !(/^\s+$/.test(s)); 44 | } 45 | Utility.isNonEmpty = isNonEmpty; 46 | function isValidFilename(filename) { 47 | return /^[a-zA-Z0-9\-_\\/\.]+\.(dat|ldr|mpd)$/i.test(filename); 48 | } 49 | Utility.isValidFilename = isValidFilename; 50 | function logMatrix(matrix) { 51 | var e = matrix.elements; 52 | console.log(e[0], e[4], e[8], e[12]); 53 | console.log(e[1], e[5], e[9], e[13]); 54 | console.log(e[2], e[6], e[10], e[14]); 55 | console.log(e[3], e[7], e[11], e[15]); 56 | console.log('---------------'); 57 | } 58 | Utility.logMatrix = logMatrix; 59 | function hexStringToHexNumber(hexString) { 60 | return parseInt(hexString.replace(/#/g, ''), 16); 61 | } 62 | Utility.hexStringToHexNumber = hexStringToHexNumber; 63 | function fixFilePath(filePath) { 64 | return filePath.toLowerCase().replace(/\\/g, '/'); 65 | } 66 | Utility.fixFilePath = fixFilePath; 67 | function degreesToRadians(degrees) { 68 | return degrees * (Math.PI / 180); 69 | } 70 | Utility.degreesToRadians = degreesToRadians; 71 | function radiansToDegrees(radians) { 72 | return radians * (180 / Math.PI); 73 | } 74 | Utility.radiansToDegrees = radiansToDegrees; 75 | })(Utility = LdrawVisualizer.Utility || (LdrawVisualizer.Utility = {})); 76 | })(LdrawVisualizer || (LdrawVisualizer = {})); 77 | //# sourceMappingURL=utility.js.map -------------------------------------------------------------------------------- /compiled/scripts/utility.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"utility.js","sourceRoot":"","sources":["../../scripts/utility.ts"],"names":["LdrawVisualizer","LdrawVisualizer.Utility","LdrawVisualizer.Utility.isString","LdrawVisualizer.Utility.isNumber","LdrawVisualizer.Utility.isInt","LdrawVisualizer.Utility.isByte","LdrawVisualizer.Utility.isArray","LdrawVisualizer.Utility.isValidColorCode","LdrawVisualizer.Utility.isValidColorHexString","LdrawVisualizer.Utility.isNullOrUndefined","LdrawVisualizer.Utility.hasAtLeastOneNonWhitespaceCharacter","LdrawVisualizer.Utility.isNonEmpty","LdrawVisualizer.Utility.isValidFilename","LdrawVisualizer.Utility.logMatrix","LdrawVisualizer.Utility.hexStringToHexNumber","LdrawVisualizer.Utility.fixFilePath","LdrawVisualizer.Utility.degreesToRadians","LdrawVisualizer.Utility.radiansToDegrees"],"mappings":"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"} -------------------------------------------------------------------------------- /compiled/typings/references.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | /// 7 | /// 8 | /// 9 | /// 10 | /// 11 | /// 12 | /// 13 | /// 14 | /// 15 | /// 16 | /// 17 | //# sourceMappingURL=references.js.map -------------------------------------------------------------------------------- /compiled/typings/references.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"references.js","sourceRoot":"","sources":["../../typings/references.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,8CAA8C;AAC9C,0DAA0D;AAC1D,sDAAsD;AACtD,yDAAyD;AACzD,0DAA0D;AAC1D,oDAAoD;AACpD,yDAAyD;AACzD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,6DAA6D;AAC7D,2CAA2C;AAC3C,gDAAgD;AAChD,sDAAsD;AACtD,4CAA4C"} -------------------------------------------------------------------------------- /dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/dist/favicon.ico -------------------------------------------------------------------------------- /dist/images/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/dist/images/Thumbs.db -------------------------------------------------------------------------------- /dist/images/studlogo-old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/dist/images/studlogo-old.png -------------------------------------------------------------------------------- /dist/images/studlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/dist/images/studlogo.png -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | LDraw Visualizer 4 | 5 | 6 | 7 | 8 | 13 | 14 | 15 |
16 |   Loading model. One moment...
17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /dist/ldraw-visualizer-0.2.0.min.css: -------------------------------------------------------------------------------- 1 | body{margin:0}body #container{overflow:hidden} -------------------------------------------------------------------------------- /dist/models/CAR.DAT: -------------------------------------------------------------------------------- 1 | 0 Car 2 | 0 Name: CAR.ldr 3 | 0 Author: James Jessiman 4 | 0 Original LDraw Model - LDraw beta 0.27 Archive 5 | 0 Car 6 | 0 ROTATION CENTER 0 0 0 1 "Custom" 7 | 0 ROTATION CONFIG 0 0 8 | 1 0 0 0 -90 1 0 0 0 1 0 0 0 1 4315.DAT 9 | 0 STEP 10 | 1 7 0 0 -60 1 0 0 0 1 0 0 0 1 4600.DAT 11 | 0 STEP 12 | 1 0 0 0 0 1 0 0 0 1 0 0 0 1 3031.DAT 13 | 0 STEP 14 | 1 7 0 0 60 1 0 0 0 1 0 0 0 1 4600.DAT 15 | 0 STEP 16 | 1 0 0 0 90 -1 0 0 0 1 0 0 0 -1 4315.DAT 17 | 0 STEP 18 | 1 46 30 -8 -90 1 0 0 0 1 0 0 0 1 3024.DAT 19 | 0 STEP 20 | 1 46 -30 -8 -90 1 0 0 0 1 0 0 0 1 3024.DAT 21 | 0 STEP 22 | 1 4 0 -8 -60 0 0 1 0 1 0 -1 0 0 3020.DAT 23 | 0 STEP 24 | 1 4 30 -8 -10 0 0 1 0 1 0 -1 0 0 101.dat 25 | 0 STEP 26 | 1 4 -30 -8 -10 0 0 1 0 1 0 -1 0 0 101.dat 27 | 0 STEP 28 | 1 4 30 -8 30 1 0 0 0 1 0 0 0 1 3024.DAT 29 | 0 STEP 30 | 1 4 -30 -8 30 1 0 0 0 1 0 0 0 1 3024.DAT 31 | 0 STEP 32 | 1 4 0 -8 50 0 0 1 0 1 0 -1 0 0 3021.DAT 33 | 0 STEP 34 | 1 4 0 -8 90 1 0 0 0 1 0 0 0 1 3710.DAT 35 | 0 STEP 36 | 1 1 0 -8 0 1 0 0 0 1 0 0 0 1 4079.DAT 37 | 0 STEP 38 | 1 46 30 -16 90 1 0 0 0 1 0 0 0 1 3024.DAT 39 | 0 STEP 40 | 1 46 -30 -16 90 1 0 0 0 1 0 0 0 1 3024.DAT 41 | 0 STEP 42 | 1 4 0 -16 -30 1 0 0 0 1 0 0 0 1 3829.DAT 43 | 0 STEP 44 | 1 4 0 -24 -60 1 0 0 0 1 0 0 0 1 3788.DAT 45 | 0 STEP 46 | 1 4 0 -24 60 1 0 0 0 1 0 0 0 1 3788.DAT 47 | 0 STEP 48 | 1 36 30 -24 90 1 0 0 0 1 0 0 0 1 3024.DAT 49 | 0 STEP 50 | 1 36 -30 -24 90 1 0 0 0 1 0 0 0 1 3024.DAT 51 | 0 STEP 52 | 1 7 0 -32 -90 1 0 0 0 1 0 0 0 1 3937.DAT 53 | 0 STEP 54 | 1 7 0 -32 -90 1 0 0 0 1 0 0 0 1 3938.DAT 55 | 0 STEP 56 | 1 4 30 -32 -90 1 0 0 0 1 0 0 0 1 157.dat 57 | 0 STEP 58 | 1 4 -30 -32 -90 1 0 0 0 1 0 0 0 1 157.dat 59 | 0 STEP 60 | 1 46 30 -22 -104 1 0 0 0 0 -1 0 1 0 179.dat 61 | 0 STEP 62 | 1 46 -30 -22 -104 1 0 0 0 0 -1 0 1 0 179.dat 63 | 0 STEP 64 | 1 4 30 -32 -60 0 0 1 0 1 0 -1 0 0 3023.DAT 65 | 0 STEP 66 | 1 4 -30 -32 -60 0 0 1 0 1 0 -1 0 0 3023.DAT 67 | 0 STEP 68 | 1 4 30 -32 -30 1 0 0 0 1 0 0 0 1 141.dat 69 | 0 STEP 70 | 1 4 -30 -32 -30 1 0 0 0 1 0 0 0 1 140.dat 71 | 0 STEP 72 | 1 4 30 -32 30 1 0 0 0 1 0 0 0 1 3005.DAT 73 | 0 STEP 74 | 1 4 -30 -32 30 1 0 0 0 1 0 0 0 1 3005.DAT 75 | 0 STEP 76 | 1 4 30 -32 70 0 0 1 0 1 0 -1 0 0 101.dat 77 | 0 STEP 78 | 1 4 -30 -32 70 0 0 1 0 1 0 -1 0 0 101.dat 79 | 0 STEP 80 | 1 4 0 -32 90 1 0 0 0 1 0 0 0 1 3004.DAT 81 | 0 STEP 82 | 1 4 30 -40 -80 0 0 1 0 1 0 -1 0 0 3023.DAT 83 | 0 STEP 84 | 1 4 -30 -40 -80 0 0 1 0 1 0 -1 0 0 3023.DAT 85 | 0 STEP 86 | 1 4 0 -40 -50 1 0 0 0 1 0 0 0 1 3004.DAT 87 | 0 STEP 88 | 1 4 30 -40 -40 0 0 1 0 1 0 -1 0 0 3023.DAT 89 | 0 STEP 90 | 1 4 -30 -40 -40 0 0 1 0 1 0 -1 0 0 3023.DAT 91 | 0 STEP 92 | 1 0 30 -40 40 0 0 1 0 1 0 -1 0 0 3023.DAT 93 | 0 STEP 94 | 1 0 -30 -40 40 0 0 1 0 1 0 -1 0 0 3023.DAT 95 | 0 STEP 96 | 1 0 30 -40 70 1 0 0 0 1 0 0 0 1 3024.DAT 97 | 0 STEP 98 | 1 0 -30 -40 70 1 0 0 0 1 0 0 0 1 3024.DAT 99 | 0 STEP 100 | 1 0 0 -40 90 1 0 0 0 1 0 0 0 1 3710.DAT 101 | 0 STEP 102 | 1 39 0 -88 -30 1 0 0 0 1 0 0 0 1 3823.DAT 103 | 0 STEP 104 | 1 0 0 -88 30 1 0 0 0 1 0 0 0 1 4214.DAT 105 | 0 STEP 106 | 1 39 0 -88 70 -1 0 0 0 1 0 0 0 -1 3823.DAT 107 | 0 STEP 108 | 1 0 0 -96 0 1 0 0 0 1 0 0 0 1 4213.DAT 109 | 0 STEP 110 | 1 0 0 -96 60 1 0 0 0 1 0 0 0 1 3020.DAT 111 | 0 STEP 112 | 1 7 -30 6 60 0 0 1 0 1 0 -1 0 0 4601.dat 113 | 0 STEP 114 | 1 7 30 6 60 0 0 -1 0 1 0 1 0 0 4601.dat 115 | 0 STEP 116 | 1 7 -30 6 -60 0 0 1 0 1 0 -1 0 0 4601.dat 117 | 0 STEP 118 | 1 7 30 6 -60 0 0 -1 0 1 0 1 0 0 4601.dat 119 | 0 STEP 120 | 1 0 -30 6 60 0 0 1 0 1 0 -1 0 0 123.dat 121 | 0 STEP 122 | 1 0 30 6 60 0 0 -1 0 1 0 1 0 0 123.dat 123 | 0 STEP 124 | 1 0 -30 6 -60 0 0 1 0 1 0 -1 0 0 123.dat 125 | 0 STEP 126 | 1 0 30 6 -60 0 0 -1 0 1 0 1 0 0 123.dat 127 | 0 STEP 128 | 1 7 -10 -34 -70 0 0 -1 0 1 0 1 0 0 3062B.DAT 129 | 0 STEP 130 | 1 7 10 -34 -70 0 0 -1 0 1 0 1 0 0 3062B.DAT 131 | 0 STEP 132 | 1 7 0 -42 -90 -1 0 0 0 1 0 0 0 -1 3069BP05.DAT 133 | 0 STEP 134 | 1 7 0 -42 -70 -1 0 0 0 1 0 0 0 -1 3023.DAT 135 | 0 136 | -------------------------------------------------------------------------------- /dist/models/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/dist/models/Thumbs.db -------------------------------------------------------------------------------- /dist/server/parts-server/parts-server.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | // to set up node and apache to run on the same server: http://stackoverflow.com/a/18604082/1063392 4 | var express = require('express'); 5 | var bodyParser = require('body-parser'); 6 | var fileFetcher = require('./file-fetcher'); 7 | var domain = require('domain'); 8 | var app = express(); 9 | app.use(bodyParser.urlencoded({ extended: false, limit: 1048576 })); 10 | app.post('/', function (req, res) { 11 | var d = domain.create(); 12 | var responseHasBeenSent = false; 13 | d.on('error', function (er) { 14 | if (!responseHasBeenSent) { 15 | responseHasBeenSent = true; 16 | console.log(er); 17 | res.status(500).send(er); 18 | } 19 | }); 20 | d.run(function () { 21 | fileFetcher.fetchFiles(req.body.file, function (allFiles) { 22 | res.status(200).send(allFiles); 23 | }); 24 | }); 25 | }); 26 | var server = app.listen(17352); 27 | //# sourceMappingURL=parts-server.js.map -------------------------------------------------------------------------------- /dist/server/parts-server/parts-server.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"parts-server.js","sourceRoot":"","sources":["../../parts-server/parts-server.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,0CAA0C;AAE1C,mGAAmG;AAEnG,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AACjC,IAAI,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AACxC,IAAI,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC5C,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC/B,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;AACpB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAEpE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,UAAC,GAAG,EAAE,GAAG;IACtB,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IACxB,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,UAAS,EAAE;QACxB,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC1B,mBAAmB,GAAG,IAAI,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,CAAC;QACL,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,UAAC,QAAkB;YACxD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC"} -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/favicon.ico -------------------------------------------------------------------------------- /fll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/fll.png -------------------------------------------------------------------------------- /gearbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/gearbox.png -------------------------------------------------------------------------------- /images/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/images/Thumbs.db -------------------------------------------------------------------------------- /images/studlogo-old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/images/studlogo-old.png -------------------------------------------------------------------------------- /images/studlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/images/studlogo.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | LDraw Visualizer 4 | 5 | 6 | 7 | 8 | 13 | 14 | 15 |
16 |   Loading model. One moment...
17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /lib/threejs/Detector.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author alteredq / http://alteredqualia.com/ 3 | * @author mr.doob / http://mrdoob.com/ 4 | */ 5 | 6 | var Detector = { 7 | 8 | canvas: !! window.CanvasRenderingContext2D, 9 | webgl: ( function () { try { var canvas = document.createElement( 'canvas' ); return !! ( window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ) ); } catch ( e ) { return false; } } )(), 10 | workers: !! window.Worker, 11 | fileapi: window.File && window.FileReader && window.FileList && window.Blob, 12 | 13 | getWebGLErrorMessage: function () { 14 | 15 | var element = document.createElement( 'div' ); 16 | element.id = 'webgl-error-message'; 17 | element.style.fontFamily = 'monospace'; 18 | element.style.fontSize = '13px'; 19 | element.style.fontWeight = 'normal'; 20 | element.style.textAlign = 'center'; 21 | element.style.background = '#fff'; 22 | element.style.color = '#000'; 23 | element.style.padding = '1.5em'; 24 | element.style.width = '400px'; 25 | element.style.margin = '5em auto 0'; 26 | 27 | if ( ! this.webgl ) { 28 | 29 | element.innerHTML = window.WebGLRenderingContext ? [ 30 | 'Your graphics card does not seem to support WebGL.
', 31 | 'Find out how to get it here.' 32 | ].join( '\n' ) : [ 33 | 'Your browser does not seem to support WebGL.
', 34 | 'Find out how to get it here.' 35 | ].join( '\n' ); 36 | 37 | } 38 | 39 | return element; 40 | 41 | }, 42 | 43 | addGetWebGLMessage: function ( parameters ) { 44 | 45 | var parent, id, element; 46 | 47 | parameters = parameters || {}; 48 | 49 | parent = parameters.parent !== undefined ? parameters.parent : document.body; 50 | id = parameters.id !== undefined ? parameters.id : 'oldie'; 51 | 52 | element = Detector.getWebGLErrorMessage(); 53 | element.id = id; 54 | 55 | parent.appendChild( element ); 56 | 57 | } 58 | 59 | }; 60 | 61 | // browserify support 62 | if ( typeof module === 'object' ) { 63 | 64 | module.exports = Detector; 65 | 66 | } 67 | -------------------------------------------------------------------------------- /models/CAR.DAT: -------------------------------------------------------------------------------- 1 | 0 Car 2 | 0 Name: CAR.ldr 3 | 0 Author: James Jessiman 4 | 0 Original LDraw Model - LDraw beta 0.27 Archive 5 | 0 Car 6 | 0 ROTATION CENTER 0 0 0 1 "Custom" 7 | 0 ROTATION CONFIG 0 0 8 | 1 0 0 0 -90 1 0 0 0 1 0 0 0 1 4315.DAT 9 | 0 STEP 10 | 1 7 0 0 -60 1 0 0 0 1 0 0 0 1 4600.DAT 11 | 0 STEP 12 | 1 0 0 0 0 1 0 0 0 1 0 0 0 1 3031.DAT 13 | 0 STEP 14 | 1 7 0 0 60 1 0 0 0 1 0 0 0 1 4600.DAT 15 | 0 STEP 16 | 1 0 0 0 90 -1 0 0 0 1 0 0 0 -1 4315.DAT 17 | 0 STEP 18 | 1 46 30 -8 -90 1 0 0 0 1 0 0 0 1 3024.DAT 19 | 0 STEP 20 | 1 46 -30 -8 -90 1 0 0 0 1 0 0 0 1 3024.DAT 21 | 0 STEP 22 | 1 4 0 -8 -60 0 0 1 0 1 0 -1 0 0 3020.DAT 23 | 0 STEP 24 | 1 4 30 -8 -10 0 0 1 0 1 0 -1 0 0 101.dat 25 | 0 STEP 26 | 1 4 -30 -8 -10 0 0 1 0 1 0 -1 0 0 101.dat 27 | 0 STEP 28 | 1 4 30 -8 30 1 0 0 0 1 0 0 0 1 3024.DAT 29 | 0 STEP 30 | 1 4 -30 -8 30 1 0 0 0 1 0 0 0 1 3024.DAT 31 | 0 STEP 32 | 1 4 0 -8 50 0 0 1 0 1 0 -1 0 0 3021.DAT 33 | 0 STEP 34 | 1 4 0 -8 90 1 0 0 0 1 0 0 0 1 3710.DAT 35 | 0 STEP 36 | 1 1 0 -8 0 1 0 0 0 1 0 0 0 1 4079.DAT 37 | 0 STEP 38 | 1 46 30 -16 90 1 0 0 0 1 0 0 0 1 3024.DAT 39 | 0 STEP 40 | 1 46 -30 -16 90 1 0 0 0 1 0 0 0 1 3024.DAT 41 | 0 STEP 42 | 1 4 0 -16 -30 1 0 0 0 1 0 0 0 1 3829.DAT 43 | 0 STEP 44 | 1 4 0 -24 -60 1 0 0 0 1 0 0 0 1 3788.DAT 45 | 0 STEP 46 | 1 4 0 -24 60 1 0 0 0 1 0 0 0 1 3788.DAT 47 | 0 STEP 48 | 1 36 30 -24 90 1 0 0 0 1 0 0 0 1 3024.DAT 49 | 0 STEP 50 | 1 36 -30 -24 90 1 0 0 0 1 0 0 0 1 3024.DAT 51 | 0 STEP 52 | 1 7 0 -32 -90 1 0 0 0 1 0 0 0 1 3937.DAT 53 | 0 STEP 54 | 1 7 0 -32 -90 1 0 0 0 1 0 0 0 1 3938.DAT 55 | 0 STEP 56 | 1 4 30 -32 -90 1 0 0 0 1 0 0 0 1 157.dat 57 | 0 STEP 58 | 1 4 -30 -32 -90 1 0 0 0 1 0 0 0 1 157.dat 59 | 0 STEP 60 | 1 46 30 -22 -104 1 0 0 0 0 -1 0 1 0 179.dat 61 | 0 STEP 62 | 1 46 -30 -22 -104 1 0 0 0 0 -1 0 1 0 179.dat 63 | 0 STEP 64 | 1 4 30 -32 -60 0 0 1 0 1 0 -1 0 0 3023.DAT 65 | 0 STEP 66 | 1 4 -30 -32 -60 0 0 1 0 1 0 -1 0 0 3023.DAT 67 | 0 STEP 68 | 1 4 30 -32 -30 1 0 0 0 1 0 0 0 1 141.dat 69 | 0 STEP 70 | 1 4 -30 -32 -30 1 0 0 0 1 0 0 0 1 140.dat 71 | 0 STEP 72 | 1 4 30 -32 30 1 0 0 0 1 0 0 0 1 3005.DAT 73 | 0 STEP 74 | 1 4 -30 -32 30 1 0 0 0 1 0 0 0 1 3005.DAT 75 | 0 STEP 76 | 1 4 30 -32 70 0 0 1 0 1 0 -1 0 0 101.dat 77 | 0 STEP 78 | 1 4 -30 -32 70 0 0 1 0 1 0 -1 0 0 101.dat 79 | 0 STEP 80 | 1 4 0 -32 90 1 0 0 0 1 0 0 0 1 3004.DAT 81 | 0 STEP 82 | 1 4 30 -40 -80 0 0 1 0 1 0 -1 0 0 3023.DAT 83 | 0 STEP 84 | 1 4 -30 -40 -80 0 0 1 0 1 0 -1 0 0 3023.DAT 85 | 0 STEP 86 | 1 4 0 -40 -50 1 0 0 0 1 0 0 0 1 3004.DAT 87 | 0 STEP 88 | 1 4 30 -40 -40 0 0 1 0 1 0 -1 0 0 3023.DAT 89 | 0 STEP 90 | 1 4 -30 -40 -40 0 0 1 0 1 0 -1 0 0 3023.DAT 91 | 0 STEP 92 | 1 0 30 -40 40 0 0 1 0 1 0 -1 0 0 3023.DAT 93 | 0 STEP 94 | 1 0 -30 -40 40 0 0 1 0 1 0 -1 0 0 3023.DAT 95 | 0 STEP 96 | 1 0 30 -40 70 1 0 0 0 1 0 0 0 1 3024.DAT 97 | 0 STEP 98 | 1 0 -30 -40 70 1 0 0 0 1 0 0 0 1 3024.DAT 99 | 0 STEP 100 | 1 0 0 -40 90 1 0 0 0 1 0 0 0 1 3710.DAT 101 | 0 STEP 102 | 1 39 0 -88 -30 1 0 0 0 1 0 0 0 1 3823.DAT 103 | 0 STEP 104 | 1 0 0 -88 30 1 0 0 0 1 0 0 0 1 4214.DAT 105 | 0 STEP 106 | 1 39 0 -88 70 -1 0 0 0 1 0 0 0 -1 3823.DAT 107 | 0 STEP 108 | 1 0 0 -96 0 1 0 0 0 1 0 0 0 1 4213.DAT 109 | 0 STEP 110 | 1 0 0 -96 60 1 0 0 0 1 0 0 0 1 3020.DAT 111 | 0 STEP 112 | 1 7 -30 6 60 0 0 1 0 1 0 -1 0 0 4601.dat 113 | 0 STEP 114 | 1 7 30 6 60 0 0 -1 0 1 0 1 0 0 4601.dat 115 | 0 STEP 116 | 1 7 -30 6 -60 0 0 1 0 1 0 -1 0 0 4601.dat 117 | 0 STEP 118 | 1 7 30 6 -60 0 0 -1 0 1 0 1 0 0 4601.dat 119 | 0 STEP 120 | 1 0 -30 6 60 0 0 1 0 1 0 -1 0 0 123.dat 121 | 0 STEP 122 | 1 0 30 6 60 0 0 -1 0 1 0 1 0 0 123.dat 123 | 0 STEP 124 | 1 0 -30 6 -60 0 0 1 0 1 0 -1 0 0 123.dat 125 | 0 STEP 126 | 1 0 30 6 -60 0 0 -1 0 1 0 1 0 0 123.dat 127 | 0 STEP 128 | 1 7 -10 -34 -70 0 0 -1 0 1 0 1 0 0 3062B.DAT 129 | 0 STEP 130 | 1 7 10 -34 -70 0 0 -1 0 1 0 1 0 0 3062B.DAT 131 | 0 STEP 132 | 1 7 0 -42 -90 -1 0 0 0 1 0 0 0 -1 3069BP05.DAT 133 | 0 STEP 134 | 1 7 0 -42 -70 -1 0 0 0 1 0 0 0 -1 3023.DAT 135 | 0 136 | -------------------------------------------------------------------------------- /models/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/models/Thumbs.db -------------------------------------------------------------------------------- /models/test.ldr: -------------------------------------------------------------------------------- 1 | 0 Untitled 2 | 0 Name: test.ldr 3 | 0 Author: LDraw 4 | 0 !LDRAW_ORG Unofficial_Part 5 | 0 ROTATION CENTER 0 0 0 1 "Custom" 6 | 0 ROTATION CONFIG 0 0 7 | 0 //1 27 0 0 0 -1 0 0 0 0.984808 -0.173648 0 -0.173648 -0.984808 47753.dat 8 | 9 | 4 27 0 0 0 50 0 0 50 -50 0 0 -50 0 10 | 4 27 0 -50 0 50 -50 0 50 -70 50 0 -70 50 11 | 4 27 50 0 0 70 0 50 70 -50 50 50 -50 0 12 | 5 27 50 0 0 50 -50 0 0 0 0 0 0 0 13 | 5 27 0 -50 0 50 -50 0 0 0 0 0 0 0 14 | 15 | 0 16 | -------------------------------------------------------------------------------- /models/test2.ldr: -------------------------------------------------------------------------------- 1 | 0 Untitled 2 | 0 Name: test2.ldr 3 | 0 Author: LDraw 4 | 0 Unofficial Model 5 | 0 ROTATION CENTER 0 0 0 1 "Custom" 6 | 0 ROTATION CONFIG 0 0 7 | 1 27 0 0 0 1 0 0 0 0.819152 -0.573576 0 0.573576 0.819152 47753.dat 8 | 0 9 | -------------------------------------------------------------------------------- /motorcycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nfriend/ldraw-visualizer/a4bb31b598066e29d94dc1d3c224daadbc6ad3b0/motorcycle.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ldraw-visualizer", 3 | "version": "0.2.0", 4 | "devDependencies": { 5 | "grunt": "~0.4.5", 6 | "grunt-contrib-clean": "^0.6.0", 7 | "grunt-contrib-connect": "^0.10.1", 8 | "grunt-contrib-copy": "^0.8.0", 9 | "grunt-contrib-cssmin": "^0.12.3", 10 | "grunt-contrib-htmlmin": "^0.4.0", 11 | "grunt-contrib-jshint": "^0.11.2", 12 | "grunt-contrib-less": "^1.0.1", 13 | "grunt-contrib-nodeunit": "~0.4.1", 14 | "grunt-contrib-uglify": "^0.9.1", 15 | "grunt-contrib-watch": "^0.6.1", 16 | "grunt-dom-munger": "^3.4.0" 17 | }, 18 | "dependencies": { 19 | "body-parser": "^1.13.1", 20 | "express": "^4.13.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /parts-server/parts-server.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // to set up node and apache to run on the same server: http://stackoverflow.com/a/18604082/1063392 5 | 6 | var express = require('express'); 7 | var bodyParser = require('body-parser'); 8 | var fileFetcher = require('./file-fetcher'); 9 | var domain = require('domain'); 10 | var app = express(); 11 | app.use(bodyParser.urlencoded({ extended: false, limit: 1048576 })); 12 | 13 | app.post('/', (req, res) => { 14 | var d = domain.create(); 15 | var responseHasBeenSent = false; 16 | d.on('error', function(er) { 17 | if (!responseHasBeenSent) { 18 | responseHasBeenSent = true; 19 | console.log(er); 20 | res.status(500).send(er); 21 | } 22 | }); 23 | d.run(function() { 24 | var start = Date.now(); 25 | fileFetcher.fetchFiles(req.body.file, (allFiles: string[]) => { 26 | console.log('request took ' + (Date.now() - start) + ' ms to complete'); 27 | res.status(200).send(allFiles); 28 | }); 29 | }); 30 | }); 31 | 32 | var server = app.listen(17352); 33 | -------------------------------------------------------------------------------- /scripts/parser/Color.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser { 5 | export class Color { 6 | constructor(hexValue: string) { 7 | this.HexValue = hexValue; 8 | } 9 | 10 | HexValue: string; 11 | 12 | IsValid(): boolean { 13 | return Utility.isValidColorHexString(this.HexValue); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /scripts/parser/Coordinates.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser { 5 | export class Coordinates { 6 | 7 | constructor(x: number, y: number, z: number) { 8 | this.X = x; 9 | this.Y = y; 10 | this.Z = z; 11 | } 12 | 13 | X: number; 14 | Y: number; 15 | Z: number; 16 | 17 | IsValid(): boolean { 18 | return Utility.isNumber(this.X) 19 | && Utility.isNumber(this.Y) 20 | && Utility.isNumber(this.Z); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /scripts/parser/FileService.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | 6 | import SubFileReferenceLine = LdrawVisualizer.Parser.Lines.SubFileReferenceLine; 7 | import LdrawFileLineType = LdrawVisualizer.Parser.Lines.LdrawFileLineType; 8 | 9 | module LdrawVisualizer { 10 | 11 | export class FileService { 12 | 13 | static GetLdrawFile(ldrawFile: string, callback: (file: LdrawFile, ldconfig: LdrawFile) => void, isDev: boolean = true) { 14 | var returnFile: LdrawFile, 15 | url = isDev ? 'http://localhost:17352/' : './parts-server'; 16 | 17 | $.ajax({ 18 | type: 'POST', 19 | url: url, 20 | data: { file: ldrawFile }, 21 | success: (files: { [filename: string]: string }) => { 22 | var parsedFiles: { [filename: string]: LdrawFile } = {}; 23 | 24 | // parse each line into a LdrawFile object 25 | for (var prop in files) { 26 | if (files.hasOwnProperty(prop)) { 27 | parsedFiles[prop] = (Parser.FileParser.Parse(files[prop])); 28 | } 29 | } 30 | 31 | var rootFile = parsedFiles['$rootfile$'], 32 | ldConfig = parsedFiles['LDConfig.ldr']; 33 | 34 | // break any .mpd subparts into their own "parts" 35 | var mpdSubFiles = rootFile.Lines.filter(l => l.LineType === LdrawFileLineType.File) 36 | for (var i = mpdSubFiles.length - 1; i > 0; i--) { 37 | var mpdLine = mpdSubFiles[i], 38 | originalIndex = rootFile.Lines.indexOf(mpdLine); 39 | 40 | console.log('found subpart number ' + i + ', chopping off starting at ' + originalIndex); 41 | 42 | var newSubpartLdrawFile = new LdrawFile(); 43 | newSubpartLdrawFile.Lines = rootFile.Lines.splice(originalIndex, rootFile.Lines.length /* to the end of the array */); 44 | parsedFiles[Utility.fixFilePath(mpdLine.Filename)] = newSubpartLdrawFile; 45 | } 46 | 47 | // console.log(rootFile); 48 | // console.log(parsedFiles['Core.ldr']); 49 | // console.log('hello'); 50 | 51 | // link up subfile references lines to their SubFileReferenceLine instances 52 | for (var prop in parsedFiles) { 53 | if (parsedFiles.hasOwnProperty(prop)) { 54 | parsedFiles[prop].Lines.filter(l => l.LineType === LdrawFileLineType.SubFileReference).forEach(l => { 55 | var subfile = (l); 56 | subfile.File = parsedFiles[Utility.fixFilePath(subfile.Filename)]; 57 | }); 58 | } 59 | } 60 | 61 | callback(rootFile, ldConfig); 62 | }, 63 | dataType: 'JSON' 64 | }); 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /scripts/parser/LdrawFile.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | 5 | module LdrawVisualizer { 6 | export class LdrawFile { 7 | Lines: Parser.Lines.LdrawFileLine[] = []; 8 | 9 | IsValid(): boolean { 10 | return this.Lines.every(l => l.IsValid()); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /scripts/parser/lines/CommentLine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | 7 | module LdrawVisualizer.Parser.Lines { 8 | export class CommentLine extends LdrawFileLine { 9 | constructor(lineContent: string) { 10 | super(LdrawFileLineType.Comment) 11 | 12 | this.LineContent = lineContent; 13 | } 14 | 15 | LineContent: string; 16 | 17 | IsValid(): boolean { 18 | return true; 19 | } 20 | 21 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.CommentLine { 22 | return new Lines.CommentLine(line.substring(line.indexOf('0') + 2)); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /scripts/parser/lines/LdrawFileLine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | 6 | module LdrawVisualizer.Parser.Lines { 7 | export class LdrawFileLine { 8 | constructor(lineType: LdrawFileLineType) { 9 | this.LineType = lineType; 10 | } 11 | 12 | LineType: LdrawFileLineType; 13 | 14 | IsValid(): boolean { 15 | throw 'This method is abstract and should be overriden in a derived class - it should not be called directly'; 16 | } 17 | 18 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.LdrawFileLine { 19 | throw 'This method is abstract and should be overriden in a derived class - it should not be called directly'; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /scripts/parser/lines/LineLine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | 7 | module LdrawVisualizer.Parser.Lines { 8 | export class LineLine extends LdrawFileLine { 9 | constructor(color: number, point1: Coordinates, point2: Coordinates) { 10 | super(LdrawFileLineType.Line); 11 | 12 | this.Point1 = point1; 13 | this.Point2 = point2; 14 | } 15 | 16 | Point1: Coordinates; 17 | Point2: Coordinates; 18 | 19 | IsValid(): boolean { 20 | return this.Point1.IsValid() 21 | && this.Point2.IsValid(); 22 | } 23 | 24 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.LineLine { 25 | var point1Coords = new Coordinates(parseFloat(splitLine[2]), parseFloat(splitLine[3]), parseFloat(splitLine[4])), 26 | point2Coords = new Coordinates(parseFloat(splitLine[5]), parseFloat(splitLine[6]), parseFloat(splitLine[7])), 27 | lineLine = new Lines.LineLine(parseInt(splitLine[1], 10), point1Coords, point2Coords); 28 | 29 | if (!lineLine.IsValid()) { 30 | throw 'Unable to parse line line: Invalid line arguments on line ' + lineNumber; 31 | } 32 | 33 | return lineLine; 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /scripts/parser/lines/LineTypes.ts: -------------------------------------------------------------------------------- 1 | module LdrawVisualizer.Parser.Lines { 2 | export enum LdrawFileLineType { 3 | Comment = 0, 4 | SubFileReference = 1, 5 | Line = 2, 6 | Triangle = 3, 7 | Quadrilateral = 4, 8 | OptionalLine = 5, 9 | Colour = 6, 10 | Step = 7, 11 | Name = 8, 12 | Author = 9, 13 | RotationCenter = 10, 14 | RotationConfig = 11, 15 | RotationStep = 12, 16 | LDrawOrg = 13, 17 | File = 14, 18 | NoFile = 15 19 | } 20 | } -------------------------------------------------------------------------------- /scripts/parser/lines/OptionalLineLine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | /// 7 | 8 | module LdrawVisualizer.Parser.Lines { 9 | export class OptionalLineLine extends LdrawFileLine { 10 | constructor(color: number, point1: Coordinates, point2: Coordinates, controlPoint1: Coordinates, controlPoint2: Coordinates) { 11 | super(LdrawFileLineType.OptionalLine); 12 | 13 | this.Color = color; 14 | this.Point1 = point1; 15 | this.Point2 = point2; 16 | this.ControlPoint1 = controlPoint1; 17 | this.ControlPoint2 = controlPoint2; 18 | } 19 | 20 | Color: number; 21 | Point1: Coordinates; 22 | Point2: Coordinates; 23 | ControlPoint1: Coordinates; 24 | ControlPoint2: Coordinates; 25 | 26 | IsValid(): boolean { 27 | return Utility.isValidColorCode(this.Color) 28 | && this.Point1.IsValid() 29 | && this.Point2.IsValid() 30 | && this.ControlPoint1.IsValid() 31 | && this.ControlPoint2.IsValid(); 32 | } 33 | 34 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.OptionalLineLine { 35 | var point1Coords = new Coordinates(parseFloat(splitLine[2]), parseFloat(splitLine[3]), parseFloat(splitLine[4])), 36 | point2Coords = new Coordinates(parseFloat(splitLine[5]), parseFloat(splitLine[6]), parseFloat(splitLine[7])), 37 | controlPoint1Coords = new Coordinates(parseFloat(splitLine[8]), parseFloat(splitLine[9]), parseFloat(splitLine[10])), 38 | controlPoint2Coords = new Coordinates(parseFloat(splitLine[11]), parseFloat(splitLine[12]), parseFloat(splitLine[13])), 39 | optLine = new Lines.OptionalLineLine(parseInt(splitLine[1], 10), point1Coords, point2Coords, controlPoint1Coords, controlPoint2Coords); 40 | 41 | if (!optLine.IsValid()) { 42 | throw 'Unable to parse optional line: Invalid line arguments on line ' + lineNumber; 43 | } 44 | 45 | return optLine; 46 | } 47 | } 48 | } -------------------------------------------------------------------------------- /scripts/parser/lines/QuadrilateralLine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | 7 | module LdrawVisualizer.Parser.Lines { 8 | export class QuadrilateralLine extends LdrawFileLine { 9 | constructor(color: number, point1: Coordinates, point2: Coordinates, point3: Coordinates, point4: Coordinates) { 10 | super(LdrawFileLineType.Quadrilateral); 11 | 12 | this.Color = color; 13 | this.Point1 = point1; 14 | this.Point2 = point2; 15 | this.Point3 = point3; 16 | this.Point4 = point4; 17 | } 18 | 19 | Color: number; 20 | Point1: Coordinates; 21 | Point2: Coordinates; 22 | Point3: Coordinates; 23 | Point4: Coordinates; 24 | 25 | IsValid(): boolean { 26 | return Utility.isValidColorCode(this.Color) 27 | && this.Point1.IsValid() 28 | && this.Point2.IsValid() 29 | && this.Point3.IsValid() 30 | && this.Point4.IsValid(); 31 | } 32 | 33 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.QuadrilateralLine { 34 | var point1Coords = new Coordinates(parseFloat(splitLine[2]), parseFloat(splitLine[3]), parseFloat(splitLine[4])), 35 | point2Coords = new Coordinates(parseFloat(splitLine[5]), parseFloat(splitLine[6]), parseFloat(splitLine[7])), 36 | point3Coords = new Coordinates(parseFloat(splitLine[8]), parseFloat(splitLine[9]), parseFloat(splitLine[10])), 37 | point4Coords = new Coordinates(parseFloat(splitLine[11]), parseFloat(splitLine[12]), parseFloat(splitLine[13])), 38 | quadLine = new Lines.QuadrilateralLine(parseInt(splitLine[1], 10), point1Coords, point2Coords, point3Coords, point4Coords); 39 | 40 | if (!quadLine.IsValid()) { 41 | throw 'Unable to parse quadrilateral line: Invalid line arguments on line ' + lineNumber; 42 | } 43 | 44 | return quadLine; 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /scripts/parser/lines/SubFileReferenceLine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | 7 | module LdrawVisualizer.Parser.Lines { 8 | export class SubFileReferenceLine extends LdrawFileLine { 9 | constructor(color: number, coordinates: Coordinates, transformMatrix: number[][], filename: string) { 10 | super(LdrawFileLineType.SubFileReference); 11 | 12 | this.Color = color; 13 | this.Coordinates = coordinates; 14 | this.TransformMatrix = transformMatrix; 15 | this.Filename = filename; 16 | } 17 | 18 | Color: number; 19 | Coordinates: Coordinates; 20 | TransformMatrix: number[][]; 21 | Filename: string; 22 | File: LdrawFile; 23 | 24 | IsValid(): boolean { 25 | var transformMatrixIsValid = this.TransformMatrix && this.TransformMatrix.length === 3 26 | if (transformMatrixIsValid) { 27 | outer: for (var i = 0; i < 3; i++) { 28 | if (Utility.isArray(this.TransformMatrix[i]) && this.TransformMatrix[i].length === 3) { 29 | for (var j = 0; j < 3; j++) { 30 | if (!Utility.isNumber(this.TransformMatrix[i][j])) { 31 | transformMatrixIsValid = false; 32 | break outer; 33 | } 34 | } 35 | } else { 36 | transformMatrixIsValid = false; 37 | break; 38 | } 39 | } 40 | } 41 | 42 | return (Utility.isValidColorCode(this.Color) 43 | && this.Coordinates.IsValid() 44 | && transformMatrixIsValid 45 | && Utility.hasAtLeastOneNonWhitespaceCharacter(this.Filename)); 46 | } 47 | 48 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.SubFileReferenceLine { 49 | var coords = new Coordinates(parseFloat(splitLine[2]), parseFloat(splitLine[3]), parseFloat(splitLine[4])), 50 | matrix = [ 51 | [parseFloat(splitLine[5]), parseFloat(splitLine[6]), parseFloat(splitLine[7])], 52 | [parseFloat(splitLine[8]), parseFloat(splitLine[9]), parseFloat(splitLine[10])], 53 | [parseFloat(splitLine[11]), parseFloat(splitLine[12]), parseFloat(splitLine[13])] 54 | ], 55 | refLine = new Lines.SubFileReferenceLine(parseInt(splitLine[1], 10), coords, matrix, line.substring(line.indexOf(splitLine[14])).trim()); 56 | 57 | if (!refLine.IsValid()) { 58 | throw 'Unable to parse subfile reference line: Invalid line arguments on line ' + lineNumber; 59 | } 60 | 61 | return refLine; 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /scripts/parser/lines/TriangleLine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | 7 | module LdrawVisualizer.Parser.Lines { 8 | export class TriangleLine extends LdrawFileLine { 9 | constructor(color: number, point1: Coordinates, point2: Coordinates, point3: Coordinates) { 10 | super(LdrawFileLineType.Triangle); 11 | 12 | this.Color = color; 13 | this.Point1 = point1; 14 | this.Point2 = point2; 15 | this.Point3 = point3; 16 | } 17 | 18 | Color: number; 19 | Point1: Coordinates; 20 | Point2: Coordinates; 21 | Point3: Coordinates; 22 | 23 | IsValid(): boolean { 24 | return Utility.isValidColorCode(this.Color) 25 | && this.Point1.IsValid() 26 | && this.Point2.IsValid() 27 | && this.Point3.IsValid(); 28 | } 29 | 30 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.TriangleLine { 31 | var point1Coords = new Coordinates(parseFloat(splitLine[2]), parseFloat(splitLine[3]), parseFloat(splitLine[4])), 32 | point2Coords = new Coordinates(parseFloat(splitLine[5]), parseFloat(splitLine[6]), parseFloat(splitLine[7])), 33 | point3Coords = new Coordinates(parseFloat(splitLine[8]), parseFloat(splitLine[9]), parseFloat(splitLine[10])), 34 | triangleLine = new Lines.TriangleLine(parseInt(splitLine[1], 10), point1Coords, point2Coords, point3Coords); 35 | 36 | if (!triangleLine.IsValid()) { 37 | throw 'Unable to parse triangle line: Invalid line arguments on line ' + lineNumber; 38 | } 39 | 40 | return triangleLine; 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/AuthorMETALine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser.Lines { 5 | export class AuthorMETALine extends LdrawFileLine { 6 | constructor(author: string) { 7 | super(LdrawFileLineType.Author); 8 | this.Author = author; 9 | } 10 | 11 | Author: string; 12 | 13 | IsValid(): boolean { 14 | return Utility.hasAtLeastOneNonWhitespaceCharacter(this.Author); 15 | } 16 | 17 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.AuthorMETALine { 18 | var authorLine = new AuthorMETALine(splitLine[2]); 19 | 20 | if (!authorLine.IsValid()) { 21 | throw 'Unable to parse author META line: Invalid line arguments on line ' + lineNumber; 22 | } 23 | 24 | return authorLine; 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/ColourMETALine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | 6 | module LdrawVisualizer.Parser.Lines { 7 | export class ColourMETALine extends LdrawFileLine { 8 | constructor(name: string, code: number, value: Color, edge: number|Color, 9 | alpha: number, luminance: number, texture: ColorTexture) { 10 | 11 | super(LdrawFileLineType.Colour); 12 | 13 | this.Name = name; 14 | this.Code = code; 15 | this.Value = value; 16 | this.Edge = edge; 17 | this.Alpha = alpha; 18 | this.Luminance = luminance; 19 | this.Texture = texture; 20 | } 21 | 22 | Name: string; 23 | Code: number; 24 | Value: Color; 25 | Edge: number|Color; 26 | Alpha: number; 27 | Luminance: number; 28 | Texture: ColorTexture; 29 | 30 | IsValid(): boolean { 31 | if (typeof this.Edge === 'number') { 32 | var isEdgeValid = Utility.isValidColorCode(this.Edge); 33 | } else { 34 | var isEdgeValid = !isEdgeValid || (this.Edge).IsValid(); 35 | } 36 | 37 | return Utility.isNonEmpty(this.Name) 38 | && Utility.isValidColorCode(this.Code) 39 | && this.Value.IsValid() 40 | && isEdgeValid 41 | && (Utility.isNullOrUndefined(this.Alpha) || Utility.isByte(this.Alpha)) 42 | && (Utility.isNullOrUndefined(this.Luminance) || Utility.isByte(this.Luminance)); 43 | } 44 | 45 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.ColourMETALine { 46 | var code: number, 47 | value: Color, 48 | edge: number|Color, 49 | alpha: number, 50 | luminance: number, 51 | texture: Lines.ColorTexture; 52 | 53 | var codeIndex = splitLine.indexOf('CODE'); 54 | if (codeIndex !== -1) { 55 | code = parseInt(splitLine[codeIndex + 1], 10); 56 | } 57 | 58 | var valueIndex = splitLine.indexOf('VALUE'); 59 | if (valueIndex !== -1) { 60 | value = new Color(splitLine[valueIndex + 1]); 61 | } 62 | 63 | var edgeIndex = splitLine.indexOf('EDGE'); 64 | if (edgeIndex !== -1) { 65 | var edgeValue = splitLine[edgeIndex + 1]; 66 | if (Utility.isValidColorHexString(edgeValue)) { 67 | edge = new Color(edgeValue); 68 | } else { 69 | edge = parseInt(edgeValue, 10); 70 | } 71 | } 72 | 73 | var alphaIndex = splitLine.indexOf('ALPHA'); 74 | if (alphaIndex !== -1) { 75 | alpha = parseInt(splitLine[alphaIndex + 1], 10); 76 | } 77 | 78 | var luminanceIndex = splitLine.indexOf('LUMINANCE'); 79 | if (luminanceIndex !== -1) { 80 | luminance = parseInt(splitLine[luminanceIndex + 1], 10); 81 | } 82 | 83 | if (splitLine.indexOf('CHROME') !== -1) { 84 | texture = Lines.ColorTexture.Chrome; 85 | } else if (splitLine.indexOf('PEARLESCENT') !== -1) { 86 | texture = Lines.ColorTexture.Chrome; 87 | } else if (splitLine.indexOf('RUBBER') !== -1) { 88 | texture = Lines.ColorTexture.Chrome; 89 | } else if (splitLine.indexOf('MATTE_METALLIC') !== -1) { 90 | texture = Lines.ColorTexture.Chrome; 91 | } else if (splitLine.indexOf('METAL') !== -1) { 92 | texture = Lines.ColorTexture.Chrome; 93 | } else if (splitLine.indexOf('MATERIAL') !== -1) { 94 | if (splitLine.indexOf('GLITTER') !== -1) { 95 | texture = Lines.ColorTexture.Glitter; 96 | } else if (splitLine.indexOf('SPECKLE') !== -1) { 97 | texture = Lines.ColorTexture.Speckle; 98 | } 99 | } 100 | 101 | var colourLine = new Lines.ColourMETALine(splitLine[2], code, value, edge, alpha, luminance, texture); 102 | 103 | if (!colourLine.IsValid()) { 104 | throw 'Unable to parse META colour line: Invalid line arguments on line ' + lineNumber; 105 | } 106 | 107 | return colourLine; 108 | } 109 | } 110 | 111 | export enum ColorTexture { 112 | Chrome, 113 | Pearlescent, 114 | Rubber, 115 | MatteMetalic, 116 | Metal, 117 | Glitter, 118 | Speckle, 119 | } 120 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/FileMETALine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser.Lines { 5 | export class FileMETALine extends LdrawFileLine { 6 | constructor(filename: string) { 7 | super(LdrawFileLineType.File); 8 | 9 | this.Filename = filename; 10 | } 11 | 12 | Filename: string; 13 | 14 | IsValid(): boolean { 15 | return Utility.hasAtLeastOneNonWhitespaceCharacter(this.Filename); 16 | } 17 | 18 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.FileMETALine { 19 | var fileLine = new FileMETALine(line.substring(line.indexOf(splitLine[2]))); 20 | 21 | if (!fileLine.IsValid()) { 22 | throw 'Unable to parse file META line: Invalid line arguments on line ' + lineNumber; 23 | } 24 | 25 | return fileLine; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/LdrawOrgMETALine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | 5 | module LdrawVisualizer.Parser.Lines { 6 | export class LdrawOrgMETALine extends LdrawFileLine { 7 | constructor(partType: LdrawOrgPartType) { 8 | super(LdrawFileLineType.LDrawOrg); 9 | 10 | this.PartType = partType; 11 | } 12 | 13 | PartType: LdrawOrgPartType; 14 | 15 | IsValid(): boolean { 16 | return !Utility.isNullOrUndefined(this.PartType); 17 | } 18 | 19 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.LdrawOrgMETALine { 20 | 21 | var partTypeString = (splitLine[2] || '(Unknown LDraw Org Part Type)').trim().toUpperCase(); 22 | var loLine: LdrawOrgMETALine; 23 | 24 | switch (partTypeString) { 25 | case 'PART': 26 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Part); 27 | break; 28 | case 'SUBPART': 29 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Subpart); 30 | break; 31 | case 'PRIMITIVE': 32 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Primitive); 33 | break; 34 | case '48_PRIMITIVE': 35 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Primitive_48); 36 | break; 37 | case 'SHORTCUT': 38 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Shortcut); 39 | break; 40 | case 'UNOFFICIAL_PART': 41 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Unofficial_Part); 42 | break; 43 | case 'UNOFFICIAL_SUBPART': 44 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Unofficial_Subpart); 45 | break; 46 | case 'UNOFFICIAL_PRIMITIVE': 47 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Unofficial_Primitive); 48 | break; 49 | case 'UNOFFICIAL_48_PRIMITIVE': 50 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Unofficial_Primitive_48); 51 | break; 52 | case 'UNOFFICIAL_SHORTCUT': 53 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Unofficial_Shortcut); 54 | break; 55 | case 'CONFIGURATION': 56 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Configuration); 57 | break; 58 | default: 59 | loLine = new LdrawOrgMETALine(LdrawOrgPartType.Other); 60 | } 61 | 62 | if (!loLine.IsValid()) { 63 | throw 'Unable to parse LDraw Org META line: Invalid line arguments on line ' + lineNumber; 64 | } 65 | 66 | return loLine; 67 | } 68 | } 69 | 70 | export enum LdrawOrgPartType { 71 | Part, Subpart, Primitive, Primitive_48, Shortcut, 72 | Unofficial_Part, Unofficial_Subpart, Unofficial_Primitive, Unofficial_Primitive_48, Unofficial_Shortcut, 73 | Configuration, Other 74 | } 75 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/NameMETALine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser.Lines { 5 | export class NameMETALine extends LdrawFileLine { 6 | constructor(name: string) { 7 | super(LdrawFileLineType.Name); 8 | 9 | this.Name = name; 10 | } 11 | 12 | Name: string; 13 | 14 | IsValid(): boolean { 15 | return Utility.hasAtLeastOneNonWhitespaceCharacter(this.Name); 16 | } 17 | 18 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.NameMETALine { 19 | var nameLine = new NameMETALine(line.substring(line.indexOf(splitLine[2]))); 20 | 21 | if (!nameLine.IsValid()) { 22 | throw 'Unable to parse name META line: Invalid line arguments on line ' + lineNumber; 23 | } 24 | 25 | return nameLine; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/NoFileMETALine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser.Lines { 5 | export class NoFileMETALine extends LdrawFileLine { 6 | constructor() { 7 | super(LdrawFileLineType.NoFile); 8 | } 9 | 10 | IsValid(): boolean { 11 | return true; 12 | } 13 | 14 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.NoFileMETALine { 15 | var noFileLine = new NoFileMETALine(); 16 | 17 | if (!noFileLine.IsValid()) { 18 | throw 'Unable to parse NOFILE META line: Invalid line arguments on line ' + lineNumber; 19 | } 20 | 21 | return noFileLine; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/PartDescription.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser.Lines { 5 | export class PartDescriptionMETALine extends LdrawFileLine { 6 | constructor(name: string) { 7 | super(LdrawFileLineType.Name); 8 | 9 | this.Name = name; 10 | } 11 | 12 | Name: string; 13 | 14 | IsValid(): boolean { 15 | return Utility.hasAtLeastOneNonWhitespaceCharacter(this.Name); 16 | } 17 | 18 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.NameMETALine { 19 | var nameLine = new NameMETALine(splitLine[2]); 20 | 21 | if (!nameLine.IsValid()) { 22 | throw 'Unable to parse name META line: Invalid line arguments on line ' + lineNumber; 23 | } 24 | 25 | return nameLine; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/RotationCenterMETALine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser.Lines { 5 | export class RotationCenterMETALine extends LdrawFileLine { 6 | constructor(x: number, y: number, z: number, whatIsThisNumberFor: number, name: string) { 7 | super(LdrawFileLineType.RotationCenter); 8 | 9 | this.X = x; 10 | this.Y = y; 11 | this.Z = z; 12 | this.WhatIsThisNumberFor = whatIsThisNumberFor; 13 | this.Name = name; 14 | } 15 | 16 | X: number; 17 | Y: number; 18 | Z: number; 19 | WhatIsThisNumberFor: number; 20 | Name: string; 21 | 22 | IsValid(): boolean { 23 | return (Utility.isNumber(this.X) 24 | && Utility.isNumber(this.Y) 25 | && Utility.isNumber(this.Z) 26 | // && Utility.isNumber(this.WhatIsThisNumberFor) 27 | && Utility.isNonEmpty(this.Name)); 28 | } 29 | 30 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.RotationCenterMETALine { 31 | 32 | var x = parseInt(splitLine[3], 10), 33 | y = parseInt(splitLine[4], 10), 34 | z = parseInt(splitLine[5], 10), 35 | whatIsThisNumberFor = parseInt(splitLine[6], 10), 36 | name = splitLine[7]; 37 | 38 | var rotationCenterLine = new RotationCenterMETALine(x, y, z, whatIsThisNumberFor, name); 39 | 40 | if (!rotationCenterLine.IsValid()) { 41 | throw 'Unable to parse rotation center META line: Invalid line arguments on line ' + lineNumber; 42 | } 43 | 44 | return rotationCenterLine; 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/RotationConfigMETALine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser.Lines { 5 | export class RotationConfigMETALine extends LdrawFileLine { 6 | constructor(rotationId: number, isVisible: boolean) { 7 | super(LdrawFileLineType.RotationConfig); 8 | this.RotationId = rotationId; 9 | this.IsVisible = isVisible; 10 | } 11 | 12 | RotationId: number; 13 | IsVisible: boolean; 14 | 15 | IsValid(): boolean { 16 | return (Utility.isInt(this.RotationId) 17 | && !Utility.isNullOrUndefined(this.IsVisible)); 18 | } 19 | 20 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.RotationConfigMETALine { 21 | 22 | var rotId = parseInt(splitLine[3], 10), 23 | isVisible = parseInt(splitLine[4], 10) === 1; 24 | 25 | var rotationConfigLine = new RotationConfigMETALine(rotId, isVisible); 26 | 27 | if (!rotationConfigLine.IsValid()) { 28 | throw 'Unable to parse rotation config META line: Invalid line arguments on line ' + lineNumber; 29 | } 30 | 31 | return rotationConfigLine; 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/RotationStepMETALine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser.Lines { 5 | export class RotationStepMETALine extends LdrawFileLine { 6 | constructor(xAngle: number, yAngle: number, zAngle: number, rotationType: RotationType) { 7 | super(LdrawFileLineType.RotationStep); 8 | 9 | this.XAngle = xAngle; 10 | this.YAngle = yAngle; 11 | this.ZAngle = zAngle; 12 | this.RotationType = rotationType; 13 | } 14 | 15 | XAngle: number; 16 | YAngle: number; 17 | ZAngle: number; 18 | RotationType: RotationType; 19 | 20 | IsValid(): boolean { 21 | 22 | // if any of the rotation angles are defined, 23 | // ensure ALL rotation angles are valid 24 | if (!Utility.isNullOrUndefined(this.XAngle) 25 | || !Utility.isNullOrUndefined(this.YAngle) 26 | || !Utility.isNullOrUndefined(this.ZAngle)) { 27 | 28 | return (Utility.isNumber(this.XAngle) 29 | && Utility.isNumber(this.YAngle) 30 | && Utility.isNumber(this.ZAngle)); 31 | } else { 32 | return true; 33 | } 34 | } 35 | 36 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.RotationStepMETALine { 37 | 38 | var x: number, y: number, z: number, rotType: RotationType; 39 | 40 | if (splitLine[2] !== 'END') { 41 | x = parseFloat(splitLine[2]); 42 | y = parseFloat(splitLine[3]); 43 | z = parseFloat(splitLine[4]); 44 | 45 | if (splitLine[5] === 'REL') { 46 | rotType = RotationType.Relative; 47 | } else if (splitLine[5] === 'ADD') { 48 | rotType = RotationType.Additive; 49 | } else if (splitLine[5] === 'ABS') { 50 | rotType = RotationType.Absolute; 51 | } else { 52 | throw 'Unknown rotation step type: ' + splitLine[5]; 53 | } 54 | } 55 | 56 | var rotStepLine = new RotationStepMETALine(x, y, z, rotType); 57 | 58 | if (!rotStepLine.IsValid()) { 59 | throw 'Unable to parse rotation step META line: Invalid line arguments on line ' + lineNumber; 60 | } 61 | 62 | return rotStepLine; 63 | } 64 | } 65 | 66 | export enum RotationType { 67 | Relative, Additive, Absolute 68 | } 69 | } -------------------------------------------------------------------------------- /scripts/parser/lines/meta-lines/StepMETALine.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Parser.Lines { 5 | export class StepMETALine extends LdrawFileLine { 6 | constructor() { 7 | super(LdrawFileLineType.Step); 8 | } 9 | 10 | IsValid(): boolean { 11 | return true; 12 | } 13 | 14 | static Parse(line: string, splitLine: string[], lineNumber: number): Lines.StepMETALine { 15 | return new StepMETALine(); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /scripts/renderer/ColorLookup.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | 5 | module LdrawVisualizer.Renderer { 6 | export var ColorLookup: { [code: number]: { hex: number, alpha?: number } } = { 7 | 8 | /*// black 9 | 0: { hex: 0x000000 }, 10 | 11 | // blue 12 | 1: { hex: 0x005BF }, 13 | 14 | // green 15 | 2: { hex: 0x257A3E }, 16 | 17 | // red 18 | 4: { hex: 0xC91A09 }, 19 | 20 | // brown 21 | 6: { hex: 0x583927 }, 22 | 23 | // dark gray 24 | 8: { hex: 0x6D6E5C }, 25 | 26 | // yellow 27 | 14: { hex: 0xF2CD37 }, 28 | 29 | // white 30 | 15: { hex: 0xFFFFFF }, 31 | 32 | // tranparent red 33 | 36: { hex: 0xC91A09, alpha: 128 }, 34 | 35 | // tranparent clear 36 | 47: { hex: 0xFCFCFC, alpha: 128 }, 37 | 38 | // silver metal 39 | 80: { hex: 0xA5A9B4 }, 40 | 41 | // rubber black 42 | 256: { hex: 0x212121 }, 43 | 44 | // chrome silver 45 | 383: { hex: 0xE0E0E0 },*/ 46 | 47 | } 48 | } -------------------------------------------------------------------------------- /scripts/renderer/EdgeMap.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | module LdrawVisualizer.Renderer { 4 | 5 | export class EdgeMap { 6 | 7 | // how close the vertices must be to be considered the same point 8 | private precision: number = 10000; 9 | 10 | // a map of edge keys to faces. 11 | private map: { [mapKey: string]: Array } = {}; 12 | 13 | addGeometry(geometry: THREE.Geometry): void { 14 | geometry.faces.forEach(f => { 15 | [ 16 | { vertex1Index: f.a, vertex2Index: f.b }, 17 | { vertex1Index: f.b, vertex2Index: f.c }, 18 | { vertex1Index: f.c, vertex2Index: f.a } 19 | ].forEach((edge, index) => { 20 | var mapKey = this.GetMapKey(geometry.vertices[edge.vertex1Index], geometry.vertices[edge.vertex2Index]); 21 | if (!this.map[mapKey]) { 22 | this.map[mapKey] = []; 23 | } 24 | this.map[mapKey].push(geometry); 25 | }); 26 | }); 27 | } 28 | 29 | addGeometries(geometries: Array): void { 30 | geometries.forEach(g => { 31 | this.addGeometry(g); 32 | }); 33 | } 34 | 35 | 36 | getGeometries(vertex1: THREE.Vector3, vertex2: THREE.Vector3): Array { 37 | return this.getGeometriesFromKey(this.GetMapKey(vertex1, vertex2)); 38 | } 39 | 40 | getGeometriesFromKey(edgeKey: string): Array { 41 | return this.map[edgeKey] || []; 42 | } 43 | 44 | // returns an order-independent string key based on all six data points of the two vertices 45 | public GetMapKey(vertexA: THREE.Vector3, vertexB: THREE.Vector3): string { 46 | var first: THREE.Vector3, second: THREE.Vector3; 47 | 48 | if (vertexA.x < vertexB.x) { 49 | first = vertexA; 50 | second = vertexB; 51 | } else if (vertexA.x > vertexB.x) { 52 | first = vertexB; 53 | second = vertexA; 54 | } else { 55 | 56 | if (vertexA.y < vertexB.y) { 57 | first = vertexA; 58 | second = vertexB; 59 | } else if (vertexA.y > vertexB.y) { 60 | first = vertexB; 61 | second = vertexA; 62 | } else { 63 | 64 | if (vertexA.z < vertexB.z) { 65 | first = vertexA; 66 | second = vertexB; 67 | } else if (vertexA.z > vertexB.z) { 68 | first = vertexB; 69 | second = vertexA; 70 | } else { 71 | // they're the same point 72 | 73 | first = vertexA; 74 | second = vertexB; 75 | } 76 | } 77 | } 78 | 79 | return [Math.round(first.x * this.precision), 80 | Math.round(first.y * this.precision), 81 | Math.round(first.z * this.precision), 82 | Math.round(second.x * this.precision), 83 | Math.round(second.y * this.precision), 84 | Math.round(second.z * this.precision)].join('|'); 85 | } 86 | } 87 | } -------------------------------------------------------------------------------- /scripts/renderer/Smoother.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | 7 | module LdrawVisualizer.Renderer { 8 | export class Smoother { 9 | 10 | private edgeMap = new EdgeMap(); 11 | 12 | public CombineAndSmooth(geometries: Array, 13 | optionalLines: Array<{ vertex1: THREE.Vector3, vertex2: THREE.Vector3 }>, 14 | quadLines: { [lineKey: string]: any }): THREE.Geometry { 15 | 16 | this.edgeMap.addGeometries(geometries); 17 | 18 | var optionalLineLookup: { [key: string]: { vertex1: THREE.Vector3, vertex2: THREE.Vector3 } } = {}; 19 | optionalLines.forEach(ol => { 20 | optionalLineLookup[this.edgeMap.GetMapKey(ol.vertex1, ol.vertex2)] = ol; 21 | }); 22 | 23 | var geometryGroups: Array> = []; 24 | 25 | while (geometries.length > 0) { 26 | var currentGeometry = geometries.shift(); 27 | var currentGeometryGroup = this.getConnectedGeometriesGroup(currentGeometry, optionalLineLookup); 28 | currentGeometryGroup.forEach(geom => { 29 | geometries.splice(geometries.indexOf(geom), 1); 30 | }); 31 | 32 | geometryGroups.push(currentGeometryGroup); 33 | } 34 | 35 | var emptyMatrix = new THREE.Matrix4(); 36 | var smoothedGeometries: Array = []; 37 | 38 | geometryGroups.forEach(group => { 39 | var combinedGeom = new THREE.Geometry(); 40 | group.forEach(geom => { 41 | combinedGeom.merge(geom, emptyMatrix, 0); 42 | }); 43 | combinedGeom.computeFaceNormals(); 44 | combinedGeom.mergeVertices(); 45 | combinedGeom.computeVertexNormals(); 46 | smoothedGeometries.push(combinedGeom); 47 | }); 48 | 49 | var finalGeom = new THREE.Geometry(); 50 | smoothedGeometries.forEach(geom => { 51 | finalGeom.merge(geom, emptyMatrix, 0); 52 | }); 53 | 54 | return finalGeom; 55 | 56 | // for (var lineKey in quadLines) { 57 | // if (quadLines.hasOwnProperty(lineKey)) { 58 | // var quadHalves = edgeMap.getFacesFromLineKey(lineKey); 59 | // if (quadHalves) { 60 | // quadHalves.face1.vertexNormals[0] = quadHalves.face2.vertexNormals[2].clone(); 61 | // quadHalves.face2.vertexNormals[0] = quadHalves.face1.vertexNormals[2].clone(); 62 | // } 63 | // } 64 | // } 65 | } 66 | 67 | // returns all geometries connected to the provided geometry. 68 | // the returned array includes the provided geometry. 69 | private getConnectedGeometriesGroup( 70 | geometry: THREE.Geometry, 71 | optionalLineLookup: { [key: string]: { vertex1: THREE.Vector3, vertex2: THREE.Vector3 } }, 72 | geometries: Array = [] 73 | ): Array { 74 | 75 | geometries.push(geometry); 76 | 77 | geometry.faces.forEach(f => { 78 | [ 79 | { vertex1: f.a, vertex2: f.b }, 80 | { vertex1: f.b, vertex2: f.c }, 81 | { vertex1: f.c, vertex2: f.a }, 82 | ].forEach(edge => { 83 | var edgeKey = this.edgeMap.GetMapKey(geometry.vertices[edge.vertex1], geometry.vertices[edge.vertex2]); 84 | if (optionalLineLookup[edgeKey]) { 85 | var adjacentGeometries = this.edgeMap.getGeometriesFromKey(edgeKey); 86 | if (adjacentGeometries.length > 0) { 87 | adjacentGeometries.forEach(geom => { 88 | if (geometries.indexOf(geom) === -1) { 89 | this.getConnectedGeometriesGroup(geom, optionalLineLookup, geometries); 90 | } 91 | }); 92 | } 93 | } 94 | }); 95 | }); 96 | 97 | return geometries; 98 | } 99 | } 100 | } -------------------------------------------------------------------------------- /scripts/renderer/VertexToFaceMap.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Renderer { 5 | 6 | export interface FaceContainer { 7 | face: THREE.Face3; 8 | matchingVertexIndex: Face3VertexIndex; 9 | } 10 | 11 | export enum Face3VertexIndex { 12 | A = 0, B = 1, C = 2 13 | } 14 | 15 | export class VertexToFaceMap { 16 | 17 | // a map of vertex keys to faces. 18 | private map: { [mapKey: string]: Array } = {}; 19 | 20 | // how close the vertices must be to be considered the same point 21 | private precision: number = 10000; 22 | 23 | // adds all of the faces in the geometry to the map, indexed by their vertices. 24 | // note each face will appear in the internal map 3 times, once for each vertex 25 | addGeometry(geometry: THREE.Geometry): void { 26 | geometry.faces.forEach(f => { 27 | [f.a, f.b, f.c].forEach((vertexIndex, index) => { 28 | var vertexMapKey = this.getMapKey(geometry.vertices[vertexIndex]); 29 | this.map[vertexMapKey] = this.map[vertexMapKey] || []; 30 | this.map[vertexMapKey].push({ 31 | face: f, 32 | matchingVertexIndex: index 33 | }); 34 | }); 35 | }); 36 | } 37 | 38 | // returns a list of unique faces that contain the given vertex 39 | getFaces(vertex: THREE.Vector3|THREE.Vector3[]): Array { 40 | if (Utility.isArray(vertex)) { 41 | var allFaces: Array = []; 42 | (vertex).forEach(v => { 43 | var faces = this.map[this.getMapKey(v)]; 44 | if (faces) { 45 | allFaces = allFaces.concat(faces); 46 | } 47 | }); 48 | var uniqueFaces = allFaces.filter((value, index, self) => { 49 | return self.indexOf(value) === index; 50 | }); 51 | return uniqueFaces; 52 | } else { 53 | return this.map[this.getMapKey(vertex)]; 54 | } 55 | } 56 | 57 | getFacesFromVertexKey(vertexKey: string): Array { 58 | return this.map[vertexKey]; 59 | } 60 | 61 | // returns a string key based on three vertices of a point 62 | private getMapKey(vertex: THREE.Vector3): string { 63 | return [Math.round(vertex.x * this.precision), 64 | Math.round(vertex.y * this.precision), 65 | Math.round(vertex.z * this.precision)].join('|'); 66 | } 67 | } 68 | } -------------------------------------------------------------------------------- /scripts/renderer/VertexToLineMap.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | module LdrawVisualizer.Renderer { 5 | 6 | export interface OptionalLine { 7 | vertex1: THREE.Vector3; 8 | vertex2: THREE.Vector3; 9 | } 10 | 11 | export class VertexToLineMap { 12 | 13 | // a map of vertex keys to lines. 14 | private map: { [mapKey: string]: Array } = {}; 15 | 16 | // how close the vertices must be to be considered the same point 17 | private precision: number = 10000; 18 | 19 | // adds a line (defined by two THREE.Vector3's) to the map. 20 | // note that each line will appear in the map twice - once for each point 21 | addLine(vertex1: THREE.Vector3, vertex2: THREE.Vector3): void { 22 | [vertex1, vertex2].forEach((v) => { 23 | var vertexMapKey = this.getMapKey(v); 24 | this.map[vertexMapKey] = this.map[vertexMapKey] || []; 25 | this.map[vertexMapKey].push({ 26 | vertex1: vertex1, 27 | vertex2: vertex2 28 | }); 29 | }); 30 | } 31 | 32 | // returns a list of unique lines that contain the given vertex 33 | getLines(vertex: THREE.Vector3): Array { 34 | return this.map[this.getMapKey(vertex)]; 35 | } 36 | 37 | // returns a string key based on three vertices of a point 38 | private getMapKey(vertex: THREE.Vector3): string { 39 | return [Math.round(vertex.x * this.precision), 40 | Math.round(vertex.y * this.precision), 41 | Math.round(vertex.z * this.precision)].join('|'); 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /scripts/utility.ts: -------------------------------------------------------------------------------- 1 | module LdrawVisualizer.Utility { 2 | export function isString(obj) { 3 | return Object.prototype.toString.call(obj) === '[object String]'; 4 | } 5 | 6 | export function isNumber(obj) { 7 | return Object.prototype.toString.call(obj) === '[object Number]' && !isNaN(obj); 8 | } 9 | 10 | export function isInt(obj) { 11 | return isNumber(obj) && (obj % 1) === 0; 12 | } 13 | 14 | export function isByte(obj) { 15 | return isInt(obj) && obj >= 0 && obj <= 255; 16 | } 17 | 18 | export function isArray(obj) { 19 | return Object.prototype.toString.call(obj) === '[object Array]'; 20 | } 21 | 22 | export function isValidColorCode(obj) { 23 | return isInt(obj) && obj >= 0; 24 | //return isInt(obj) && obj >= 0 && obj <= 511; 25 | } 26 | 27 | export function isValidColorHexString(obj) { 28 | return isString(obj) && obj && /^#[a-f0-9]{6}$/i.test(obj); 29 | } 30 | 31 | export function isNullOrUndefined(obj) { 32 | return obj === null || typeof obj === 'undefined'; 33 | } 34 | 35 | export function hasAtLeastOneNonWhitespaceCharacter(s: string) { 36 | return /^(?!\s*$).+/.test(s); 37 | } 38 | 39 | export function isNonEmpty(s: string) { 40 | return !(/^\s+$/.test(s)); 41 | } 42 | 43 | export function isValidFilename(filename: string): boolean { 44 | return /^[a-zA-Z0-9\-_\\/\.]+\.(dat|ldr|mpd)$/i.test(filename); 45 | } 46 | 47 | export function logMatrix(matrix: THREE.Matrix4) { 48 | var e = matrix.elements; 49 | console.log(e[0], e[4], e[8], e[12]); 50 | console.log(e[1], e[5], e[9], e[13]); 51 | console.log(e[2], e[6], e[10], e[14]); 52 | console.log(e[3], e[7], e[11], e[15]); 53 | console.log('---------------'); 54 | } 55 | 56 | export function hexStringToHexNumber(hexString: string): number { 57 | return parseInt(hexString.replace(/#/g, ''), 16); 58 | } 59 | 60 | export function fixFilePath(filePath: string): string { 61 | return filePath.toLowerCase().replace(/\\/g, '/'); 62 | } 63 | 64 | export function degreesToRadians(degrees: number): number { 65 | return degrees * (Math.PI / 180); 66 | } 67 | 68 | export function radiansToDegrees(radians: number): number { 69 | return radians * (180 / Math.PI); 70 | } 71 | } -------------------------------------------------------------------------------- /styles/ldraw-visualizer.css: -------------------------------------------------------------------------------- 1 | body{margin:0}body #container{overflow:hidden}/*# sourceMappingURL=./styles/ldraw-visualizer.css.map */ -------------------------------------------------------------------------------- /styles/ldraw-visualizer.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["ldraw-visualizer.less"],"names":[],"mappings":"AAAA,KACC,SADD,IAGC,YACC"} -------------------------------------------------------------------------------- /styles/ldraw-visualizer.less: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | 4 | #container { 5 | overflow: hidden; 6 | } 7 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES5", 4 | "module": "amd", 5 | "sourceMap": true, 6 | "watch": true 7 | } 8 | } -------------------------------------------------------------------------------- /typings/references.js: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | /// 7 | /// 8 | /// 9 | /// 10 | /// 11 | /// 12 | /// 13 | /// 14 | /// 15 | /// 16 | //# sourceMappingURL=references.js.map -------------------------------------------------------------------------------- /typings/references.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"references.js","sourceRoot":"","sources":["references.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,8CAA8C;AAC9C,0DAA0D;AAC1D,sDAAsD;AACtD,yDAAyD;AACzD,0DAA0D;AAC1D,oDAAoD;AACpD,yDAAyD;AACzD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,6DAA6D;AAC7D,2CAA2C;AAC3C,gDAAgD;AAChD,sDAAsD"} -------------------------------------------------------------------------------- /typings/references.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | /// 7 | /// 8 | /// 9 | /// 10 | /// 11 | /// 12 | /// 13 | /// 14 | /// 15 | /// 16 | /// -------------------------------------------------------------------------------- /typings/threejs/detector.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (Detector.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/master/examples/js/Detector.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | interface DetectorStatic { 7 | canvas: boolean; 8 | webgl: boolean; 9 | workers: boolean; 10 | fileapi: boolean; 11 | 12 | getWebGLErrorMessage(): HTMLElement; 13 | addGetWebGLMessage(parameters?: {id?: string; parent?: HTMLElement}): void; 14 | } 15 | 16 | declare var Detector: DetectorStatic; 17 | -------------------------------------------------------------------------------- /typings/threejs/three-canvasrenderer.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (CanvasRenderer.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/master/examples/js/renderers/CanvasRenderer.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module THREE { 9 | export interface SpriteCanvasMaterialParameters extends MaterialParameters{ 10 | color?: number; 11 | 12 | } 13 | 14 | export class SpriteCanvasMaterial extends Material { 15 | constructor(parameters?: SpriteCanvasMaterialParameters); 16 | 17 | color: Color; 18 | 19 | program(context: any, color: Color): void; 20 | clone(): SpriteCanvasMaterial; 21 | } 22 | 23 | export interface CanvasRendererParameters { 24 | canvas?: HTMLCanvasElement; 25 | devicePixelRatio?: number; 26 | } 27 | 28 | export class CanvasRenderer implements Renderer { 29 | constructor(parameters?: CanvasRendererParameters); 30 | 31 | domElement: HTMLCanvasElement; 32 | autoClear: boolean; 33 | sortObjects: boolean; 34 | sortElements: boolean; 35 | info: { render: { vertices: number; faces: number; }; }; 36 | 37 | supportsVertexTextures(): void; 38 | setFaceCulling(): void; 39 | getPixelRatio(): number; 40 | setPixelRatio(value: number): void; 41 | setSize(width: number, height: number, updateStyle?: boolean): void; 42 | setViewport(x: number, y: number, width: number, height: number): void; 43 | setScissor(): void; 44 | enableScissorTest(): void; 45 | setClearColor(color: Color, opacity?: number): void; 46 | setClearColor(color: string, opacity?: number): void; 47 | setClearColor(color: number, opacity?: number): void; 48 | setClearColorHex(hex: number, alpha?: number): void; 49 | getClearColor(): Color; 50 | getClearAlpha(): number; 51 | getMaxAnisotropy(): number; 52 | clear(): void; 53 | clearColor(): void; 54 | clearDepth(): void; 55 | clearStencil(): void; 56 | render(scene: Scene, camera: Camera): void; 57 | } 58 | } -------------------------------------------------------------------------------- /typings/threejs/three-copyshader.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (CopyShader.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/r68/examples/js/shaders/CopyShader.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module THREE { 9 | export var CopyShader: Shader; 10 | } 11 | -------------------------------------------------------------------------------- /typings/threejs/three-css3drenderer.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (CSS3DRenderer.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/master/examples/js/renderers/CSS3DRenderer.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | // This renderer does not work in IE. Can be found here for more information. 7 | // https://github.com/mrdoob/three.js/issues/4783 8 | 9 | /// 10 | 11 | declare module THREE { 12 | class CSS3DObject extends Object3D { 13 | constructor(element: any); 14 | 15 | element: any; 16 | } 17 | 18 | class CSS3DSprite extends CSS3DObject { 19 | constructor(element: any); 20 | 21 | } 22 | 23 | 24 | class CSS3DRenderer { 25 | constructor(); 26 | 27 | domElement:HTMLElement; 28 | 29 | setSize(width: number, height: number): void; 30 | render(scene: THREE.Scene, camera: THREE.Camera): void; 31 | } 32 | } -------------------------------------------------------------------------------- /typings/threejs/three-effectcomposer.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (EffectComposer.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/r68/examples/js/postprocessing/EffectComposer.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | /// 8 | /// 9 | 10 | declare module THREE { 11 | export class EffectComposer { 12 | constructor( renderer: WebGLRenderer, renderTarget?: WebGLRenderTarget); 13 | 14 | renderTarget1: WebGLRenderTarget; 15 | renderTarget2: WebGLRenderTarget; 16 | writeBuffer: WebGLRenderTarget; 17 | readBuffer: WebGLRenderTarget; 18 | passes: any[]; 19 | copyPass: ShaderPass; 20 | 21 | swapBuffers(): void; 22 | addPass(pass: any): void; 23 | insertPass(pass: any, index: number): void; 24 | render(delta?: number): void; 25 | reset(renderTarget?: WebGLRenderTarget): void; 26 | setSize( width: number, height: number ): void; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /typings/threejs/three-maskpass.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (MaskPass.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/r68/examples/js/postprocessing/MaskPass.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module THREE { 9 | export class MaskPass { 10 | constructor( scene: Scene, camera: Camera); 11 | 12 | scene: Scene; 13 | camera: Camera; 14 | enabled: boolean; 15 | clear: boolean; 16 | needsSwap: boolean; 17 | inverse: boolean; 18 | 19 | render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget, delta: number): void; 20 | } 21 | 22 | export class ClearMaskPass { 23 | constructor(); 24 | 25 | enabled: boolean; 26 | 27 | render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget, delta: number): void; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /typings/threejs/three-orbitcontrols.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (OrbitControls.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/master/examples/js/controls/OrbitControls.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module THREE { 9 | class OrbitControls { 10 | constructor(object:Camera, domElement?:HTMLElement); 11 | 12 | object:Camera; 13 | domElement:HTMLElement; 14 | 15 | // API 16 | enabled: boolean; 17 | target: THREE.Vector3; 18 | 19 | // deprecated 20 | center: THREE.Vector3; 21 | 22 | noZoom: boolean; 23 | zoomSpeed: number; 24 | minDistance: number; 25 | maxDistance: number; 26 | noRotate: boolean; 27 | rotateSpeed: number; 28 | noPan: boolean; 29 | keyPanSpeed: number; 30 | autoRotate: boolean; 31 | autoRotateSpeed: number; 32 | minPolarAngle: number; 33 | maxPolarAngle: number; 34 | minAzimuthAngle: number; 35 | maxAzimuthAngle: number; 36 | noKeys: boolean; 37 | keys: { LEFT: number; UP: number; RIGHT: number; BOTTOM: number; }; 38 | mouseButtons: { ORBIT: MOUSE; ZOOM: MOUSE; PAN: MOUSE; }; 39 | 40 | rotateLeft(angle?: number): void; 41 | rotateUp(angle?: number): void; 42 | panLeft(distance?: number): void; 43 | panUp(distance?: number): void; 44 | pan( deltaX: number, deltaY: number): void; 45 | dollyIn(dollyScale: number): void; 46 | dollyOut(dollyScale: number): void; 47 | update(): void; 48 | reset(): void; 49 | getPolarAngle() : number; 50 | getAzimuthalAngle(): number; 51 | 52 | // EventDispatcher mixins 53 | addEventListener(type: string, listener: (event: any) => void ): void; 54 | hasEventListener(type: string, listener: (event: any) => void): void; 55 | removeEventListener(type: string, listener: (event: any) => void): void; 56 | dispatchEvent(event: { type: string; target: any; }): void; 57 | } 58 | } -------------------------------------------------------------------------------- /typings/threejs/three-projector.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (Projector.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/master/examples/js/renderers/Projector.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module THREE { 9 | // Renderers / Renderables ///////////////////////////////////////////////////////////////////// 10 | export class RenderableObject { 11 | constructor(); 12 | 13 | id: number; 14 | object: Object; 15 | z: number; 16 | } 17 | 18 | export class RenderableFace { 19 | constructor(); 20 | 21 | id: number; 22 | v1: RenderableVertex; 23 | v2: RenderableVertex; 24 | v3: RenderableVertex; 25 | normalModel: Vector3; 26 | vertexNormalsModel: Vector3[]; 27 | vertexNormalsLength: number; 28 | color: Color; 29 | material: Material; 30 | uvs: Vector2[][]; 31 | z: number; 32 | 33 | } 34 | 35 | export class RenderableVertex { 36 | constructor(); 37 | 38 | position: Vector3; 39 | positionWorld: Vector3; 40 | positionScreen: Vector4; 41 | visible: boolean; 42 | 43 | copy(vertex: RenderableVertex): void; 44 | } 45 | 46 | export class RenderableLine { 47 | constructor(); 48 | 49 | id: number; 50 | v1: RenderableVertex; 51 | v2: RenderableVertex; 52 | vertexColors: Color[]; 53 | material: Material; 54 | z: number; 55 | } 56 | 57 | export class RenderableSprite { 58 | constructor(); 59 | 60 | id: number; 61 | object: Object; 62 | x: number; 63 | y: number; 64 | z: number; 65 | rotation: number; 66 | scale: Vector2; 67 | material: Material; 68 | } 69 | 70 | /** 71 | * Projects points between spaces. 72 | */ 73 | export class Projector { 74 | constructor(); 75 | 76 | // deprecated. 77 | projectVector(vector: Vector3, camera: Camera): Vector3; 78 | 79 | // deprecated. 80 | unprojectVector(vector: Vector3, camera: Camera): Vector3; 81 | 82 | /** 83 | * Transforms a 3D scene object into 2D render data that can be rendered in a screen with your renderer of choice, projecting and clipping things out according to the used camera. 84 | * If the scene were a real scene, this method would be the equivalent of taking a picture with the camera (and developing the film would be the next step, using a Renderer). 85 | * 86 | * @param scene scene to project. 87 | * @param camera camera to use in the projection. 88 | * @param sort select whether to sort elements using the Painter's algorithm. 89 | */ 90 | projectScene(scene: Scene, camera: Camera, sortObjects: boolean, sortElements?: boolean): { 91 | objects: Object3D[]; // Mesh, Line or other object 92 | sprites: Object3D[]; // Sprite or Particle 93 | lights: Light[]; 94 | elements: Face3[]; // Line, Particle, Face3 or Face4 95 | }; 96 | } 97 | } -------------------------------------------------------------------------------- /typings/threejs/three-renderpass.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (RenderPass.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/r68/examples/js/postprocessing/RenderPass.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module THREE { 9 | export class RenderPass { 10 | constructor( scene: Scene, camera: Camera, overrideMaterial?: Material, clearColor?: Color, clearAlpha?: number ); 11 | constructor( scene: Scene, camera: Camera, overrideMaterial?: Material, clearColor?: string, clearAlpha?: number ); 12 | constructor( scene: Scene, camera: Camera, overrideMaterial?: Material, clearColor?: number, clearAlpha?: number ); 13 | 14 | scene: Scene; 15 | camera: Camera; 16 | overrideMaterial: Material; 17 | clearColor: any; // Color or string or number 18 | clearAlpha: number; 19 | oldClearColor: Color; 20 | oldClearAlpha: number; 21 | enabled: boolean; 22 | clear: boolean; 23 | needsSwap: boolean; 24 | 25 | render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget, delta: number): void; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /typings/threejs/three-shaderpass.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (ShaderPass.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/r68/examples/js/postprocessing/ShaderPass.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module THREE { 9 | export class ShaderPass { 10 | constructor( shader: Shader, textureID?: string ); 11 | 12 | textureID: string; 13 | uniforms: any; 14 | material: ShaderMaterial; 15 | renderToScreen: boolean; 16 | enabled: boolean; 17 | needsSwap: boolean; 18 | clear: boolean; 19 | camera: Camera; 20 | scene: Scene; 21 | quad: Mesh; 22 | 23 | render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget, delta: number): void; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /typings/threejs/three-trackballcontrols.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for three.js (TrackballControls.js) 2 | // Project: https://github.com/mrdoob/three.js/blob/master/examples/js/controls/TrackballControls.js 3 | // Definitions by: Satoru Kimura 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module THREE { 9 | class TrackballControls extends EventDispatcher { 10 | constructor(object:Camera, domElement?:HTMLElement); 11 | 12 | object:Camera; 13 | domElement:HTMLElement; 14 | 15 | // API 16 | enabled:boolean; 17 | screen:{ left: number; top: number; width: number; height: number }; 18 | rotateSpeed:number; 19 | zoomSpeed:number; 20 | panSpeed:number; 21 | noRotate:boolean; 22 | noZoom:boolean; 23 | noPan:boolean; 24 | noRoll:boolean; 25 | staticMoving:boolean; 26 | dynamicDampingFactor:number; 27 | minDistance:number; 28 | maxDistance:number; 29 | keys:number[]; 30 | 31 | update():void; 32 | reset():void; 33 | checkDistances():void; 34 | zoomCamera():void; 35 | panCamera():void; 36 | rotateCamera():void; 37 | 38 | handleResize():void; 39 | handleEvent(event: any):void; 40 | } 41 | } 42 | --------------------------------------------------------------------------------