47  : mAltClamping( other.altitudeClamping() )
 
   48  , mMaterialSettings( other.materialSettings() ? other.materialSettings()->clone() : nullptr )
 
   49  , mShape( other.shape() )
 
   50  , mShapeProperties( other.shapeProperties() )
 
   51  , mTransform( other.transform() )
 
   52  , mBillboardSymbol( other.billboardSymbol() ? other.billboardSymbol()->clone() : nullptr )
 
   54  setDataDefinedProperties( other.dataDefinedProperties() );
 
   61  QDomDocument doc = elem.ownerDocument();
 
   63  QDomElement elemDataProperties = doc.createElement( QStringLiteral( 
"data" ) );
 
   65  elem.appendChild( elemDataProperties );
 
   67  elem.setAttribute( QStringLiteral( 
"material_type" ), mMaterialSettings->type() );
 
   68  QDomElement elemMaterial = doc.createElement( QStringLiteral( 
"material" ) );
 
   69  mMaterialSettings->writeXml( elemMaterial, context );
 
   70  elem.appendChild( elemMaterial );
 
   72  elem.setAttribute( QStringLiteral( 
"shape" ), 
shapeToString( mShape ) );
 
   74  QVariantMap shapePropertiesCopy( mShapeProperties );
 
   75  shapePropertiesCopy[QStringLiteral( 
"model" )] = QVariant( context.
pathResolver().
writePath( shapePropertiesCopy[QStringLiteral( 
"model" )].toString() ) );
 
   77  QDomElement elemShapeProperties = doc.createElement( QStringLiteral( 
"shape-properties" ) );
 
   79  elem.appendChild( elemShapeProperties );
 
   81  QDomElement elemTransform = doc.createElement( QStringLiteral( 
"transform" ) );
 
   83  elem.appendChild( elemTransform );
 
   89    elem.appendChild( symbolElem );
 
   95  const QDomElement elemDataProperties = elem.firstChildElement( QStringLiteral( 
"data" ) );
 
   98  const QDomElement elemMaterial = elem.firstChildElement( QStringLiteral( 
"material" ) );
 
   99  const QString materialType = elem.attribute( QStringLiteral( 
"material_type" ), QStringLiteral( 
"phong" ) );
 
  101  if ( !mMaterialSettings )
 
  103  mMaterialSettings->readXml( elemMaterial, context );
 
  105  mShape = 
shapeFromString( elem.attribute( QStringLiteral( 
"shape" ) ) );
 
  107  const QDomElement elemShapeProperties = elem.firstChildElement( QStringLiteral( 
"shape-properties" ) );
 
  109  mShapeProperties[QStringLiteral( 
"model" )] = QVariant( context.
pathResolver().
readPath( mShapeProperties[QStringLiteral( 
"model" )].toString() ) );
 
  111  const QDomElement elemTransform = elem.firstChildElement( QStringLiteral( 
"transform" ) );
 
  114  const QDomElement symbolElem = elem.firstChildElement( QStringLiteral( 
"symbol" ) );
 
  116  setBillboardSymbol( QgsSymbolLayerUtils::loadSymbol< QgsMarkerSymbol >( symbolElem, context ) );
 
  121  return QList< Qgis::GeometryType >() << Qgis::GeometryType::Point;
 
  129  mTransform.data()[13] = 
static_cast< float >( props->
zOffset() );
 
  135  if ( 
shape ==  QStringLiteral( 
"sphere" ) )
 
  137  else if ( 
shape == QLatin1String( 
"cone" ) )
 
  139  else if ( 
shape == QLatin1String( 
"cube" ) )
 
  141  else if ( 
shape == QLatin1String( 
"torus" ) )
 
  143  else if ( 
shape == QLatin1String( 
"plane" ) )
 
  145  else if ( 
shape == QLatin1String( 
"extruded-text" ) )
 
  147  else if ( 
shape == QLatin1String( 
"model" ) )
 
  149  else if ( 
shape == QLatin1String( 
"billboard" ) )
 
  159    case Cylinder: 
return QStringLiteral( 
"cylinder" );
 
  160    case Sphere: 
return QStringLiteral( 
"sphere" );
 
  161    case Cone: 
return QStringLiteral( 
"cone" );
 
  162    case Cube: 
return QStringLiteral( 
"cube" );
 
  163    case Torus: 
return QStringLiteral( 
"torus" );
 
  164    case Plane: 
return QStringLiteral( 
"plane" );
 
  165    case ExtrudedText: 
return QStringLiteral( 
"extruded-text" );
 
  166    case Model: 
return QStringLiteral( 
"model" );
 
  167    case Billboard: 
