@babylonjs/loaders
Version:
For usage documentation please visit https://doc.babylonjs.com/features/featuresDeepDive/importers/loadingFileTypes/.
176 lines (175 loc) • 7.33 kB
TypeScript
import type { AssetContainer } from "@babylonjs/core/assetContainer.js";
import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
import type { Scene } from "@babylonjs/core/scene.js";
import type { Nullable } from "@babylonjs/core/types.js";
import type { OBJLoadingOptions } from "./objLoadingOptions.js";
/**
* Class used to load mesh data from OBJ content
*/
export declare class SolidParser {
/** Object descriptor */
static ObjectDescriptor: RegExp;
/** Group descriptor */
static GroupDescriptor: RegExp;
/** Material lib descriptor */
static MtlLibGroupDescriptor: RegExp;
/** Use a material descriptor */
static UseMtlDescriptor: RegExp;
/** Smooth descriptor */
static SmoothDescriptor: RegExp;
/** Pattern used to detect a vertex */
static VertexPattern: RegExp;
/** Pattern used to detect a normal */
static NormalPattern: RegExp;
/** Pattern used to detect a UV set */
static UVPattern: RegExp;
/** Pattern used to detect a first kind of face (f vertex vertex vertex) */
static FacePattern1: RegExp;
/** Pattern used to detect a second kind of face (f vertex/uvs vertex/uvs vertex/uvs) */
static FacePattern2: RegExp;
/** Pattern used to detect a third kind of face (f vertex/uvs/normal vertex/uvs/normal vertex/uvs/normal) */
static FacePattern3: RegExp;
/** Pattern used to detect a fourth kind of face (f vertex//normal vertex//normal vertex//normal)*/
static FacePattern4: RegExp;
/** Pattern used to detect a fifth kind of face (f -vertex/-uvs/-normal -vertex/-uvs/-normal -vertex/-uvs/-normal) */
static FacePattern5: RegExp;
/** Pattern used to detect a line(l vertex vertex) */
static LinePattern1: RegExp;
/** Pattern used to detect a second kind of line (l vertex/uvs vertex/uvs) */
static LinePattern2: RegExp;
/** Pattern used to detect a third kind of line (l vertex/uvs/normal vertex/uvs/normal) */
static LinePattern3: RegExp;
private _loadingOptions;
private _positions;
private _normals;
private _uvs;
private _colors;
private _extColors;
private _meshesFromObj;
private _handledMesh;
private _indicesForBabylon;
private _wrappedPositionForBabylon;
private _wrappedUvsForBabylon;
private _wrappedColorsForBabylon;
private _wrappedNormalsForBabylon;
private _tuplePosNorm;
private _curPositionInIndices;
private _hasMeshes;
private _unwrappedPositionsForBabylon;
private _unwrappedColorsForBabylon;
private _unwrappedNormalsForBabylon;
private _unwrappedUVForBabylon;
private _triangles;
private _materialNameFromObj;
private _objMeshName;
private _increment;
private _isFirstMaterial;
private _grayColor;
private _materialToUse;
private _babylonMeshesArray;
private _pushTriangle;
private _handednessSign;
private _hasLineData;
/**
* Creates a new SolidParser
* @param materialToUse defines the array to fill with the list of materials to use (it will be filled by the parse function)
* @param babylonMeshesArray defines the array to fill with the list of loaded meshes (it will be filled by the parse function)
* @param loadingOptions defines the loading options to use
*/
constructor(materialToUse: string[], babylonMeshesArray: Array<Mesh>, loadingOptions: OBJLoadingOptions);
/**
* Search for obj in the given array.
* This function is called to check if a couple of data already exists in an array.
*
* If found, returns the index of the founded tuple index. Returns -1 if not found
* @param arr Array<{ normals: Array<number>, idx: Array<number> }>
* @param obj Array<number>
* @returns {boolean}
*/
private _isInArray;
private _isInArrayUV;
/**
* This function set the data for each triangle.
* Data are position, normals and uvs
* If a tuple of (position, normal) is not set, add the data into the corresponding array
* If the tuple already exist, add only their indice
*
* @param data The vertex's data
* * indicesPositionFromObj: The index in positions array
* * indicesUvsFromObj: The index in uvs array
* * indicesNormalFromObj: The index in normals array
* * positionVectorFromOBJ: The value of position at index objIndice
* * textureVectorFromOBJ: The value of uvs
* * normalsVectorFromOBJ: The value of normals at index objNormale
* * positionColorsFromOBJ: The value of color at index objIndice
*/
private _setData;
/**
* Transform Vector() and BABYLON.Color() objects into numbers in an array
*/
private _unwrapData;
/**
* Create triangles from polygons
* It is important to notice that a triangle is a polygon
* We get 5 patterns of face defined in OBJ File :
* facePattern1 = ["1","2","3","4","5","6"]
* facePattern2 = ["1/1","2/2","3/3","4/4","5/5","6/6"]
* facePattern3 = ["1/1/1","2/2/2","3/3/3","4/4/4","5/5/5","6/6/6"]
* facePattern4 = ["1//1","2//2","3//3","4//4","5//5","6//6"]
* facePattern5 = ["-1/-1/-1","-2/-2/-2","-3/-3/-3","-4/-4/-4","-5/-5/-5","-6/-6/-6"]
* Each pattern is divided by the same method
* @param faces Array[String] The indices of elements
* @param v Integer The variable to increment
*/
private _getTriangles;
/**
* To get color between color and extension color
* @param index Integer The index of the element in the array
* @returns value of target color
*/
private _getColor;
/**
* Create triangles and push the data for each polygon for the pattern 1
* In this pattern we get vertice positions
* @param face
* @param v
*/
private _setDataForCurrentFaceWithPattern1;
/**
* Create triangles and push the data for each polygon for the pattern 2
* In this pattern we get vertice positions and uvs
* @param face
* @param v
*/
private _setDataForCurrentFaceWithPattern2;
/**
* Create triangles and push the data for each polygon for the pattern 3
* In this pattern we get vertice positions, uvs and normals
* @param face
* @param v
*/
private _setDataForCurrentFaceWithPattern3;
/**
* Create triangles and push the data for each polygon for the pattern 4
* In this pattern we get vertice positions and normals
* @param face
* @param v
*/
private _setDataForCurrentFaceWithPattern4;
private _setDataForCurrentFaceWithPattern5;
private _addPreviousObjMesh;
private _optimizeNormals;
private static _IsLineElement;
private static _IsObjectElement;
private static _IsGroupElement;
private static _GetZbrushMRGB;
/**
* Function used to parse an OBJ string
* @param meshesNames defines the list of meshes to load (all if not defined)
* @param data defines the OBJ string
* @param scene defines the hosting scene
* @param assetContainer defines the asset container to load data in
* @param onFileToLoadFound defines a callback that will be called if a MTL file is found
*/
parse(meshesNames: any, data: string, scene: Scene, assetContainer: Nullable<AssetContainer>, onFileToLoadFound: (fileToLoad: string) => void): void;
}