import { RequestHeader, ResponseHeader } from "./header";
import { Ray, Vec3, FrameTreeSnapshot } from "./geometry";
import _m0 from "protobufjs/minimal";
export declare const protobufPackage = "bosdyn.api";
export interface RaycastRequest {
    /** Common request header. */
    header: RequestHeader | undefined;
    /** The ray's coordinate frame. When unset, this will default to vision frame. */
    rayFrameName: string;
    /** The ray, containing and origin and an direction. */
    ray: Ray | undefined;
    /**
     * Ignore intersections closer than this location on the ray.
     * Defaults to 0 if not provided.
     */
    minIntersectionDistance: number;
    /**
     * Type of the raycast you want to perform.  If multiple are set, the result will wait until
     * all raycasts are complete and return a single result proto.
     *
     * If this field is left empty, all available sources are used.
     */
    intersectionTypes: RayIntersection_Type[];
}
export interface RayIntersection {
    /** Type of the raycast intersection that was performed. */
    type: RayIntersection_Type;
    /** Position of ray cast hit in the RaycastResponse hit_frame. */
    hitPositionInHitFrame: Vec3 | undefined;
    /** Distance of hit from ray origin. */
    distanceMeters: number;
}
export declare enum RayIntersection_Type {
    /** TYPE_UNKNOWN - TYPE_UNKNOWN should not be used. */
    TYPE_UNKNOWN = 0,
    /** TYPE_GROUND_PLANE - Intersected against estimated ground plane. */
    TYPE_GROUND_PLANE = 1,
    /** TYPE_TERRAIN_MAP - Intersected against the terrain map. */
    TYPE_TERRAIN_MAP = 2,
    /** TYPE_VOXEL_MAP - Intersected against the full 3D voxel map. */
    TYPE_VOXEL_MAP = 3,
    /** TYPE_HAND_DEPTH - Intersected against the hand depth data. */
    TYPE_HAND_DEPTH = 4,
    UNRECOGNIZED = -1
}
export declare function rayIntersection_TypeFromJSON(object: any): RayIntersection_Type;
export declare function rayIntersection_TypeToJSON(object: RayIntersection_Type): string;
export interface RaycastResponse {
    /** Common response header. */
    header: ResponseHeader | undefined;
    /** Return status for a request. */
    status: RaycastResponse_Status;
    /** Human-readable error description.  Not for programmatic analysis. */
    message: string;
    /**
     * The frame raycast hits are returned in. Generally this should be the same frame the client
     * initially requested in.
     */
    hitFrameName: string;
    /** Ray cast hits, sorted with the closest hit first along the ray's extent. */
    hits: RayIntersection[];
    /**
     * A tree-based collection of transformations, which will include the
     * transformations to each of the returned world objects in addition to
     * transformations to the common frames ("vision", "body", "odom").  All
     * transforms within the snapshot are taken at the time when the request is received.
     *
     * Note that each object's frame names are defined within the properties
     * submessage e.g. "frame_name".
     */
    transformsSnapshot: FrameTreeSnapshot | undefined;
}
export declare enum RaycastResponse_Status {
    /** STATUS_UNKNOWN - An unknown / unexpected error occurred. */
    STATUS_UNKNOWN = 0,
    /** STATUS_OK - Request was accepted. */
    STATUS_OK = 1,
    /** STATUS_INVALID_REQUEST - [Programming Error] Request was invalid / malformed in some way. */
    STATUS_INVALID_REQUEST = 2,
    /** STATUS_INVALID_INTERSECTION_TYPE - [Programming Error] Requested source not valid for current robot configuration. */
    STATUS_INVALID_INTERSECTION_TYPE = 3,
    /** STATUS_UNKNOWN_FRAME - [Frame Error] The frame_name for a command was not a known frame. */
    STATUS_UNKNOWN_FRAME = 4,
    UNRECOGNIZED = -1
}
export declare function raycastResponse_StatusFromJSON(object: any): RaycastResponse_Status;
export declare function raycastResponse_StatusToJSON(object: RaycastResponse_Status): string;
export declare const RaycastRequest: {
    encode(message: RaycastRequest, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): RaycastRequest;
    fromJSON(object: any): RaycastRequest;
    toJSON(message: RaycastRequest): unknown;
    fromPartial<I extends {
        header?: {
            requestTimestamp?: Date | undefined;
            clientName?: string | undefined;
            disableRpcLogging?: boolean | undefined;
        } | undefined;
        rayFrameName?: string | undefined;
        ray?: {
            origin?: {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } | undefined;
            direction?: {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } | undefined;
        } | undefined;
        minIntersectionDistance?: number | undefined;
        intersectionTypes?: RayIntersection_Type[] | undefined;
    } & {
        header?: ({
            requestTimestamp?: Date | undefined;
            clientName?: string | undefined;
            disableRpcLogging?: boolean | undefined;
        } & {
            requestTimestamp?: Date | undefined;
            clientName?: string | undefined;
            disableRpcLogging?: boolean | undefined;
        } & { [K in Exclude<keyof I["header"], keyof RequestHeader>]: never; }) | undefined;
        rayFrameName?: string | undefined;
        ray?: ({
            origin?: {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } | undefined;
            direction?: {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } | undefined;
        } & {
            origin?: ({
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } & {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } & { [K_1 in Exclude<keyof I["ray"]["origin"], keyof Vec3>]: never; }) | undefined;
            direction?: ({
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } & {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } & { [K_2 in Exclude<keyof I["ray"]["direction"], keyof Vec3>]: never; }) | undefined;
        } & { [K_3 in Exclude<keyof I["ray"], keyof Ray>]: never; }) | undefined;
        minIntersectionDistance?: number | undefined;
        intersectionTypes?: (RayIntersection_Type[] & RayIntersection_Type[] & { [K_4 in Exclude<keyof I["intersectionTypes"], keyof RayIntersection_Type[]>]: never; }) | undefined;
    } & { [K_5 in Exclude<keyof I, keyof RaycastRequest>]: never; }>(object: I): RaycastRequest;
};
export declare const RayIntersection: {
    encode(message: RayIntersection, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): RayIntersection;
    fromJSON(object: any): RayIntersection;
    toJSON(message: RayIntersection): unknown;
    fromPartial<I extends {
        type?: RayIntersection_Type | undefined;
        hitPositionInHitFrame?: {
            x?: number | undefined;
            y?: number | undefined;
            z?: number | undefined;
        } | undefined;
        distanceMeters?: number | undefined;
    } & {
        type?: RayIntersection_Type | undefined;
        hitPositionInHitFrame?: ({
            x?: number | undefined;
            y?: number | undefined;
            z?: number | undefined;
        } & {
            x?: number | undefined;
            y?: number | undefined;
            z?: number | undefined;
        } & { [K in Exclude<keyof I["hitPositionInHitFrame"], keyof Vec3>]: never; }) | undefined;
        distanceMeters?: number | undefined;
    } & { [K_1 in Exclude<keyof I, keyof RayIntersection>]: never; }>(object: I): RayIntersection;
};
export declare const RaycastResponse: {
    encode(message: RaycastResponse, writer?: _m0.Writer): _m0.Writer;
    decode(input: _m0.Reader | Uint8Array, length?: number): RaycastResponse;
    fromJSON(object: any): RaycastResponse;
    toJSON(message: RaycastResponse): unknown;
    fromPartial<I extends {
        header?: {
            requestHeader?: {
                requestTimestamp?: Date | undefined;
                clientName?: string | undefined;
                disableRpcLogging?: boolean | undefined;
            } | undefined;
            requestReceivedTimestamp?: Date | undefined;
            responseTimestamp?: Date | undefined;
            error?: {
                code?: import("./header").CommonError_Code | undefined;
                message?: string | undefined;
                data?: {
                    typeUrl?: string | undefined;
                    value?: Uint8Array | undefined;
                } | undefined;
            } | undefined;
            request?: {
                typeUrl?: string | undefined;
                value?: Uint8Array | undefined;
            } | undefined;
        } | undefined;
        status?: RaycastResponse_Status | undefined;
        message?: string | undefined;
        hitFrameName?: string | undefined;
        hits?: {
            type?: RayIntersection_Type | undefined;
            hitPositionInHitFrame?: {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } | undefined;
            distanceMeters?: number | undefined;
        }[] | undefined;
        transformsSnapshot?: {
            childToParentEdgeMap?: {
                [x: string]: {
                    parentFrameName?: string | undefined;
                    parentTformChild?: {
                        position?: {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                        } | undefined;
                        rotation?: {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                            w?: number | undefined;
                        } | undefined;
                    } | undefined;
                } | undefined;
            } | undefined;
        } | undefined;
    } & {
        header?: ({
            requestHeader?: {
                requestTimestamp?: Date | undefined;
                clientName?: string | undefined;
                disableRpcLogging?: boolean | undefined;
            } | undefined;
            requestReceivedTimestamp?: Date | undefined;
            responseTimestamp?: Date | undefined;
            error?: {
                code?: import("./header").CommonError_Code | undefined;
                message?: string | undefined;
                data?: {
                    typeUrl?: string | undefined;
                    value?: Uint8Array | undefined;
                } | undefined;
            } | undefined;
            request?: {
                typeUrl?: string | undefined;
                value?: Uint8Array | undefined;
            } | undefined;
        } & {
            requestHeader?: ({
                requestTimestamp?: Date | undefined;
                clientName?: string | undefined;
                disableRpcLogging?: boolean | undefined;
            } & {
                requestTimestamp?: Date | undefined;
                clientName?: string | undefined;
                disableRpcLogging?: boolean | undefined;
            } & { [K in Exclude<keyof I["header"]["requestHeader"], keyof RequestHeader>]: never; }) | undefined;
            requestReceivedTimestamp?: Date | undefined;
            responseTimestamp?: Date | undefined;
            error?: ({
                code?: import("./header").CommonError_Code | undefined;
                message?: string | undefined;
                data?: {
                    typeUrl?: string | undefined;
                    value?: Uint8Array | undefined;
                } | undefined;
            } & {
                code?: import("./header").CommonError_Code | undefined;
                message?: string | undefined;
                data?: ({
                    typeUrl?: string | undefined;
                    value?: Uint8Array | undefined;
                } & {
                    typeUrl?: string | undefined;
                    value?: Uint8Array | undefined;
                } & { [K_1 in Exclude<keyof I["header"]["error"]["data"], keyof import("../../google/protobuf/any").Any>]: never; }) | undefined;
            } & { [K_2 in Exclude<keyof I["header"]["error"], keyof import("./header").CommonError>]: never; }) | undefined;
            request?: ({
                typeUrl?: string | undefined;
                value?: Uint8Array | undefined;
            } & {
                typeUrl?: string | undefined;
                value?: Uint8Array | undefined;
            } & { [K_3 in Exclude<keyof I["header"]["request"], keyof import("../../google/protobuf/any").Any>]: never; }) | undefined;
        } & { [K_4 in Exclude<keyof I["header"], keyof ResponseHeader>]: never; }) | undefined;
        status?: RaycastResponse_Status | undefined;
        message?: string | undefined;
        hitFrameName?: string | undefined;
        hits?: ({
            type?: RayIntersection_Type | undefined;
            hitPositionInHitFrame?: {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } | undefined;
            distanceMeters?: number | undefined;
        }[] & ({
            type?: RayIntersection_Type | undefined;
            hitPositionInHitFrame?: {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } | undefined;
            distanceMeters?: number | undefined;
        } & {
            type?: RayIntersection_Type | undefined;
            hitPositionInHitFrame?: ({
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } & {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } & { [K_5 in Exclude<keyof I["hits"][number]["hitPositionInHitFrame"], keyof Vec3>]: never; }) | undefined;
            distanceMeters?: number | undefined;
        } & { [K_6 in Exclude<keyof I["hits"][number], keyof RayIntersection>]: never; })[] & { [K_7 in Exclude<keyof I["hits"], keyof {
            type?: RayIntersection_Type | undefined;
            hitPositionInHitFrame?: {
                x?: number | undefined;
                y?: number | undefined;
                z?: number | undefined;
            } | undefined;
            distanceMeters?: number | undefined;
        }[]>]: never; }) | undefined;
        transformsSnapshot?: ({
            childToParentEdgeMap?: {
                [x: string]: {
                    parentFrameName?: string | undefined;
                    parentTformChild?: {
                        position?: {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                        } | undefined;
                        rotation?: {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                            w?: number | undefined;
                        } | undefined;
                    } | undefined;
                } | undefined;
            } | undefined;
        } & {
            childToParentEdgeMap?: ({
                [x: string]: {
                    parentFrameName?: string | undefined;
                    parentTformChild?: {
                        position?: {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                        } | undefined;
                        rotation?: {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                            w?: number | undefined;
                        } | undefined;
                    } | undefined;
                } | undefined;
            } & {
                [x: string]: ({
                    parentFrameName?: string | undefined;
                    parentTformChild?: {
                        position?: {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                        } | undefined;
                        rotation?: {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                            w?: number | undefined;
                        } | undefined;
                    } | undefined;
                } & {
                    parentFrameName?: string | undefined;
                    parentTformChild?: ({
                        position?: {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                        } | undefined;
                        rotation?: {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                            w?: number | undefined;
                        } | undefined;
                    } & {
                        position?: ({
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                        } & {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                        } & { [K_8 in Exclude<keyof I["transformsSnapshot"]["childToParentEdgeMap"][string]["parentTformChild"]["position"], keyof Vec3>]: never; }) | undefined;
                        rotation?: ({
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                            w?: number | undefined;
                        } & {
                            x?: number | undefined;
                            y?: number | undefined;
                            z?: number | undefined;
                            w?: number | undefined;
                        } & { [K_9 in Exclude<keyof I["transformsSnapshot"]["childToParentEdgeMap"][string]["parentTformChild"]["rotation"], keyof import("./geometry").Quaternion>]: never; }) | undefined;
                    } & { [K_10 in Exclude<keyof I["transformsSnapshot"]["childToParentEdgeMap"][string]["parentTformChild"], keyof import("./geometry").SE3Pose>]: never; }) | undefined;
                } & { [K_11 in Exclude<keyof I["transformsSnapshot"]["childToParentEdgeMap"][string], keyof import("./geometry").FrameTreeSnapshot_ParentEdge>]: never; }) | undefined;
            } & { [K_12 in Exclude<keyof I["transformsSnapshot"]["childToParentEdgeMap"], string | number>]: never; }) | undefined;
        } & { [K_13 in Exclude<keyof I["transformsSnapshot"], "childToParentEdgeMap">]: never; }) | undefined;
    } & { [K_14 in Exclude<keyof I, keyof RaycastResponse>]: never; }>(object: I): RaycastResponse;
};
declare type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
export declare type DeepPartial<T> = T extends Builtin ? T : T extends Array<infer U> ? Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
    [K in keyof T]?: DeepPartial<T[K]>;
} : Partial<T>;
declare type KeysOfUnion<T> = T extends T ? keyof T : never;
export declare type Exact<P, I extends P> = P extends Builtin ? P : P & {
    [K in keyof P]: Exact<P[K], I[K]>;
} & {
    [K in Exclude<keyof I, KeysOfUnion<P>>]: never;
};
export {};
//# sourceMappingURL=ray_cast.d.ts.map