return QStringLiteral( 
"billboard" );
 
  168    default: Q_ASSERT( 
false ); 
return QString();
 
  174  QMatrix4x4 billboardTransformMatrix;
 
  175  billboardTransformMatrix.translate( QVector3D( 0, mTransform.data()[13], 0 ) );
 
  177  return billboardTransformMatrix;
 
  182  return mMaterialSettings.get();
 
  197    Qt3DRender::QSceneLoader *sceneLoader = entity->findChild<Qt3DRender::QSceneLoader *>();
 
  198    if ( sceneLoader != 
nullptr )
 
  200      const QVector<Qgs3DExportObject *> objects = exporter->processSceneLoaderGeometries( sceneLoader, objectNamePrefix );
 
  206      exporter->mObjects << objects;
 
  210      const QList<Qt3DRender::QMesh *> meshes = entity->findChildren<Qt3DRender::QMesh *>();
 
  211      for ( Qt3DRender::QMesh *mesh : meshes )
 
  213        Qgs3DExportObject *
object = exporter->processGeometryRenderer( mesh, objectNamePrefix );
 
  214        if ( 
object == 
nullptr ) 
continue;
 
  217        exporter->mObjects << object;
 
  225    if ( obj != 
nullptr )
 
  227      exporter->mObjects << obj;
 
  233    const QVector<Qgs3DExportObject *> objects = exporter->processInstancedPointGeometry( entity, objectNamePrefix );
 
  237      exporter->mObjects << obj;
 
  246  return mBillboardSymbol.get();
 
  251  mBillboardSymbol.reset( symbol );
 
Manages the data of each object of the scene (positions, normals, texture coordinates ....
 
void setSmoothEdges(bool smoothEdges)
Sets whether triangles edges will look smooth.
 
Entity that handles the exporting of 3D scene.
 
bool smoothEdges() const
Returns whether the triangles will look smooth.
 
static Qgis::AltitudeClamping altClampingFromString(const QString &str)
Converts a string to a value from AltitudeClamping enum.
 
static QString matrix4x4toString(const QMatrix4x4 &m)
Converts a 4x4 transform matrix to a string.
 
static QString altClampingToString(Qgis::AltitudeClamping altClamp)
Converts a value from AltitudeClamping enum to a string.
 
static QMatrix4x4 stringToMatrix4x4(const QString &str)
Convert a string to a 4x4 transform matrix.
 
static QgsMaterialRegistry * materialRegistry()
Returns the material registry, used for managing 3D materials.
 
double zOffset() const
Returns the z offset, which is a fixed offset amount which should be added to z values from the layer...
 
A marker symbol type, for rendering Point and MultiPoint geometries.
 
QString writePath(const QString &filename) const
Prepare a filename to save it to the project file.
 
QString readPath(const QString &filename) const
Turn filename read from the project file to an absolute path.
 
Shape
3D shape types supported by the symbol
 
@ ExtrudedText
Supported in Qt 5.9+.
 
~QgsPoint3DSymbol() override
 
void setDefaultPropertiesFromLayer(const QgsVectorLayer *layer) override
 
void setMaterialSettings(QgsAbstractMaterialSettings *materialSettings SIP_TRANSFER)
Sets the material settings used for shading of the symbol.
 
QMatrix4x4 billboardTransform() const
Returns transform for billboards.
 
QgsAbstractMaterialSettings * materialSettings() const
Returns material settings used for shading of the symbol.
 
void writeXml(QDomElement &elem, const QgsReadWriteContext &context) const override
 
QgsPoint3DSymbol()
Constructor for QgsPoint3DSymbol with default QgsMarkerSymbol as the billboardSymbol.
 
QgsMarkerSymbol * billboardSymbol() const
Returns a symbol for billboard.
 
bool exportGeometries(Qgs3DSceneExporter *exporter, Qt3DCore::QEntity *entity, const QString &objectNamePrefix) const override SIP_SKIP
Exports the geometries contained within the hierarchy of entity.
 
QgsAbstract3DSymbol * clone() const override SIP_FACTORY
 
QList< Qgis::GeometryType > compatibleGeometryTypes() const override
 
Shape shape() const
Returns 3D shape for points.
 
void setBillboardSymbol(QgsMarkerSymbol *symbol)
Set symbol for billboard and the ownership is transferred.
 
static QString shapeToString(Shape shape)
Returns string from a shape enum value.
 
static QgsAbstract3DSymbol * create() SIP_FACTORY
Creates a new QgsPoint3DSymbol.
 
static Shape shapeFromString(const QString &shape)
Returns shape enum value from a string.
 
void readXml(const QDomElement &elem, const QgsReadWriteContext &context) override
 
The class is used as a container of context for various read/write operations on other objects.
 
const QgsPathResolver & pathResolver() const
Returns path resolver for conversion between relative and absolute paths.
 
static QDomElement saveSymbol(const QString &symbolName, const QgsSymbol *symbol, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a symbol definition to XML.
 
static QgsSymbol * defaultSymbol(Qgis::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
 
Vector layer specific subclass of QgsMapLayerElevationProperties.
 
double extrusionHeight() const
Returns the feature extrusion height.
 
Qgis::AltitudeClamping clamping() const
Returns the altitude clamping method, which dictates how feature heights are interpreted with respect...
 
bool extrusionEnabled() const
Returns true if extrusion is enabled.
 
Represents a vector layer which manages a vector based data sets.
 
static QDomElement writeVariant(const QVariant &value, QDomDocument &doc)
Write a QVariant to a QDomElement.
 
static QVariant readVariant(const QDomElement &element)
Read a QVariant from a QDomElement.