@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
98 lines (92 loc) • 2.74 kB
text/typescript
import {BaseSopOperation} from './_Base';
import {CoreGroup} from '../../../core/geometry/Group';
import {InputCloneMode} from '../../../engine/poly/InputCloneMode';
import {isBooleanTrue} from '../../../core/BooleanValue';
import {DefaultOperationParams} from '../../../core/operations/_Base';
import {CoreObjectType, ObjectContent} from '../../../core/geometry/ObjectContent';
import {CoreMask} from '../../../core/geometry/Mask';
interface ObjectPropertiesSopParams extends DefaultOperationParams {
group: string;
// name
tname: boolean;
name: string;
// renderOrder
trenderOrder: boolean;
renderOrder: number;
// frustumCulled
tfrustumCulled: boolean;
frustumCulled: boolean;
// matrixAutoUpdate
tmatrixAutoUpdate: boolean;
matrixAutoUpdate: boolean;
// visible
tvisible: boolean;
visible: boolean;
// castShadow
tcastShadow: boolean;
castShadow: boolean;
// receiveShadow
treceiveShadow: boolean;
receiveShadow: boolean;
}
export class ObjectPropertiesSopOperation extends BaseSopOperation {
static override readonly DEFAULT_PARAMS: ObjectPropertiesSopParams = {
group: '',
// name
tname: false,
name: '',
// renderOrder
trenderOrder: false,
renderOrder: 0,
// frustrumCulled
tfrustumCulled: false,
frustumCulled: true,
// matrixAutoUpdate
tmatrixAutoUpdate: false,
matrixAutoUpdate: false,
// visible
tvisible: false,
visible: true,
// castShadow
tcastShadow: false,
castShadow: true,
// receiveShadow
treceiveShadow: false,
receiveShadow: true,
};
static override readonly INPUT_CLONED_STATE = InputCloneMode.FROM_NODE;
static override type(): Readonly<'objectProperties'> {
return 'objectProperties';
}
override cook(inputCoreGroups: CoreGroup[], params: ObjectPropertiesSopParams) {
const coreGroup = inputCoreGroups[0];
const selectedObjects = CoreMask.filterObjects(coreGroup, params);
for (let object of selectedObjects) {
this._updateObject(object, params);
}
return coreGroup;
}
private _updateObject<T extends CoreObjectType>(object: ObjectContent<T>, params: ObjectPropertiesSopParams) {
if (isBooleanTrue(params.tname)) {
object.name = params.name;
}
if (isBooleanTrue(params.trenderOrder)) {
object.renderOrder = params.renderOrder;
}
if (isBooleanTrue(params.tfrustumCulled)) {
object.frustumCulled = params.frustumCulled;
}
if (isBooleanTrue(params.tmatrixAutoUpdate)) {
object.matrixAutoUpdate = params.matrixAutoUpdate;
}
if (isBooleanTrue(params.tvisible)) {
object.visible = params.visible;
}
if (isBooleanTrue(params.tcastShadow)) {
object.castShadow = params.castShadow;
}
if (isBooleanTrue(params.treceiveShadow)) {
object.receiveShadow = params.receiveShadow;
}
}
}