mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1471 Completions visualization
This commit is contained in:
@@ -102,56 +102,14 @@ void RivFishbonesSubsPartMgr::buildParts(caf::DisplayCoordTransform* displayCoor
|
||||
displayCoords.push_back(displayCoordTransform->transformToDisplayCoord(domainCoord));
|
||||
}
|
||||
|
||||
cylinderWithCenterLineParts(&m_parts, displayCoords, wellPath->wellPathColor(), wellPath->combinedScaleFactor() * characteristicCellSize * 0.5);
|
||||
|
||||
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo(m_rimFishbonesSubs);
|
||||
|
||||
for (auto p : m_parts)
|
||||
{
|
||||
p->setSourceInfo(objectSourceInfo.p());
|
||||
}
|
||||
geoGenerator.cylinderWithCenterLineParts(&m_parts, displayCoords, wellPath->wellPathColor(), wellPath->combinedScaleFactor() * characteristicCellSize * 0.5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RivFishbonesSubsPartMgr::cylinderWithCenterLineParts(cvf::Collection<cvf::Part>* destinationParts, const std::vector<cvf::Vec3d>& centerCoords, const cvf::Color3f& color, double radius)
|
||||
{
|
||||
cvf::ref<RivPipeGeometryGenerator> geoGenerator = new RivPipeGeometryGenerator;
|
||||
geoGenerator->setRadius(radius);
|
||||
geoGenerator->setCrossSectionVertexCount(12);
|
||||
|
||||
cvf::ref<cvf::Vec3dArray> cvfCoords = new cvf::Vec3dArray(centerCoords);
|
||||
geoGenerator->setPipeCenterCoords(cvfCoords.p());
|
||||
|
||||
cvf::ref<cvf::DrawableGeo> surfaceGeo = geoGenerator->createPipeSurface();
|
||||
if (surfaceGeo.notNull())
|
||||
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo(m_rimFishbonesSubs);
|
||||
for (auto part : m_parts)
|
||||
{
|
||||
cvf::Part* part = new cvf::Part;
|
||||
part->setDrawable(surfaceGeo.p());
|
||||
|
||||
caf::SurfaceEffectGenerator surfaceGen(cvf::Color4f(color), caf::PO_1);
|
||||
cvf::ref<cvf::Effect> eff = surfaceGen.generateCachedEffect();
|
||||
|
||||
part->setEffect(eff.p());
|
||||
|
||||
destinationParts->push_back(part);
|
||||
}
|
||||
|
||||
cvf::ref<cvf::DrawableGeo> centerLineGeo = geoGenerator->createCenterLine();
|
||||
if (centerLineGeo.notNull())
|
||||
{
|
||||
cvf::Part* part = new cvf::Part;
|
||||
part->setDrawable(centerLineGeo.p());
|
||||
|
||||
caf::SurfaceEffectGenerator surfaceGen(cvf::Color4f(color), caf::PO_1);
|
||||
cvf::ref<cvf::Effect> eff = surfaceGen.generateCachedEffect();
|
||||
|
||||
part->setEffect(eff.p());
|
||||
|
||||
destinationParts->push_back(part);
|
||||
part->setSourceInfo(objectSourceInfo.p());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,6 @@ public:
|
||||
private:
|
||||
void buildParts(caf::DisplayCoordTransform* displayCoordTransform, double characteristicCellSize);
|
||||
|
||||
static void cylinderWithCenterLineParts(cvf::Collection<cvf::Part>* destinationParts, const std::vector<cvf::Vec3d>& centerCoords, const cvf::Color3f& color, double radius);
|
||||
|
||||
private:
|
||||
caf::PdmPointer<RimFishbonesMultipleSubs> m_rimFishbonesSubs;
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
|
||||
#include "RivPipeGeometryGenerator.h"
|
||||
|
||||
#include "RivObjectSourceInfo.h"
|
||||
|
||||
#include "cafEffectGenerator.h"
|
||||
#include "cvfDrawableGeo.h"
|
||||
#include "cvfPlane.h"
|
||||
@@ -603,3 +605,43 @@ void RivPipeGeometryGenerator::setFirstSegmentIndex(size_t segmentIndex)
|
||||
m_firstSegmentIndex = segmentIndex;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RivPipeGeometryGenerator::cylinderWithCenterLineParts(cvf::Collection<cvf::Part>* destinationParts, const std::vector<cvf::Vec3d>& centerCoords, const cvf::Color3f& color, double radius)
|
||||
{
|
||||
setRadius(radius);
|
||||
setCrossSectionVertexCount(12);
|
||||
|
||||
cvf::ref<cvf::Vec3dArray> cvfCoords = new cvf::Vec3dArray(centerCoords);
|
||||
setPipeCenterCoords(cvfCoords.p());
|
||||
|
||||
cvf::ref<cvf::DrawableGeo> surfaceGeo = createPipeSurface();
|
||||
if (surfaceGeo.notNull())
|
||||
{
|
||||
cvf::Part* part = new cvf::Part;
|
||||
part->setDrawable(surfaceGeo.p());
|
||||
|
||||
caf::SurfaceEffectGenerator surfaceGen(cvf::Color4f(color), caf::PO_1);
|
||||
cvf::ref<cvf::Effect> eff = surfaceGen.generateCachedEffect();
|
||||
|
||||
part->setEffect(eff.p());
|
||||
|
||||
destinationParts->push_back(part);
|
||||
}
|
||||
|
||||
cvf::ref<cvf::DrawableGeo> centerLineGeo = createCenterLine();
|
||||
if (centerLineGeo.notNull())
|
||||
{
|
||||
cvf::Part* part = new cvf::Part;
|
||||
part->setDrawable(centerLineGeo.p());
|
||||
|
||||
caf::SurfaceEffectGenerator surfaceGen(cvf::Color4f(color), caf::PO_1);
|
||||
cvf::ref<cvf::Effect> eff = surfaceGen.generateCachedEffect();
|
||||
|
||||
part->setEffect(eff.p());
|
||||
|
||||
destinationParts->push_back(part);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,12 +23,15 @@
|
||||
#include "cvfBase.h"
|
||||
#include "cvfObject.h"
|
||||
#include "cvfArray.h"
|
||||
#include "cvfPart.h"
|
||||
|
||||
namespace cvf {
|
||||
class DrawableGeo;
|
||||
class ScalarMapper;
|
||||
}
|
||||
|
||||
class RivObjectSourceInfo;
|
||||
|
||||
class RivPipeGeometryGenerator : public cvf::Object
|
||||
{
|
||||
public:
|
||||
@@ -59,6 +62,7 @@ public:
|
||||
void setFirstSegmentIndex(size_t segmentIndex);
|
||||
size_t segmentIndexFromTriangleIndex(size_t triangleIndex) const;
|
||||
|
||||
void cylinderWithCenterLineParts(cvf::Collection<cvf::Part>* destinationParts, const std::vector<cvf::Vec3d>& centerCoords, const cvf::Color3f& color, double radius);
|
||||
private:
|
||||
void clearComputedData();
|
||||
void updateFilteredPipeCenterCoords();
|
||||
|
||||
@@ -28,13 +28,17 @@
|
||||
#include "RimFishbonesMultipleSubs.h"
|
||||
#include "RimWellPath.h"
|
||||
#include "RimWellPathCollection.h"
|
||||
#include "RimWellPathCompletion.h"
|
||||
#include "RimWellPathCompletionCollection.h"
|
||||
|
||||
#include "RivFishbonesSubsPartMgr.h"
|
||||
#include "RivPartPriority.h"
|
||||
#include "RivPipeGeometryGenerator.h"
|
||||
#include "RivWellPathSourceInfo.h"
|
||||
#include "RivObjectSourceInfo.h"
|
||||
|
||||
#include "cafEffectGenerator.h"
|
||||
#include "cafDisplayCoordTransform.h"
|
||||
|
||||
#include "cvfDrawableGeo.h"
|
||||
#include "cvfDrawableText.h"
|
||||
@@ -109,6 +113,37 @@ void RivWellPathPartMgr::appendFishbonesPartsToModel(cvf::ModelBasicList* model,
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RivWellPathPartMgr::appendCompletionsToModel(cvf::ModelBasicList* model, caf::DisplayCoordTransform* displayCoordTransform, double characteristicCellSize)
|
||||
{
|
||||
if (!m_rimWellPath || !m_rimWellPath->m_completionCollection->isChecked()) return;
|
||||
|
||||
RivPipeGeometryGenerator geoGenerator;
|
||||
for (RimWellPathCompletion* completion : m_rimWellPath->m_completionCollection()->m_completions())
|
||||
{
|
||||
if (!completion->isChecked()) continue;
|
||||
|
||||
std::vector<cvf::Vec3d> displayCoords;
|
||||
for (auto lateralDomainCoords : completion->coordinates())
|
||||
{
|
||||
displayCoords.push_back(displayCoordTransform->transformToDisplayCoord(lateralDomainCoords));
|
||||
}
|
||||
|
||||
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo(completion);
|
||||
|
||||
cvf::Collection<cvf::Part> parts;
|
||||
geoGenerator.cylinderWithCenterLineParts(&parts, displayCoords, m_rimWellPath->wellPathColor(), m_rimWellPath->combinedScaleFactor() * characteristicCellSize * 0.5);
|
||||
for (auto part : parts)
|
||||
{
|
||||
part->setSourceInfo(objectSourceInfo.p());
|
||||
model->addPart(part.p());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// The pipe geometry needs to be rebuilt on scale change to keep the pipes round
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -296,6 +331,7 @@ void RivWellPathPartMgr::appendStaticGeometryPartsToModel(cvf::ModelBasicList* m
|
||||
}
|
||||
|
||||
appendFishbonesPartsToModel(model, displayCoordTransform, characteristicCellSize);
|
||||
appendCompletionsToModel(model, displayCoordTransform, characteristicCellSize);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -61,6 +61,7 @@ public:
|
||||
|
||||
private:
|
||||
void appendFishbonesPartsToModel(cvf::ModelBasicList* model, caf::DisplayCoordTransform* displayCoordTransform, double characteristicCellSize);
|
||||
void appendCompletionsToModel(cvf::ModelBasicList* model, caf::DisplayCoordTransform* displayCoordTransform, double characteristicCellSize);
|
||||
void buildWellPathParts(cvf::Vec3d displayModelOffset, double characteristicCellSize, cvf::BoundingBox wellPathClipBoundingBox);
|
||||
void clearAllBranchData();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user