32#include <unordered_map>
33#include <unordered_set>
80 std::unordered_map<std::string, std::string>
values;
246 glm::vec3
pos{0.f, 0.f, 0.f};
256 glm::vec3
p1{0.f, 0.f, 0.f};
257 glm::vec3
p2{0.f, 0.f, 0.f};
337 glm::vec3
p1{0.f, 0.f, 0.f};
338 glm::vec3
p2{0.f, 0.f, 0.f};
347 glm::vec3
p1{0.f, 0.f, 0.f};
348 glm::vec3
p2{0.f, 0.f, 0.f};
357 glm::vec3
p1{0.f, 0.f, 0.f};
358 glm::vec3
p2{0.f, 0.f, 0.f};
369 std::vector<glm::vec3>
pts;
378 std::vector<glm::vec3>
pts;
387 glm::vec3
pos{0.f, 0.f, 0.f};
396 glm::vec3
pos{0.f, 0.f, 0.f};
516 std::shared_ptr<DdsObject>
append(std::shared_ptr<DdsObject> obj);
523 std::shared_ptr<DdsObject>
appendWithId(std::shared_ptr<DdsObject> obj);
530 std::shared_ptr<DdsObject>
findById(
const std::string &
id)
const;
536 std::shared_ptr<DdsObject>
findByLabel(
const std::string &label)
const;
581 template <
typename Fn>
584 for (
const auto &
id :
order)
586 auto it =
index.find(
id);
587 if (it !=
index.end() && !it->second->deleted)
593 template <
typename Fn>
596 for (
const auto &
id :
order)
598 auto it =
index.find(
id);
599 if (it ==
index.end() || it->second->deleted)
601 const auto t = it->second->type;
616 template <
typename Fn>
619 std::unordered_set<std::string> referenced;
620 referenced.reserve(
order.size());
622 for (
const auto &
id :
order)
624 auto it =
index.find(
id);
625 if (it ==
index.end() || it->second->deleted)
628 const auto *children = [&]() ->
const std::vector<std::string> * {
629 switch (it->second->type)
632 return &
static_cast<const DdsTransform &
>(*it->second).children;
634 return &
static_cast<const DdsSetUnion &
>(*it->second).operands;
646 for (
const auto &childId : *children)
647 referenced.insert(childId);
650 for (
const auto &
id :
order)
652 auto it =
index.find(
id);
653 if (it ==
index.end() || it->second->deleted)
655 const auto t = it->second->
type;
659 if (referenced.find(
id) != referenced.end())
669 std::unordered_map<std::string, std::shared_ptr<DdsObject>>
index;
674 std::string genId() {
return std::to_string(
nextId++); }
Camera stored in the DDS.
Definition bgi_dds.h:161
DdsCamera()
Definition bgi_dds.h:166
std::string name
Registry key in BgiState::cameras.
Definition bgi_dds.h:163
Camera3D camera
Full camera data.
Definition bgi_dds.h:164
DdsStyle style
Baked draw state at creation time.
Definition bgi_dds.h:144
std::string label
Optional user label; empty = unlabelled.
Definition bgi_dds.h:140
bool visible
Definition bgi_dds.h:142
DdsExternalAttributes externalAttributes
Generic external metadata for bridge/export workflows.
Definition bgi_dds.h:145
DdsObjectType type
Definition bgi_dds.h:141
bool deleted
Soft-delete; object stays in index.
Definition bgi_dds.h:143
virtual ~DdsObject()=default
std::string id
Auto-generated sequential key ("1", "2", …).
Definition bgi_dds.h:139
In-memory DDS scene graph.
Definition bgi_dds.h:502
void forEachDrawing(Fn &&fn) const
Calls fn(DdsObject&) for non-deleted drawing-primitive objects only.
Definition bgi_dds.h:594
uint64_t revision
Definition bgi_dds.h:671
bool remove(const std::string &id)
Soft-deletes the object with the given id.
void compact()
Physically removes soft-deleted entries from order and index.
std::string idAt(int index) const
Returns the insertion-order ID at position index (0-based).
DdsScene(const DdsScene &)=delete
DdsScene & operator=(const DdsScene &)=delete
void clearAll()
Clears ALL objects (cameras, UCS, drawing objects).
std::vector< std::string > order
Definition bgi_dds.h:668
std::shared_ptr< DdsObject > appendWithId(std::shared_ptr< DdsObject > obj)
Appends an object that already has its id field set (used during deserialization to restore the origi...
void forEach(Fn &&fn) const
Calls fn(DdsObject&) for every non-deleted object in insertion order.
Definition bgi_dds.h:582
uint64_t nextId
Definition bgi_dds.h:670
std::string findIdByLabel(const std::string &label) const
Returns the ID of the first non-deleted object with the given label, or "".
std::shared_ptr< DdsObject > findByLabel(const std::string &label) const
Returns the first non-deleted object whose label equals label, or nullptr if none found.
std::shared_ptr< DdsObject > findById(const std::string &id) const
Returns the object with the given id, or nullptr if not found / deleted.
void forEachRenderRoot(Fn &&fn) const
Calls fn(DdsObject&) for top-level render roots only.
Definition bgi_dds.h:617
std::unordered_map< std::string, std::shared_ptr< DdsObject > > index
Definition bgi_dds.h:669
int count() const
Returns the number of non-deleted objects in the scene.
std::shared_ptr< DdsObject > append(std::shared_ptr< DdsObject > obj)
Assigns an auto-generated ID to obj and appends it to the scene.
int countDrawing() const
Returns the number of non-deleted drawing-primitive objects only.
void clearDrawingObjects()
Clears all drawing-primitive objects (type not Camera, Ucs, WorldExtentsObj).
DdsSetDifference()
Definition bgi_dds.h:232
int faceColor
Definition bgi_dds.h:229
int drawMode
Definition bgi_dds.h:227
std::vector< std::string > operands
Definition bgi_dds.h:230
int edgeColor
Definition bgi_dds.h:228
DdsSetIntersection()
Definition bgi_dds.h:221
std::vector< std::string > operands
Definition bgi_dds.h:219
int drawMode
Definition bgi_dds.h:216
int faceColor
Definition bgi_dds.h:218
int edgeColor
Definition bgi_dds.h:217
std::vector< std::string > operands
Definition bgi_dds.h:208
int faceColor
Definition bgi_dds.h:207
DdsSetUnion()
Definition bgi_dds.h:210
int edgeColor
Definition bgi_dds.h:206
int drawMode
Definition bgi_dds.h:205
UCS stored in the DDS.
Definition bgi_dds.h:176
CoordSystem ucs
Full UCS data.
Definition bgi_dds.h:179
std::string name
Registry key in BgiState::ucsSystems.
Definition bgi_dds.h:178
DdsUcs()
Definition bgi_dds.h:181
World-extents AABB stored in the DDS.
Definition bgi_dds.h:186
WorldExtents extents
Definition bgi_dds.h:188
DdsWorldExtentsObj()
Definition bgi_dds.h:190
Definition bgi_camera.h:28
SolidDrawMode
Definition bgi_dds.h:408
DdsObjectType
Definition bgi_dds.h:88
ParamSurfaceFormula
Definition bgi_dds.h:409
CoordSpace
Indicates the coordinate space in which a drawing object's coordinates are expressed when it was reco...
Definition bgi_dds.h:51
@ World3D
World-space 3-D coordinates (from wxbgi_world_* functions).
@ BgiPixel
Pixel integers from classic BGI, stored as (x, y, 0) world coords.
@ UcsLocal
UCS-local coordinates; ucsName identifies the frame.
3-D camera definition (Z-up, right-handed world coordinate system).
Definition bgi_types.h:348
A named user coordinate system (UCS).
Definition bgi_types.h:415
glm::vec3 centre
Definition bgi_dds.h:276
float startAngle
Definition bgi_dds.h:278
float radius
Definition bgi_dds.h:277
DdsArc()
Definition bgi_dds.h:281
float endAngle
Definition bgi_dds.h:279
CoordSpace coordSpace
Definition bgi_dds.h:274
std::string ucsName
Definition bgi_dds.h:275
CoordSpace coordSpace
Definition bgi_dds.h:355
float depth
Definition bgi_dds.h:359
bool topFlag
Definition bgi_dds.h:360
glm::vec3 p1
Definition bgi_dds.h:357
std::string ucsName
Definition bgi_dds.h:356
glm::vec3 p2
Definition bgi_dds.h:358
DdsBar3D()
Definition bgi_dds.h:362
glm::vec3 p2
Definition bgi_dds.h:348
DdsBar()
Definition bgi_dds.h:350
std::string ucsName
Definition bgi_dds.h:346
CoordSpace coordSpace
Definition bgi_dds.h:345
glm::vec3 p1
Definition bgi_dds.h:347
float depth
Extent along world Y axis.
Definition bgi_dds.h:426
DdsBox()
Definition bgi_dds.h:428
float width
Extent along world X axis.
Definition bgi_dds.h:425
float height
Extent along world Z axis.
Definition bgi_dds.h:427
CoordSpace coordSpace
Definition bgi_dds.h:264
float radius
Definition bgi_dds.h:267
glm::vec3 centre
Definition bgi_dds.h:266
std::string ucsName
Definition bgi_dds.h:265
DdsCircle()
Definition bgi_dds.h:269
DdsCone()
Definition bgi_dds.h:447
float radius
Definition bgi_dds.h:444
float height
Definition bgi_dds.h:445
int cap
Non-zero = draw the base disc cap.
Definition bgi_dds.h:446
float height
Definition bgi_dds.h:438
float radius
Definition bgi_dds.h:437
DdsCylinder()
Definition bgi_dds.h:440
int caps
Non-zero = draw top and bottom disc caps.
Definition bgi_dds.h:439
std::string ucsName
Definition bgi_dds.h:287
float rx
Definition bgi_dds.h:289
float startAngle
Definition bgi_dds.h:291
glm::vec3 centre
Definition bgi_dds.h:288
float endAngle
Definition bgi_dds.h:292
float ry
Definition bgi_dds.h:290
DdsEllipse()
Definition bgi_dds.h:294
CoordSpace coordSpace
Definition bgi_dds.h:286
std::unordered_map< std::string, std::string > values
Definition bgi_dds.h:80
glm::vec3 extrudeDir
Direction vector; its magnitude is the extrusion length.
Definition bgi_dds.h:477
int capEnd
Non-zero = fill the top polygon.
Definition bgi_dds.h:479
DdsExtrusion()
Definition bgi_dds.h:480
int capStart
Non-zero = fill the base polygon.
Definition bgi_dds.h:478
std::vector< glm::vec3 > baseProfile
2-D profile vertices (Z may be non-zero for UCS support).
Definition bgi_dds.h:476
CoordSpace coordSpace
Definition bgi_dds.h:299
DdsFillEllipse()
Definition bgi_dds.h:305
float ry
Definition bgi_dds.h:303
float rx
Definition bgi_dds.h:302
std::string ucsName
Definition bgi_dds.h:300
glm::vec3 centre
Definition bgi_dds.h:301
std::string ucsName
Definition bgi_dds.h:377
DdsFillPoly()
Definition bgi_dds.h:380
CoordSpace coordSpace
Definition bgi_dds.h:376
std::vector< glm::vec3 > pts
Definition bgi_dds.h:378
float cellWidth
World-unit spacing between columns (X direction).
Definition bgi_dds.h:460
int cols
Definition bgi_dds.h:459
int rows
Definition bgi_dds.h:458
DdsHeightMap()
Definition bgi_dds.h:463
float cellHeight
World-unit spacing between rows (Y direction).
Definition bgi_dds.h:461
std::vector< float > heights
row-major flat array of rows*cols Z values.
Definition bgi_dds.h:462
std::vector< uint8_t > pixels
Raw BGI palette-indexed pixels (width × height bytes).
Definition bgi_dds.h:399
int height
Definition bgi_dds.h:398
CoordSpace coordSpace
Definition bgi_dds.h:395
int width
Definition bgi_dds.h:397
DdsImage()
Definition bgi_dds.h:401
glm::vec3 pos
Definition bgi_dds.h:396
glm::vec3 p2
Definition bgi_dds.h:257
CoordSpace coordSpace
Definition bgi_dds.h:254
glm::vec3 p1
Definition bgi_dds.h:256
DdsLine()
Definition bgi_dds.h:259
std::string ucsName
Definition bgi_dds.h:255
float param2
Secondary parameter (e.g. minor radius for torus).
Definition bgi_dds.h:469
int vSteps
Definition bgi_dds.h:471
DdsParamSurface()
Definition bgi_dds.h:472
int uSteps
Definition bgi_dds.h:470
ParamSurfaceFormula formula
Definition bgi_dds.h:467
float param1
Primary parameter (e.g. radius for sphere).
Definition bgi_dds.h:468
float endAngle
Definition bgi_dds.h:315
DdsPieSlice()
Definition bgi_dds.h:317
glm::vec3 centre
Definition bgi_dds.h:312
CoordSpace coordSpace
Definition bgi_dds.h:310
float startAngle
Definition bgi_dds.h:314
float radius
Definition bgi_dds.h:313
std::string ucsName
Definition bgi_dds.h:311
CoordSpace coordSpace
Definition bgi_dds.h:244
int color
Definition bgi_dds.h:247
DdsPoint()
Definition bgi_dds.h:249
glm::vec3 pos
Definition bgi_dds.h:246
std::string ucsName
Definition bgi_dds.h:245
std::vector< glm::vec3 > pts
Definition bgi_dds.h:369
DdsPolygon()
Definition bgi_dds.h:371
CoordSpace coordSpace
Definition bgi_dds.h:367
std::string ucsName
Definition bgi_dds.h:368
DdsRectangle()
Definition bgi_dds.h:340
CoordSpace coordSpace
Definition bgi_dds.h:335
glm::vec3 p2
Definition bgi_dds.h:338
std::string ucsName
Definition bgi_dds.h:336
glm::vec3 p1
Definition bgi_dds.h:337
DdsSector()
Definition bgi_dds.h:330
CoordSpace coordSpace
Definition bgi_dds.h:322
float endAngle
Definition bgi_dds.h:328
float rx
Definition bgi_dds.h:325
glm::vec3 centre
Definition bgi_dds.h:324
std::string ucsName
Definition bgi_dds.h:323
float ry
Definition bgi_dds.h:326
float startAngle
Definition bgi_dds.h:327
Base for all Phase 4/5/6 solid/surface/extrusion objects.
Definition bgi_dds.h:413
glm::vec3 origin
Definition bgi_dds.h:416
int slices
Tessellation: segments around circular axis.
Definition bgi_dds.h:420
int edgeColor
Color for wireframe edges (BGI palette index).
Definition bgi_dds.h:418
std::string ucsName
Definition bgi_dds.h:415
CoordSpace coordSpace
Definition bgi_dds.h:414
int stacks
Tessellation: segments along height/depth axis.
Definition bgi_dds.h:421
int faceColor
Color for filled faces (BGI palette index).
Definition bgi_dds.h:419
SolidDrawMode drawMode
Definition bgi_dds.h:417
DdsSphere()
Definition bgi_dds.h:433
float radius
Definition bgi_dds.h:432
Baked rendering state captured at draw-call time.
Definition bgi_dds.h:69
int color
Definition bgi_dds.h:70
linesettingstype lineStyle
Definition bgi_dds.h:71
int writeMode
Definition bgi_dds.h:74
fillsettingstype fillStyle
Definition bgi_dds.h:72
int bkColor
Definition bgi_dds.h:75
textsettingstype textStyle
Definition bgi_dds.h:73
DdsText()
Definition bgi_dds.h:390
std::string ucsName
Definition bgi_dds.h:386
CoordSpace coordSpace
Definition bgi_dds.h:385
glm::vec3 pos
Definition bgi_dds.h:387
std::string text
Definition bgi_dds.h:388
float minorRadius
Radius of the tube.
Definition bgi_dds.h:452
DdsTorus()
Definition bgi_dds.h:454
float majorRadius
Distance from torus centre to tube centre.
Definition bgi_dds.h:451
Axis-aligned bounding box (AABB) representing the programmer's declared drawing extents in world spac...
Definition bgi_types.h:475
Definition bgi_types.h:264
Definition bgi_types.h:270
Definition bgi_types.h:283