import { AttribValue, NumericAttribValue } from '../../types/GlobalTypes';
import { Vector2, Vector3, Vector4 } from 'three';
import { CoreObjectType, ObjectBuilder, ObjectContent } from './ObjectContent';
import { AttribClass } from './Constant';
import type { CoreGroup } from './Group';
import { TraversedRelatedEntityData } from './entities/utils/TraversedRelatedEntities';
export declare abstract class CoreEntity {
    protected _index: number;
    constructor(content?: any, index?: number);
    index(): number;
    setIndex(index: number): this;
    abstract geometry(): any;
    abstract builder<T extends CoreObjectType>(): ObjectBuilder<T> | undefined;
    abstract setAttribValue(attribName: string, attribValue: NumericAttribValue | string): void;
    abstract attribValue(attribName: string, target?: Vector2 | Vector3 | Vector4): AttribValue | undefined;
    abstract stringAttribValue(attribName: string): string | null;
    abstract position(target: Vector3): Vector3;
    abstract relatedEntities(attribClass: AttribClass, coreGroup: CoreGroup, target: CoreEntity[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
}
export declare abstract class CoreEntityWithObject<T extends CoreObjectType> extends CoreEntity {
    protected _object: ObjectContent<T>;
    constructor(object: ObjectContent<T>, index?: number);
    object(): ObjectContent<T>;
    static relatedPrimitiveIds<T extends CoreObjectType>(object: ObjectContent<T>, index: number, target: number[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    static relatedVertexIds<T extends CoreObjectType>(object: ObjectContent<T>, index: number, target: number[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    static relatedPointIds<T extends CoreObjectType>(object: ObjectContent<T>, index: number, target: number[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    relatedPrimitiveIds(target: number[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    relatedVertexIds(target: number[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    relatedPointIds(target: number[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    static relatedPointClass<T extends CoreObjectType>(object: ObjectContent<T>): typeof CoreEntityWithObject<T>;
    static relatedVertexClass<T extends CoreObjectType>(object: ObjectContent<T>): typeof CoreEntityWithObject<T>;
    static relatedPrimitiveClass<T extends CoreObjectType>(object: ObjectContent<T>): typeof CoreEntityWithObject<T>;
    static relatedObjectClass<T extends CoreObjectType>(object: ObjectContent<T>): typeof CoreEntityWithObject<T>;
    static relatedEntityClass<T extends CoreObjectType>(object: ObjectContent<T>, entityClass: AttribClass.POINT | AttribClass.VERTEX | AttribClass.PRIMITIVE | AttribClass.OBJECT): typeof CoreEntityWithObject<T>;
    static relatedPoints<T extends CoreObjectType>(object: ObjectContent<T>, entityIndex: number, target: CoreEntityWithObject<T>[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    static relatedVertices<T extends CoreObjectType>(object: ObjectContent<T>, entityIndex: number, target: CoreEntityWithObject<T>[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    static relatedPrimitives<T extends CoreObjectType>(object: ObjectContent<T>, entityIndex: number, target: CoreEntityWithObject<T>[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    static relatedObjects<T extends CoreObjectType>(object: ObjectContent<T>, entityIndex: number, target: CoreEntityWithObject<T>[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    relatedPoints(target: CoreEntityWithObject<T>[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    relatedVertices(target: CoreEntityWithObject<T>[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    relatedPrimitives(target: CoreEntityWithObject<T>[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
    relatedObjects(target: CoreEntityWithObject<T>[], traversedRelatedEntityData?: TraversedRelatedEntityData): void;
}
