You can’t load glTF data directly because it’s not georeferenced.
You can paint it as a 3D icon in your own IFeaturePainter
IFeaturePainter
IFeaturePainter
though, using an Icon3D draw command.
The map displays the mesh at the location you specify for a point.
Program: Visualizing glTF Data
class Icon3DPainter final : public IFeaturePainter {
public:
explicit Icon3DPainter(std::string& source) : _source{source} {};
void configureMetadata(luciad::FeaturePainterMetadata& metadata) const override {
}
void paint(const luciad::Feature& feature, const luciad::FeaturePainterContext& /*context*/, luciad::FeatureCanvas& canvas) const override {
auto geometry = feature.findGeometry();
if (!geometry) {
return;
}
auto point = std::dynamic_pointer_cast<Point>(geometry);
if (!point) {
return;
}
canvas.drawIcon3D()
.position(point)
.source(_source)
.orientation(0.0, 0.0, 30.0)
.scale(5.0, 5.0, 5.0)
.transparency(true)
.submit();
}
private:
std::string _source;
};
private class Icon3DPainter : IFeaturePainter
{
private readonly string _source;
public Icon3DPainter(string source)
{
_source = source;
}
public void ConfigureMetadata(FeaturePainterMetadata metadata)
{
}
public void Paint(Feature feature, FeaturePainterContext context, FeatureCanvas canvas)
{
var point = feature.FindGeometry() as Point;
if (point == null)
{
return;
}
canvas.DrawIcon3D()
.Position(point)
.Source(_source)
.Orientation(0.0, 0.0, 30.0)
.Scale(5.0, 5.0, 5.0)
.Transparency(true)
.Submit();
}
}
class Icon3DPainter(private val source: String) : IFeaturePainter {
override fun configureMetadata(metadata: FeaturePainterMetadata) {
}
override fun paint(
feature: Feature,
context: FeaturePainterContext,
canvas: FeatureCanvas
) {
(feature.findGeometry() as? Point)?.let {
canvas.drawIcon3D()
.position(it)
.source(source)
.orientation(Azimuth(0.0), Angle(0.0), Angle(30.0))
.scale(5.0, 5.0, 5.0)
.transparency(true)
.submit()
}
}
}
For more information about LuciadCPillar’s glTF support, see Which glTF version is supported and what are the limitations?