/** * Sets the current entity to the given entity and calls \ref exportEntity(). * Note that entity is a temporary clone. */ void RExporter::exportEntity(REntity& entity, bool preview, bool allBlocks, bool forceSelected) { RDocument* doc = entity.getDocument(); if (doc==NULL) { doc = document; } // entity not on current block and allBlocks==false, break: if (!allBlocks && doc->getCurrentBlockId()!=entity.getBlockId()) { //unexportEntity(entity.getId()); return; } entityStack.push(&entity); // find layer of the current entity QSharedPointer<RLayer> layer; if (layerSource!=NULL) { RLayer::Id layerId = entity.getLayerId(); layer = layerSource->queryLayerDirect(layerId); Q_ASSERT(!layer.isNull()); } else { layer = doc->queryLayerDirect(entity.getLayerId()); if (layer.isNull()) { qDebug() << "Document: " << *doc; qDebug() << "Layer ID: " << entity.getLayerId(); Q_ASSERT_X(false, "RExporter::exportEntity", "layer is NULL"); } } if (!layer.isNull()) { currentLayer = layer.data(); } // find block reference of the current entity, ignore this entity: bool blockRefOrViewportSet = false; // check if this entity is a block reference: RBlockReferenceEntity* blockRef = dynamic_cast<RBlockReferenceEntity*>(&entity); if (blockRef!=NULL) { blockRefStack.push(blockRef); blockRefOrViewportSet = true; } // check if this entity is a viewport: RViewportEntity* viewPort = dynamic_cast<RViewportEntity*>(&entity); if (viewPort!=NULL) { blockRefStack.push(viewPort); blockRefOrViewportSet = true; } startEntity(/* topLevelEntity = */ blockRefOrViewportSet || blockRefStack.isEmpty()); exportCurrentEntity(preview, forceSelected); endEntity(); if (blockRefOrViewportSet) { blockRefStack.pop(); //blockRefBS.clear(); } currentLayer = NULL; entityStack.pop(); }
QSharedPointer<RLayer> RClipboardOperation::copyEntityLayer( REntity& entity, RDocument& src, RDocument& dest, bool overwriteLayers, RTransaction& transaction) const { return copyLayer(entity.getLayerId(), src, dest, overwriteLayers, transaction); }
QSharedPointer<RLayer> RClipboardOperation::copyEntityLayer( REntity& entity, RDocument& src, RDocument& dest, bool overwriteLayers, RTransaction& transaction) const { // copy parent layers: QString layerName = entity.getLayerName(); if (layerName.contains(" ... ")) { QStringList l = layerName.split(" ... "); l.removeLast(); while (!l.isEmpty()) { QString parentLayerName = l.join(" ... "); QSharedPointer<RLayer> parentLayer = src.queryLayer(parentLayerName); if (parentLayer.isNull()) { break; } copyLayer(parentLayer->getId(), src, dest, overwriteLayers, transaction); l.removeLast(); } } return copyLayer(entity.getLayerId(), src, dest, overwriteLayers, transaction); }