import * as Inputs from "../../api/inputs/inputs";
export class OCCTShape {
    constructor(occ, och) {
        this.occ = occ;
        this.och = och;
    }
    purgeInternalEdges(inputs) {
        const purge = new this.occ.TopOpeBRepTool_PurgeInternalEdges(inputs.shape, true);
        purge.Perform();
        if (purge.IsDone()) {
            return purge.Shape();
        }
        else {
            throw new Error("Could not purge internal edges for the shape");
        }
    }
    unifySameDomain(inputs) {
        const unify = new this.occ.ShapeUpgrade_UnifySameDomain_2(inputs.shape, inputs.unifyEdges, inputs.unifyFaces, inputs.concatBSplines);
        unify.Build();
        return unify.Shape();
    }
    isClosed(inputs) {
        return inputs.shape.Closed_1();
    }
    isConvex(inputs) {
        return inputs.shape.Convex_1();
    }
    isChecked(inputs) {
        return inputs.shape.Checked_1();
    }
    isFree(inputs) {
        return inputs.shape.Free_1();
    }
    isInfinite(inputs) {
        return inputs.shape.Infinite_1();
    }
    isModified(inputs) {
        return inputs.shape.Modified_1();
    }
    isLocked(inputs) {
        return inputs.shape.Locked_1();
    }
    isNull(inputs) {
        return inputs.shape.IsNull();
    }
    isEqual(inputs) {
        return inputs.shape.IsEqual(inputs.otherShape);
    }
    isNotEqual(inputs) {
        return inputs.shape.IsNotEqual(inputs.otherShape);
    }
    isPartner(inputs) {
        return inputs.shape.IsPartner(inputs.otherShape);
    }
    isSame(inputs) {
        return inputs.shape.IsSame(inputs.otherShape);
    }
    getOrientation(inputs) {
        const orientation = inputs.shape.Orientation_1();
        let result;
        if (orientation === this.occ.TopAbs_Orientation.TopAbs_FORWARD) {
            result = Inputs.OCCT.topAbsOrientationEnum.forward;
        }
        else if (orientation === this.occ.TopAbs_Orientation.TopAbs_REVERSED) {
            result = Inputs.OCCT.topAbsOrientationEnum.reversed;
        }
        else if (orientation === this.occ.TopAbs_Orientation.TopAbs_INTERNAL) {
            result = Inputs.OCCT.topAbsOrientationEnum.internal;
        }
        else if (orientation === this.occ.TopAbs_Orientation.TopAbs_EXTERNAL) {
            result = Inputs.OCCT.topAbsOrientationEnum.external;
        }
        return result;
    }
    getShapeType(inputs) {
        return this.och.enumService.getShapeTypeEnum(inputs.shape);
    }
}
