//-----------------------------------------------------------------------------
// This source file is part of eily.acuario.3d
//
// For the latest info, see http://integra-s.com/
//
// Module:
// File: Locations.proto
// Created: 03.10.2012
// Updated:
// Author: Maxim Merkulov mailto:merkulov@integra-s.com
//
// Copyright (c) 2012 Integra-S JSC
//-----------------------------------------------------------------------------
//
// Назначение: хранит пространственное положение
//
//-----------------------------------------------------------------------------
syntax = "proto2";

package eily_acuario_3d.protobuf;

option optimize_for = SPEED;

message Vector2
{
	required double x = 1;
	required double y = 2;
}

message Vector3
{
	required double x = 1;
	required double y = 2;
	required double z = 3;
}

message Vector4
{
	required double x = 1;
	required double y = 2;
	required double z = 3;
	required double w = 4;
}

message Quaternion
{
	required double x = 1;
	required double y = 2;
	required double z = 3;
	required double w = 4;
}

message Location
{
	repeated Vector3 position = 1;
	repeated Quaternion rotation = 2;
	repeated Vector3 scale = 3;
	
	repeated GeographicalPosition OBSOLETE_geoPosition = 4 [deprecated=true];

	repeated string OBSOLETE_uuid = 5 [deprecated=true];
	optional bool deprecated = 6;
	
	optional Quaternion OBSOLETE_worldRotation = 7;
	optional Vector3 OBSOLETE_worldScale = 8;

//-----------------------------------------------------------------------------
//	relative_elevations - смещение высот датчика:
// 							х = смещение высоты относительно ландшафта
//							у = смещение высоты относительно здания
//
//-----------------------------------------------------------------------------
	optional double relative_terrain_elevation = 9; 
	optional double relative_building_elevation = 10;
	
	// C какого-то момента позиция датчиков хранится в wgs84 за пределами данного протобуфера.
	// В в поле position записываются вектор (0,0,0). В данный момент необходимо вернуть возможность
	// загружать датчики с позицией в поле position (записывается сторонними системами, ifc-сервер)
	// Никакого способа узать записано ли в position валидное значение или нет, не существует.
	// Хотя само поле position не обязательное, не записывать его нельзя т.к. в коде старых версий планеты
	// отсутствует проверка его наличия (планета будет падать).
	// Данное поле вводится с целью указать что данные в поле positon являются валидными и их необходимо использовать
	// вместо позиции в wgs84
	optional bool positionIsValid = 11;
}


message GeographicalPosition
{
	required double longitude = 1;
	required double latitude = 2;
	required double height = 3;
}

enum DIRECT_TYPE
{
	DT_GROUP = 0;
	DT_FIELD = 1;
	DT_BACK = 2;
}

message SubmodelField
{  
	required DIRECT_TYPE type = 1;

    optional string name = 2;
	optional string guid = 3;

	optional string file = 4;
	optional int32 pathid = 5;

	optional Vector3 position = 6;
	optional Quaternion rotation = 7;
	optional Vector3 scale = 8;
}

message SubmodelList
{
    repeated string filepaths = 1;
    repeated SubmodelField fields = 2;
}

