From ad0235a7513837f33628dc8a6bf8b25169b383d8 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Wed, 8 Jun 2022 12:36:36 +0200 Subject: [PATCH] ENH: support surface writer output transform (#2505) - this allows the "relocation" of sampled surfaces. For example, to reposition into a different coordinate system for importing into CAD. - incorporate output scaling for all surface writer types. This was previously done on an adhoc basis for different writers, but with now included in the base-level so that all writers can automatically use scale + transform. Example: formatOptions { vtk { scale 1000; // m -> mm transform { origin (0.05 0 0); rotation axisAngle; axis (0 0 1); angle -45; } } } --- .../writers/abaqus/abaqusSurfaceWriter.C | 9 +- .../writers/abaqus/abaqusSurfaceWriter.H | 10 +- .../writers/abaqus/abaqusSurfaceWriterImpl.C | 3 +- .../boundary/boundaryDataSurfaceWriter.C | 6 +- .../boundary/boundaryDataSurfaceWriter.H | 2 + src/surfMesh/writers/common/surfaceWriter.C | 137 ++++++++++++------ src/surfMesh/writers/common/surfaceWriter.H | 78 ++++++---- src/surfMesh/writers/common/surfaceWriterI.H | 22 +++ .../writers/ensight/ensightSurfaceWriter.H | 4 +- .../ensight/ensightSurfaceWriterCollated.C | 3 +- .../ensight/ensightSurfaceWriterUncollated.C | 6 +- src/surfMesh/writers/foam/foamSurfaceWriter.C | 3 +- src/surfMesh/writers/foam/foamSurfaceWriter.H | 4 +- .../writers/nastran/nastranSurfaceWriter.C | 7 +- .../writers/nastran/nastranSurfaceWriter.H | 14 +- .../nastran/nastranSurfaceWriterImpl.C | 3 +- .../writers/proxy/proxySurfaceWriter.C | 3 +- .../writers/proxy/proxySurfaceWriter.H | 6 +- src/surfMesh/writers/raw/rawSurfaceWriter.C | 13 +- src/surfMesh/writers/raw/rawSurfaceWriter.H | 6 +- .../writers/raw/rawSurfaceWriterImpl.C | 9 +- .../writers/starcd/starcdSurfaceWriter.C | 6 +- .../writers/starcd/starcdSurfaceWriter.H | 2 + src/surfMesh/writers/vtk/vtkSurfaceWriter.C | 5 +- src/surfMesh/writers/vtk/vtkSurfaceWriter.H | 4 +- src/surfMesh/writers/x3d/x3dSurfaceWriter.C | 6 +- src/surfMesh/writers/x3d/x3dSurfaceWriter.H | 4 +- .../angledDuct/implicit/system/sampling | 38 ++++- 28 files changed, 286 insertions(+), 127 deletions(-) diff --git a/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.C b/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.C index 9d3fd373e0..f5166c6d70 100644 --- a/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.C +++ b/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2020 OpenCFD Ltd. + Copyright (C) 2020-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -150,7 +150,7 @@ void Foam::surfaceWriters::abaqusWriter::writeGeometry << "** Points" << nl << "**" << nl; - fileFormats::ABAQUSCore::writePoints(os, points, geometryScale_); + fileFormats::ABAQUSCore::writePoints(os, points); // Write faces, with on-the-fly decomposition (triangulation) @@ -237,7 +237,6 @@ void Foam::surfaceWriters::abaqusWriter::writeGeometry Foam::surfaceWriters::abaqusWriter::abaqusWriter() : surfaceWriter(), - geometryScale_(1), noGeometry_(false), outputLayout_(outputLayoutType::BY_FIELD) {} @@ -249,7 +248,6 @@ Foam::surfaceWriters::abaqusWriter::abaqusWriter ) : surfaceWriter(options), - geometryScale_(options.getOrDefault("scale", 1)), noGeometry_(options.getOrDefault("noGeometry", false)), outputLayout_(outputLayoutType::BY_FIELD) {} @@ -328,7 +326,8 @@ Foam::fileName Foam::surfaceWriters::abaqusWriter::write() } - const meshedSurf& surf = surface(); + // const meshedSurf& surf = surface(); + const meshedSurfRef& surf = adjustSurface(); if (Pstream::master() || !parallel_) { diff --git a/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.H b/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.H index 24bdf22eda..cb406661ba 100644 --- a/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.H +++ b/src/surfMesh/writers/abaqus/abaqusSurfaceWriter.H @@ -31,11 +31,12 @@ Description The formatOptions for abaqus: \table - Property | Description | Required | Default - scale | output geometry scaling | no | 1 + Property | Description | Reqd | Default + scale | Output geometry scaling | no | 1 + transform | Output coordinate transform | no | fieldLevel | Subtract field level before scaling | no | empty dict fieldScale | Output field scaling | no | empty dict - noGeometry | Suppress geometry output (beta feature) | no | false + noGeometry | Suppress geometry output (beta feature) | no | false \endtable For example, @@ -112,9 +113,6 @@ class abaqusWriter { // Private Data - //- Output geometry scaling - const scalar geometryScale_; - //- BETA feature bool noGeometry_; diff --git a/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C b/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C index 1ca932b147..df06f13694 100644 --- a/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C +++ b/src/surfMesh/writers/abaqus/abaqusSurfaceWriterImpl.C @@ -126,7 +126,8 @@ Foam::fileName Foam::surfaceWriters::abaqusWriter::writeTemplate } - const meshedSurf& surf = surface(); + // const meshedSurf& surf = surface(); + const meshedSurfRef& surf = adjustSurface(); if (Pstream::master() || !parallel_) { diff --git a/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C b/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C index fde30e2ebc..982d34e22b 100644 --- a/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C +++ b/src/surfMesh/writers/boundary/boundaryDataSurfaceWriter.C @@ -169,7 +169,8 @@ Foam::fileName Foam::surfaceWriters::boundaryDataWriter::write() // Dummy Time to use as objectRegistry autoPtr