You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							220 lines
						
					
					
						
							8.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							220 lines
						
					
					
						
							8.8 KiB
						
					
					
				| <!DOCTYPE html> | |
| <html lang="en"> | |
| 	<head> | |
| 		<meta charset="utf-8" /> | |
| 		<base href="../../../" /> | |
| 		<script src="page.js"></script> | |
| 		<link type="text/css" rel="stylesheet" href="page.css" /> | |
| 	</head> | |
| 	<body> | |
| 		[page:Loader] → | |
| 
 | |
| 		<h1>[name]</h1> | |
| 
 | |
| 		<p class="desc"> A loader for `LDraw` resources. <br /><br /> | |
| 		[link:https://ldraw.org LDraw] (LEGO Draw) is an | |
| 		[link:https://ldraw.org/article/218.html open format specification] for describing LEGO | |
| 		and other construction set 3D models.</p> | |
| 
 | |
| 		<p>An LDraw asset (a text file usually with extension .ldr, .dat or .txt) can describe | |
| 		just a single construction piece, or an entire model. | |
| 		In the case of a model the LDraw file can reference other LDraw files, which are loaded | |
| 		from a library path set with [page:Function setPartsLibraryPath]. You usually download | |
| 		the LDraw official parts library, extract to a folder and point setPartsLibraryPath to it. | |
| 		</p> | |
| 
 | |
| 		<p>Library parts will be loaded by trial and error in subfolders 'parts', 'p' and 'models'. | |
| 		These file accesses are not optimal for web environment, so a script tool has been made | |
| 		to pack an LDraw file with all its dependencies into a single file, which loads much faster. | |
| 		See section 'Packing LDraw models'. The LDrawLoader example loads several packed files. | |
| 		The official parts library is not included due to its large size.</p> | |
| 
 | |
| 
 | |
| 		<h2>Extensions</h2> | |
| 
 | |
| 		<p> | |
| 			LDrawLoader supports the following extensions: | |
| 		</p> | |
| 
 | |
| 		<ul> | |
| 			<li>!COLOUR: Color and surface finish declarations.</li> | |
| 			<li>BFC: Back Face Culling specification.</li> | |
| 			<li>!CATEGORY: Model/part category declarations.</li> | |
| 			<li>!KEYWORDS: Model/part keywords declarations.</li> | |
| 		</ul> | |
| 
 | |
| 		<h2>Code Example</h2> | |
| 
 | |
| 		<code> | |
| 		// Instantiate a loader | |
| 		const loader = new LDrawLoader(); | |
| 
 | |
| 		// Optionally set library parts path | |
| 		// loader.setPartsLibraryPath( path to library ); | |
| 
 | |
| 		// Load a LDraw resource | |
| 		loader.load( | |
| 			// resource URL | |
| 			'models/car.ldr_Packed.mpd', | |
| 			// called when the resource is loaded | |
| 			function ( group ) { | |
| 
 | |
| 				// Optionally, use LDrawUtils.mergeObject() from | |
| 				// 'examples/jsm/utils/LDrawUtils.js' to merge all | |
| 				// geometries by material (it gives better runtime | |
| 				// performance, but building steps are lost) | |
| 				// group = LDrawUtils.mergeObject( group ); | |
| 
 | |
| 				scene.add( group ); | |
| 
 | |
| 			}, | |
| 			// called while loading is progressing | |
| 			function ( xhr ) { | |
| 
 | |
| 				console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' ); | |
| 
 | |
| 			}, | |
| 			// called when loading has errors | |
| 			function ( error ) { | |
| 
 | |
| 				console.log( 'An error happened' ); | |
| 
 | |
| 			} | |
| 		); | |
| 		</code> | |
| 
 | |
| 		<h2>Examples</h2> | |
| 
 | |
| 		<p> | |
| 			[example:webgl_loader_ldraw] | |
| 		</p> | |
| 
 | |
| 		<h2>Packing LDraw models</h2> | |
| 
 | |
| 		<p>To pack a model with all its referenced files, download the | |
| 		[link:https://www.ldraw.org/parts/latest-parts.html Official LDraw parts library] | |
| 		and use the following Node script: | |
| 		[link:https://github.com/mrdoob/three.js/blob/master/utils/packLDrawModel.js utils/packLDrawModel.js] | |
| 		It contains instructions on how to setup the files and execute it.</p> | |
| 
 | |
| 		<h2>Metadata in .userData</h2> | |
| 
 | |
| 		<p>LDrawLoader returns a [page:Group] object which contains an object hierarchy. Depending of each subobject | |
| 		type, its .userData member will contain the following members: <br /> | |
| 		In a [page:Group], the userData member will contain: <br /> | |
| 		<ul> | |
| 			<li>.numBuildingSteps: Only in the root [page:Group], Indicates total number of building steps in | |
| 			the model. These can be used to set visibility of objects to show different building steps, which is | |
| 			done in the example.</li> | |
| 			<li>.buildingStep: Indicates the building index of this step.</li> | |
| 			<li>.category: Contains, if not null, the [page:String] category for this piece or model.</li> | |
| 			<li>.keywords: Contains, if not null, an array of [page:String] keywords for this piece or model.</li> | |
| 		</ul> | |
| 		</p> | |
| 		<p>In a [page:Material], the userData member will contain: | |
| 		<ul> | |
| 			<li>.code: Indicates the LDraw code for this material.</li> | |
| 			<li>.edgeMaterial: Only in a [page:Mesh] material, indicates the [page:LineBasicMaterial] belonging to edges | |
| 			of the same color code (in the LDraw format, each surface material is also related to an edge material)</li> | |
| 			<li>.conditionalEdgeMaterial: Only in a [page:LineSegments] material, indicates the [page:Material] belonging | |
| 			to conditional edges of the same color code.</li> | |
| 		</ul> | |
| 		</p> | |
| 
 | |
| 		<br> | |
| 		<hr> | |
| 
 | |
| 		<h2>Constructor</h2> | |
| 
 | |
| 		<h3>[name]( [param:LoadingManager manager] )</h3> | |
| 		<p> | |
| 		[page:LoadingManager manager] — The [page:LoadingManager loadingManager] for the loader to use. Default is [page:LoadingManager THREE.DefaultLoadingManager]. | |
| 		</p> | |
| 		<p> | |
| 		Creates a new [name]. | |
| 		</p> | |
| 
 | |
| 		<h2>Properties</h2> | |
| 		<p>See the base [page:Loader] class for common properties.</p> | |
| 
 | |
| 		<h2>Methods</h2> | |
| 		<p>See the base [page:Loader] class for common methods.</p> | |
| 
 | |
| 		<h3>[method:undefined load]( [param:String url], [param:Function onLoad], [param:Function onProgress], [param:Function onError] )</h3> | |
| 		<p> | |
| 		[page:String url] — A string containing the path/URL of the LDraw file.<br /> | |
| 		[page:Function onLoad] — A function to be called after the loading is successfully completed. The function receives the loaded JSON response returned from [page:Function parse].<br /> | |
| 		[page:Function onProgress] — (optional) A function to be called while the loading is in progress. The argument will be the XMLHttpRequest instance, that contains .[page:Integer total] and .[page:Integer loaded] bytes. If the server does not set the Content-Length header; .[page:Integer total] will be 0.<br /> | |
| 		[page:Function onError] — (optional) A function to be called if an error occurs during loading. The function receives error as an argument.<br /> | |
| 		</p> | |
| 		<p> | |
| 		Begin loading from url and call the callback function with the parsed response content. | |
| 		</p> | |
| 
 | |
| 		<h3>[method:this setPartsLibraryPath]( [param:String path] )</h3> | |
| 		<p> | |
| 		[page:String path] —  Path to library parts files to load referenced parts from. This is different from [page:Loader.setPath], which indicates the path to load the main asset from.<br /> | |
| 		</p> | |
| 		<p> | |
| 		This method must be called prior to [page:.load] unless the model to load does not reference library parts (usually it will be a model with all its parts packed in a single file) | |
| 		</p> | |
| 
 | |
| 		<h3>[method:this setFileMap]( [param:Map fileMap] )</h3> | |
| 		<p> | |
| 		[page:Map map] — Set a map from [page:String] to [page:String] which maps referenced library filenames to new filenames. If a fileMap is not specified (the default), library parts will be accessed by trial and error in subfolders 'parts', 'p' and 'models'. | |
| 		</p> | |
| 
 | |
| 		<h3>[method:undefined parse]( [param:String text], [param:String path], [param:Function onLoad], [param:Function onError] )</h3> | |
| 		<p> | |
| 		[page:String text] — LDraw asset to parse, as string.<br /> | |
| 		[page:String path] — The base path from which to find other referenced LDraw asset files.<br /> | |
| 		[page:Function onLoad] — A function to be called when parse completes.<br /> | |
| 		</p> | |
| 		<p> | |
| 		Parse a LDraw file contents as a String and fire [page:Function onLoad] callback when complete. The argument to [page:Function onLoad] will be an [page:Group] that contains hierarchy of [page:Group], [page:Mesh] and [page:LineSegments] (with other part data in .userData fields). | |
| 		</p> | |
| 
 | |
| 		<h3>[method:Material getMaterial]( [param:String colourCode] )</h3> | |
| 		<p> | |
| 		[page:String colourCode] — Color code to get the associated [page:Material]. | |
| 		</p> | |
| 
 | |
| 		<h3>[method:String getMainMaterial]()</h3> | |
| 		<p> | |
| 		Returns the [page:Material] for the main LDraw color. | |
| 		</p> | |
| 
 | |
| 		<p>For an already loaded LDraw asset, returns the [page:Material] associated with the main color code. | |
| 		This method can be useful to modify the main material of a model or part that exposes it. | |
| 		</p> | |
| 
 | |
| 		<p> | |
| 		The main color code is the standard way to color an LDraw part. It is '16' for triangles and '24' for edges. Usually | |
| 		a complete model will not expose the main color (that is, no part uses the code '16' at the top level, because they | |
| 		are assigned other specific colors) An LDraw part file on the other hand will expose the code '16' to be colored, and | |
| 		can have additional fixed colors. | |
| 		</p> | |
| 
 | |
| 		<h3>[method:String getMainEdgeMaterial]()</h3> | |
| 		<p> | |
| 		Returns the [page:Material] for the edges main LDraw color. | |
| 		</p> | |
| 
 | |
| 		<h3>[method:void preloadMaterials]( [param:String path] )</h3> | |
| 		<p> | |
| 		[page:String path] — Path of the LDraw materials asset. | |
| 		</p> | |
| 
 | |
| 		<p>This async method preloads materials from a single LDraw file. In the official parts library there is a special | |
| 		file which is loaded always the first (LDConfig.ldr) and contains all the standard color codes. This method is | |
| 		intended to be used with not packed files, for example in an editor where materials are preloaded and parts are | |
| 		loaded on demand.</p> | |
| 
 | |
| 
 | |
| 		<h2>Source</h2> | |
| 
 | |
| 		<p> | |
| 			[link:https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/LDrawLoader.js examples/jsm/loaders/LDrawLoader.js] | |
| 		</p> | |
| 	</body> | |
| </html>
 | |
| 
 |