Доступ к объединению Flatbuffers в Python - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть следующие определения в моем файле схемы:

union UGeometry { Polygon, Point, Linestring }

table Point {
    point:Vec2;
}

table Polygon {
    points:[Vec2List]; 
}

table Geometry {
    g:UGeometry;
}

(Удален некоторый шаблонный код для проверки типов и других вещей)

В таблице Geometry хранятся геометрии типа Point, Polygonи LineString.Я могу получить к нему доступ в C ++ и Javascript, как обычно, например, в Javascript я использую следующее для получения типа Polygon:

var rawPolygon = flatBufGeometry.g( new storage.Polygon() );

Однако я не могу найти такой метод доступа в сгенерированном коде Python.Следующее не будет работать:

rawPolygon = rawGeometry.G()(storage.Polygon.Polygon())

Как я могу получить доступ к объектам объединения Flatbuffers в таблице, используя Python?

1 Ответ

0 голосов
/ 24 июля 2019

Вот пример Google monster.fbs, так как все flatbuffer имеют схожую структуру и генерируют файл python.

union Equipment { Weapon } // Optionally add more tables.


table Monster {
  pos:Vec3;
  mana:short = 150;
  hp:short = 100;
  name:string;
  friendly:bool = false (deprecated);
  inventory:[ubyte];
  color:Color = Blue;
  weapons:[Weapon];
  equipped:Equipment;
  path:[Vec3];
}

table Weapon {
  name:string;
  damage:short;
}

root_type Monster;

для доступа к оружию, попробуйте

import MyGame.Sample.Equipment
import MyGame.Sample.Weapon

union_weapon = MyGame.Sample.Weapon.Weapon()
union_weapon.Init(monster.Equipped().Bytes, monster.Equipped().Pos)

source: https://github.com/google/flatbuffers/blob/master/samples/monster.fbs https://github.com/google/flatbuffers/blob/master/samples/sample_binary.py

...