45   : mAltClamping( other.altitudeClamping() )
 
   46   , mMaterial( other.material() ? other.material()->clone() : nullptr )
 
   47   , mShape( other.shape() )
 
   48   , mShapeProperties( other.shapeProperties() )
 
   49   , mTransform( other.transform() )
 
   50   , mBillboardSymbol( other.billboardSymbol() ? other.billboardSymbol()->clone() : nullptr )
 
   52   setDataDefinedProperties( other.dataDefinedProperties() );
 
   59   QDomDocument doc = elem.ownerDocument();
 
   61   QDomElement elemDataProperties = doc.createElement( QStringLiteral( 
"data" ) );
 
   63   elem.appendChild( elemDataProperties );
 
   65   elem.setAttribute( QStringLiteral( 
"material_type" ), mMaterial->type() );
 
   66   QDomElement elemMaterial = doc.createElement( QStringLiteral( 
"material" ) );
 
   67   mMaterial->writeXml( elemMaterial, context );
 
   68   elem.appendChild( elemMaterial );
 
   70   elem.setAttribute( QStringLiteral( 
"shape" ), 
shapeToString( mShape ) );
 
   72   QVariantMap shapePropertiesCopy( mShapeProperties );
 
   73   shapePropertiesCopy[QStringLiteral( 
"model" )] = QVariant( context.
pathResolver().
writePath( shapePropertiesCopy[QStringLiteral( 
"model" )].toString() ) );
 
   75   QDomElement elemShapeProperties = doc.createElement( QStringLiteral( 
"shape-properties" ) );
 
   77   elem.appendChild( elemShapeProperties );
 
   79   QDomElement elemTransform = doc.createElement( QStringLiteral( 
"transform" ) );
 
   81   elem.appendChild( elemTransform );
 
   87     elem.appendChild( symbolElem );
 
   93   QDomElement elemDataProperties = elem.firstChildElement( QStringLiteral( 
"data" ) );
 
   96   QDomElement elemMaterial = elem.firstChildElement( QStringLiteral( 
"material" ) );
 
   97   const QString materialType = elem.attribute( QStringLiteral( 
"material_type" ), QStringLiteral( 
"phong" ) );
 
  101   mMaterial->readXml( elemMaterial, context );
 
  103   mShape = 
shapeFromString( elem.attribute( QStringLiteral( 
"shape" ) ) );
 
  105   QDomElement elemShapeProperties = elem.firstChildElement( QStringLiteral( 
"shape-properties" ) );
 
  107   mShapeProperties[QStringLiteral( 
"model" )] = QVariant( context.
pathResolver().
readPath( mShapeProperties[QStringLiteral( 
"model" )].toString() ) );
 
  109   QDomElement elemTransform = elem.firstChildElement( QStringLiteral( 
"transform" ) );
 
  112   QDomElement symbolElem = elem.firstChildElement( QStringLiteral( 
"symbol" ) );
 
  114   setBillboardSymbol( QgsSymbolLayerUtils::loadSymbol< QgsMarkerSymbol >( symbolElem, context ) );
 
  124   if ( 
shape ==  QStringLiteral( 
"sphere" ) )
 
  126   else if ( 
shape == QLatin1String( 
"cone" ) )
 
  128   else if ( 
shape == QLatin1String( 
"cube" ) )
 
  130   else if ( 
shape == QLatin1String( 
"torus" ) )
 
  132   else if ( 
shape == QLatin1String( 
"plane" ) )
 
  134   else if ( 
shape == QLatin1String( 
"extruded-text" ) )
 
  136   else if ( 
shape == QLatin1String( 
"model" ) )
 
  138   else if ( 
shape == QLatin1String( 
"billboard" ) )
 
  148     case Cylinder: 
return QStringLiteral( 
"cylinder" );
 
  149     case Sphere: 
return QStringLiteral( 
"sphere" );
 
  150     case Cone: 
return QStringLiteral( 
"cone" );
 
  151     case Cube: 
return QStringLiteral( 
"cube" );
 
  152     case Torus: 
return QStringLiteral( 
"torus" );
 
  153     case Plane: 
return QStringLiteral( 
"plane" );
 
  154     case ExtrudedText: 
return QStringLiteral( 
"extruded-text" );
 
  155     case Model: 
return QStringLiteral( 
"model" );
 
  156     case Billboard: 
return QStringLiteral( 
"billboard" );
 
  157     default: Q_ASSERT( 
false ); 
return QString();
 
  163   QMatrix4x4 billboardTransformMatrix;
 
  164   billboardTransformMatrix.translate( QVector3D( 0, mTransform.data()[13], 0 ) );
 
  166   return billboardTransformMatrix;
 
  171   return mMaterial.get();
 
  186     Qt3DRender::QSceneLoader *sceneLoader = entity->findChild<Qt3DRender::QSceneLoader *>();
 
  187     if ( sceneLoader != 
nullptr )
 
  189       QVector<Qgs3DExportObject *> objects = exporter->processSceneLoaderGeometries( sceneLoader, objectNamePrefix );
 
  195       exporter->mObjects << objects;
 
  199       QList<Qt3DRender::QMesh *> meshes = entity->findChildren<Qt3DRender::QMesh *>();
 
  200       for ( Qt3DRender::QMesh *mesh : meshes )
 
  202         Qgs3DExportObject *
object = exporter->processGeometryRenderer( mesh, objectNamePrefix );
 
  203         if ( 
object == 
nullptr ) 
continue;
 
  205         object->setupMaterial( 
material() );
 
  206         exporter->mObjects << object;
 
  214     if ( obj != 
nullptr ) exporter->mObjects << obj;
 
  215     if ( obj != 
nullptr ) 
return true;
 
  219     QVector<Qgs3DExportObject *> objects = exporter->processInstancedPointGeometry( entity, objectNamePrefix );
 
  223       exporter->mObjects << obj;
 
  232   return mBillboardSymbol.get();
 
  237   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 QString altClampingToString(Qgs3DTypes::AltitudeClamping altClamp)
Converts a value from AltitudeClamping enum to a string.
static QString matrix4x4toString(const QMatrix4x4 &m)
Converts a 4x4 transform matrix to a string.
static Qgs3DTypes::AltitudeClamping altClampingFromString(const QString &str)
Converts a string to a value from AltitudeClamping enum.
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.
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
QgsAbstractMaterialSettings * material() const
Returns material used for shading of the symbol.
QMatrix4x4 billboardTransform() const
Returns transform for billboards.
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.
void setMaterial(QgsAbstractMaterialSettings *material SIP_TRANSFER)
Sets the material settings used for shading of the symbol.
QgsAbstract3DSymbol * clone() const override SIP_FACTORY
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
QList< QgsWkbTypes::GeometryType > compatibleGeometryTypes() const 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(QgsWkbTypes::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
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.