@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
41 lines (38 loc) • 1.37 kB
text/typescript
import {DeleteSopNode} from '../../Delete';
import {CoreEntity} from '../../../../../core/geometry/CoreEntity';
import {isBooleanTrue} from '../../../../../core/BooleanValue';
import {ExpressionController} from '../../../../params/utils/ExpressionController';
import {ParamType} from '../../../../poly/ParamType';
export class ByExpressionHelper {
constructor(private node: DeleteSopNode) {}
async evalForEntities(entities: CoreEntity[]) {
const param = this.node.p.expression;
if (
this.node.p.expression.hasExpression() &&
param.expressionController &&
param.expressionController.entitiesDependent()
) {
await this._evalEntityDependentExpression(entities, param.expressionController);
} else {
this._evalExpressionsWithoutEntityDependentExpression(entities);
}
}
private async _evalEntityDependentExpression(
entities: CoreEntity[],
expressionController: ExpressionController<ParamType.BOOLEAN>
) {
await expressionController.computeExpressionForEntities(entities, (entity, value: boolean) => {
if (value) {
this.node.entitySelectionHelper.select(entity);
}
});
}
private _evalExpressionsWithoutEntityDependentExpression(entities: CoreEntity[]) {
const value = isBooleanTrue(this.node.pv.expression);
if (value) {
for (const entity of entities) {
this.node.entitySelectionHelper.select(entity);
}
}
}
}