UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

132 lines (117 loc) 4.2 kB
// import {BaseSopOperation} from './_Base'; // import {InputCloneMode} from '../../poly/InputCloneMode'; // import {CSS2DObject} from '../../../core/render/CSSRenderers/CSS2DObject'; // import {CoreString} from '../../../core/String'; // import {CoreGroup} from '../../../core/geometry/Group'; // import {CoreType} from '../../../core/Type'; // import {isBooleanTrue} from '../../../core/BooleanValue'; // import {DefaultOperationParams} from '../../../core/operations/_Base'; // import {Poly} from '../../Poly'; // import {Object3D} from 'three'; // export const DEFAULT_CSS2DOBJECT_CLASS = 'CSS2DObject'; // interface CSS2DObjectParams { // id: string; // className: string; // html: string; // } // const ATTRIBUTE_NAME = { // id: 'id', // className: 'class', // html: 'html', // }; // interface CSS2DObjectSopParams extends DefaultOperationParams { // overrideId: boolean; // id: string; // overrideClassName: boolean; // className: string; // overrideHTML: boolean; // html: string; // copyAttributes: boolean; // attributesToCopy: string; // } // export class CSS2DObjectSopOperation extends BaseSopOperation { // static override readonly DEFAULT_PARAMS: CSS2DObjectSopParams = { // overrideId: false, // id: 'myCSSObject', // overrideClassName: false, // className: DEFAULT_CSS2DOBJECT_CLASS, // overrideHTML: false, // html: '<div>default html</div>', // copyAttributes: false, // attributesToCopy: '', // }; // static override readonly INPUT_CLONED_STATE = InputCloneMode.NEVER; // static override type(): Readonly<'CSS2DObject'> { // return 'CSS2DObject'; // } // override cook(inputCoreGroups: CoreGroup[], params: CSS2DObjectSopParams) { // Poly.onObjectsAddedHooks.registerHook(this.type(), this.traverseObjectOnSopGroupAdd.bind(this)); // const coreGroup = inputCoreGroups[0]; // if (coreGroup) { // const objects = this._createObjectsFromInputPoints(coreGroup, params); // return this.createCoreGroupFromObjects(objects); // } else { // const object = this._createObjectFromScratch(params); // return this.createCoreGroupFromObjects([object]); // } // } // private _createObjectsFromInputPoints(coreGroup: CoreGroup, params: CSS2DObjectSopParams) { // const points = coreGroup.points(); // const objects: CSS2DObject[] = []; // for (let point of points) { // const id = isBooleanTrue(params.useIdAttrib) ? (point.attribValue(ATTRIBUTE_NAME.id) as string) : params.id; // const className = isBooleanTrue(params.useClassAttrib) // ? (point.attribValue(ATTRIBUTE_NAME.className) as string) // : params.className; // const html = isBooleanTrue(params.useHTMLAttrib) // ? (point.attribValue(ATTRIBUTE_NAME.html) as string) // : params.html; // const object = CSS2DObjectSopOperation.createCSSObject({ // id, // className, // html, // }); // const element = object.element; // if (isBooleanTrue(params.copyAttributes)) { // const attribNames = CoreString.attribNames(params.attributesToCopy); // for (let attribName of attribNames) { // const attribValue = point.attribValue(attribName); // if (isString(attribValue)) { // element.setAttribute(attribName, attribValue); // } else { // if (isNumber(attribValue)) { // element.setAttribute(attribName, `${attribValue}`); // } // } // } // } // object.position.copy(point.position()); // object.updateMatrix(); // objects.push(object); // } // return objects; // } // private _createObjectFromScratch(params: CSS2DObjectSopParams) { // const object = CSS2DObjectSopOperation.createCSSObject({ // id: params.id, // className: params.className, // html: params.html, // }); // return object; // } // private static createCSSObject(params: CSS2DObjectParams) { // const element = document.createElement('div'); // element.id = params.id; // element.className = params.className; // element.innerHTML = params.html; // const object = new CSS2DObject(element); // object.matrixAutoUpdate = false; // return object; // } // // // // // // // // // // // traverseObjectOnSopGroupAdd(object: Object3D) {} // }