src/Tools/padder/spadderpy/plugin/Makefile \
src/Tools/padder/spadderpy/plugin/envPlugins.sh \
src/Tools/padder/resources/Makefile \
- src/Tools/padder/resources/appligen/Makefile \
- src/Tools/padder/resources/appligen/appligen.sh \
- src/Tools/padder/resources/appligen/config_appli.xml \
src/Tools/padder/resources/testdata/Makefile \
src/Tools/padder/unittests/Makefile \
src/Tools/padder/unittests/autotest.sh \
grouping_elements_ex08.py \
measurements_ex01.py \
measurements_ex02.py \
+ measurements_ex03.py \
modifying_meshes_ex01.py \
modifying_meshes_ex02.py \
modifying_meshes_ex03.py \
--- /dev/null
+# Basic Properties
+
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New(salome.myStudy)
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh = smeshBuilder.New(salome.myStudy)
+
+# create a box
+box = geompy.MakeBoxDXDYDZ(100,100,100)
+face = geompy.SubShapeAllSorted(box, geompy.ShapeType['FACE'])[0]
+
+# mesh a box
+mesh = smesh.Mesh(box)
+submesh_1d = mesh.Segment().NumberOfSegments(5)
+submesh_2d = mesh.Quadrangle()
+submesh_3d = mesh.Hexahedron()
+submesh_2d_face = mesh.Triangle(face)
+mesh.Compute()
+
+# create a group
+
+group_2d = mesh.Group(face)
+
+# compute basic properties
+
+print "Get basic properties: approach 1 (via measurements tool) ----"
+
+measure = smesh.CreateMeasurements()
+
+print "* for mesh:"
+print " length:", measure.Length(mesh.mesh)
+print " area:", measure.Area(mesh.mesh)
+print " volume:", measure.Volume(mesh.mesh)
+
+print "* for group (2d):"
+print " length:", measure.Length(group_2d)
+print " area:", measure.Area(group_2d)
+print " volume:", measure.Volume(group_2d)
+
+print "* for submesh (2d):"
+print " length:", measure.Length(submesh_2d_face.GetSubMesh())
+print " area:", measure.Area(submesh_2d_face.GetSubMesh())
+print " volume:", measure.Volume(submesh_2d_face.GetSubMesh())
+
+measure.UnRegister()
+
+print "Get basic properties: approach 2 (via smeshBuilder) ----"
+
+print "* for mesh:"
+print " length:", smesh.GetLength(mesh)
+print " area:", smesh.GetArea(mesh)
+print " volume:", smesh.GetVolume(mesh)
+
+print "* for group (2d):"
+print " length:", smesh.GetLength(group_2d)
+print " area:", smesh.GetArea(group_2d)
+print " volume:", smesh.GetVolume(group_2d)
+
+print "* for submesh (2d):"
+print " length:", smesh.GetLength(submesh_2d_face)
+print " area:", smesh.GetArea(submesh_2d_face)
+print " volume:", smesh.GetVolume(submesh_2d_face)
+
+print "Get basic properties: approach 3 (via smeshBuilder.Mesh) ----"
+
+print "* for mesh:"
+print " length:", mesh.GetLength()
+print " area:", mesh.GetArea()
+print " volume:", mesh.GetVolume()
+
+print "* for group (2d): unsupported"
+
+print "* for submesh (2d): unsupported"
The following dialog common for line and planar elements will appear:
-\image html extrusion1.png
+\image html extrusion_along_path_dlg.png
</li>
<li>In this dialog:
</ul>
</li>
-<li>define the Path along which the elements will be extruded,
-\n Path definition consists of several elements:
-<ul>
-<li><b>Mesh or submesh</b> - 1D mesh or sub-mesh, along which proceeds the extrusion</li>
-<li><b>Start node</b> - the start node. It is used to define the direction of extrusion </li>
-</ul>
+<li>define the \b Path along which the elements will be extruded.<br>
+ Path definition consists of several elements:
+ <ul>
+ <li><b>Mesh or submesh</b> - 1D mesh or sub-mesh, along which proceeds the extrusion</li>
+ <li><b>Start node</b> - the start node. It is used to define the direction of extrusion </li>
+ </ul>
</li>
-<li>activate <b>Generate Groups</b> checkbox if it is necessary to copy the groups of
-elements of the source mesh to the newly created one. </li>
+<li>activate <b>Generate Groups</b> checkbox if it is necessary to copy the groups of
+ elements of the source mesh to the newly created one. </li>
</ul>
</li>
<li>There are two optional parameters, which can be very useful:
<ul>
<li>If the path of extrusion is curvilinear, at each iteration the
-extruded shape is rotated to keep its initial angularity to the
-curve. By default, the <b>Base Point</b> around which the shape is rotated is
-the mass center of the shape, however, you can specify any point as
-the <b>Base Point</b> and the shape will be rotated with respect to this
-point.
+extruded elements are rotated to keep its initial angularity to the
+curve. By default, the <b>Base Point</b> around which the elements are rotated is
+the mass center of the elements, however, you can specify any point as
+the <b>Base Point</b> and the elements will be rotated with respect to this
+point.<br>
+ Note that it is the <b>Base Point</b> whos track exactly equals to the
+ path, and all the elements being extruded just keep their relative
+ position around the <b>Base Point</b> at each iteration.
</li>
-<li>The shape can also be rotated around the path to get the resulting
+<li>The elements can also be rotated around the path to get the resulting
mesh in a helical fashion. You can set the values of angles at the
right, add them to the list of angles at the left by pressing the <em>"Add"</em>
button and remove them from the list by pressing the <em>"Remove"</em> button.
<center><em>"Remove" button</em></center>
<b>Linear variation of the angles</b> option allows defining the angle of gradual rotation for the whole path.
-At each step the shape will be rotated by angle/nb. of steps.
+At each step the elements will be rotated by <code>angle / nb. of steps</code>.
</li>
</ul>
\image html bnd_box_preview.png
+\section basic_properties_anchor Basic Properties
+
+This operation allows calculation of length, area or volume for the the selected
+object:
+- Length is calculated as a sum of length of all 1D elements;
+- Area id a sum of area of all 2D elements
+- Volume is a sum of volume of all 3D elements.
+
+To start one of <b>Basic Properties</b> calculations, select <b>Length</b>, <b>Area</b>
+or <b>Volume</b> item from <b>Measurements - Basic Properties</b> menu.
+
+\image html basic_props.png
+
+In the dialog box select the required type of calculation (length, area or volume), select
+the the object (mesh, sub-mesh or group) and press \em Compute button.
+
+The result of calculation will be shown in the bottom area of the
+dialog box.
+
+\note
+- If mesh consists of 3D elements only, its "length" and "area" will be 0.
+- As calculation result is a sum of length, area and volume of all mesh elements,
+ duplications are not taken into account; i.e. all duplicated elements
+ (elements built on the same set of nodes) will be included into the result.
+- Similarly, intersection of elements is not taken into account.
+
<b>See Also</b> a sample TUI Script of a
\ref tui_measurements_page "Measurement operations".
of two triangles separated by a diagonal. So it can be calculated only
for elements consisting of 4 nodes.
-\image html image25.png
+ <b><center>JA=0.25 * (A1 + A2 + A3 + A4)
+ <br> TAPER= MAX(|A1/JA - 1|, |A2/JA - 1|, |A3/JA - 1|, |A4/JA - 1|)</center></b>
<br><em>To apply the Taper quality criterion to your mesh:</em>
\section tui_bounding_box Bounding Box
\tui_script{measurements_ex02.py}
+\section tui_bounding_box Basic Properties
+\tui_script{measurements_ex03.py}
+
*/
* common bounding box of entities
*/
Measure BoundingBox(in ListOfIDSources sources);
+
+ /*!
+ * sum of length of 1D elements of the source
+ */
+ double Length(in SMESH_IDSource source);
+
+ /*!
+ * sum of area of 2D elements of the source
+ */
+ double Area(in SMESH_IDSource source);
+
+ /*!
+ * sum of volume of 3D elements of the source
+ */
+ double Volume(in SMESH_IDSource source);
};
};
interface SMESH_Mesh;
- interface SMESH_IDSource
+ interface SMESH_IDSource : SALOME::GenericObj
{
/*!
* Returns a sequence of all element IDs
mesh_min_dist.png \
reorient_faces_point.png \
reorient_faces_face.png \
- mesh_ball.png
+ mesh_ball.png \
+ mesh_measure_basic_props.png \
+ mesh_measure_length.png \
+ mesh_measure_area.png \
+ mesh_measure_volume.png
# VSR: little trick to avoid putting if SMESHCatalog.xml to the distribution archive
nodist_salomeres_SCRIPTS = SMESHCatalog.xml SalomeApp.xml
<meshers-group name="Standard Meshers"
resources="StdMeshers"
+ idl-module="StdMeshers"
server-lib="StdMeshersEngine"
gui-lib="StdMeshersGUI">
<hypotheses>
../SMESHDS/libSMESHDS.la \
../SMESHUtils/libSMESHUtils.la \
$(CAS_LDPATH) -lTKernel -lTKBRep -lTKG3d -lTKTopAlgo -lTKGeomBase -lTKGeomAlgo \
- $(VTK_LIBS)
+ $(VTK_LIBS) \
+ $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics
SMESHControls_CPPFLAGS = \
$(libSMESHControls_la_CPPFLAGS)
../SMDS/libSMDS.la \
../SMESHDS/libSMESHDS.la \
libSMESHControls.la \
- $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics \
+ $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics -lSalomeIDLKernel \
$(GEOM_LDFLAGS) -lGEOMAlgo \
$(CAS_LDPATH) -lTKernel -lTKBRep -lTKG3d
libMeshDriverDAT_la_LDFLAGS = \
../Driver/libMeshDriver.la \
- $(KERNEL_LDFLAGS) -lSALOMEBasics \
+ $(KERNEL_LDFLAGS) -lSALOMEBasics -lSalomeIDLKernel \
$(CAS_KERNEL)
DAT_Test_CPPFLAGS = \
libMeshDriverDAT.la \
../Driver/libMeshDriver.la \
../SMDS/libSMDS.la \
- $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics
+ $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics -lSalomeIDLKernel
-lOpUtil \
-lSALOMELocalTrace \
-lSALOMEBasics \
+ -lSalomeIDLKernel \
../MEDWrapper/Factory/libMEDWrapper.la \
../MEDWrapper/Base/libMEDWrapperBase.la \
../MEDWrapper/V2_2/libMEDWrapper_V2_2.la \
libMeshDriverSTL.la \
../Driver/libMeshDriver.la \
../SMDS/libSMDS.la \
- $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics \
+ $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics -lSalomeIDLKernel \
$(CAS_LDPATH) -lTKernel -lTKSTL -lTKTopAlgo -lTKMesh -lTKBO
libMeshDriverUNV.la \
../Driver/libMeshDriver.la \
../SMDS/libSMDS.la \
- $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics
+ $(KERNEL_LDFLAGS) -lOpUtil -lSALOMELocalTrace -lSALOMEBasics -lSalomeIDLKernel
return;
string num_buf;
- char line[theMaxLineLen];
+ char line[theMaxLineLen] = "";
in_stream >> theUnitsRecord.units_code;
in_stream.readsome( line, 20 );
int _nextFree;
int _maxAvail;
int _chunkSize;
+ int _maxOccupied;
+ int _nbHoles;
int getNextFree()
{
+ // Don't iterate on the _freeList if all the "holes"
+ // are filled. Go straight to the last occupied ID + 1
+ if ( _nbHoles == 0 )
+ return std::min(_maxOccupied + 1, _maxAvail);
+
for (int i = _nextFree; i < _maxAvail; i++)
if (_freeList[i] == true)
{
_chunkSize = nblk;
_nextFree = 0;
_maxAvail = 0;
+ _maxOccupied = 0;
+ _nbHoles = 0;
_chunkList.clear();
_freeList.clear();
}
_freeList[_nextFree] = false;
obj = _chunkList[chunkId] + rank; // &_chunkList[chunkId][rank];
}
+ if (_nextFree < _maxOccupied)
+ {
+ _nbHoles-=1;
+ }
+ else
+ {
+ _maxOccupied = _nextFree;
+ }
//obj->init();
return obj;
}
_freeList[toFree] = true;
if (toFree < _nextFree)
_nextFree = toFree;
+ if (toFree < _maxOccupied)
+ _nbHoles += 1;
//obj->clean();
//checkDelete(i); compactage non fait
break;
{
_nextFree = 0;
_maxAvail = 0;
+ _maxOccupied = 0;
+ _nbHoles = 0;
for (size_t i = 0; i < _chunkList.size(); i++)
delete[] _chunkList[i];
clearVector( _chunkList );
myNodes[elemId] = 0;
myInfo.myNbNodes--;
((SMDS_MeshNode*) n)->SetPosition(SMDS_SpacePosition::originSpacePosition());
+ ((SMDS_MeshNode*) n)->SMDS_MeshElement::init( -1, -1, -1 ); // avoid reuse
myNodePool->destroy(static_cast<SMDS_MeshNode*>(todest));
myNodeIDFactory->ReleaseID(elemId, vtkId);
}
* \param node - the node to check
* \retval int - node index within the element, -1 if not found
*/
- int GetNodeIndex( const SMDS_MeshNode* node ) const;
+ virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
inline ShortType getMeshId() const { return myMeshId; }
inline LongType getshapeId() const { return myShapeId; }
cellList.push_back(vtkId);
}
}
- myCells = &cellList[0];
+ myCells = cellList.empty() ? 0 : &cellList[0];
myNcells = cellList.size();
//MESSAGE("myNcells="<<myNcells);
}
SMDS_MeshNode(int id, int meshId, int shapeId = -1, double x=0, double y=0, double z=0);
virtual ~SMDS_MeshNode();
void init(int id, int meshId, int shapeId = -1, double x=0, double y=0, double z=0);
- inline void setVtkId(int vtkId) { myVtkID = vtkId; };
double* getCoord() const;
void AddInverseElement(const SMDS_MeshElement * ME);
void RemoveInverseElement(const SMDS_MeshElement * parent);
}
newFaceLocations->Squeeze();
newFaces->Squeeze();
- newFaceLocations->Register(this);
- newFaces->Register(this);
this->SetCells(newTypes, newLocations, newConnectivity, newFaceLocations, newFaces);
newFaceLocations->Delete();
newFaces->Delete();
int start,
int end)
{
- MESSAGE("copyBloc " << alreadyCopied << " " << start << " " << end << " size: " << end - start << " total: " << alreadyCopied + end - start);
+ //MESSAGE("copyBloc " << alreadyCopied << " " << start << " " << end << " size: " << end - start << " total: " << alreadyCopied + end - start);
for (int j = start; j < end; j++)
{
newTypes->SetValue(alreadyCopied, this->Types->GetValue(j));
const SMDS_MeshNode** nodes = GetFaceNodes( faceIndex );
// a set of facet nodes w/o medium ones and w/o nodes[0]
- set< const SMDS_MeshNode* > nodeSet;
+ set< const SMDS_MeshElement* > nodeSet;
const int di = myVolume->IsQuadratic() ? 2 : 1;
for ( int i = di; i < myFaceNbNodes; i += di )
nodeSet.insert( nodes[i] );
SMDS_ElemIteratorPtr eIt = nodes[0]->GetInverseElementIterator( SMDSAbs_Volume );
+ SMDS_ElemIteratorPtr nIt;
while ( eIt->more() ) {
const SMDS_MeshElement* vol = eIt->next();
if ( vol != myVolume ) {
size_t nbShared = 0;
- SMDS_NodeIteratorPtr nIt = vol->nodeIterator();
+ if ( const SMDS_VtkVolume* v = dynamic_cast< const SMDS_VtkVolume* >( vol ))
+ nIt = v->uniqueNodesIterator();
+ else
+ nIt = vol->nodesIterator();
while ( nIt->more() )
if (( nbShared += nodeSet.count( nIt->next() )) == nodeSet.size() )
{
return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]);
}
+/*!
+ * \brief Check if a node belongs to the element
+ * \param node - the node to check
+ * \retval int - node index within the element, -1 if not found
+ */
+int SMDS_VtkFace::GetNodeIndex( const SMDS_MeshNode* node ) const
+{
+ vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+ vtkIdType npts, *pts;
+ grid->GetCellPoints( this->myVtkID, npts, pts );
+ for ( vtkIdType i = 0; i < npts; ++i )
+ if ( pts[i] == node->getVtkId() )
+ return i;
+ return -1;
+}
+
bool SMDS_VtkFace::IsQuadratic() const
{
vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
virtual SMDSAbs_EntityType GetEntityType() const;
virtual SMDSAbs_GeometryType GetGeomType() const;
virtual const SMDS_MeshNode* GetNode(const int ind) const;
+ virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
virtual bool IsQuadratic() const;
virtual bool IsPoly() const;
const std::vector<int>& interlace = SMDS_MeshCell::fromVtkOrder( VTKCellType( aVtkType ));
return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ interlace.empty() ? ind : interlace[ind]] );
}
+/*!
+ * \brief Check if a node belongs to the element
+ * \param node - the node to check
+ * \retval int - node index within the element, -1 if not found
+ */
+int SMDS_VtkVolume::GetNodeIndex( const SMDS_MeshNode* node ) const
+{
+ vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
+ const vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
+ if ( aVtkType == VTK_POLYHEDRON)
+ {
+ vtkIdType nFaces = 0;
+ vtkIdType* ptIds = 0;
+ grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
+ int id = 0;
+ for (int iF = 0; iF < nFaces; iF++)
+ {
+ int nodesInFace = ptIds[id];
+ for ( vtkIdType i = 0; i < nodesInFace; ++i )
+ if ( ptIds[id+i+1] == node->getVtkId() )
+ return id+i-iF;
+ id += (nodesInFace + 1);
+ }
+ return -1;
+ }
+ vtkIdType npts, *pts;
+ grid->GetCellPoints( this->myVtkID, npts, pts );
+ for ( vtkIdType i = 0; i < npts; ++i )
+ if ( pts[i] == node->getVtkId() )
+ {
+ const std::vector<int>& interlace = SMDS_MeshCell::toVtkOrder( VTKCellType( aVtkType ));
+ return interlace.empty() ? i : interlace[i];
+ }
+ return -1;
+}
bool SMDS_VtkVolume::IsQuadratic() const
{
virtual SMDSAbs_EntityType GetEntityType() const;
virtual SMDSAbs_GeometryType GetGeomType() const;
virtual const SMDS_MeshNode* GetNode(const int ind) const;
+ virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
virtual bool IsQuadratic() const;
virtual bool IsPoly() const;
virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
#include "SMESH_Gen.hxx"
#include "SMESH_HypoFilter.hxx"
#include "SMESH_Mesh.hxx"
+#include "SMESH_MeshAlgos.hxx"
#include "SMESH_TypeDefs.hxx"
#include "SMESH_subMesh.hxx"
#include <algorithm>
#include <limits>
+#include "SMESH_ProxyMesh.hxx"
+#include "SMESH_MesherHelper.hxx"
using namespace std;
return GeomAbs_C0;
}
+//================================================================================
+/*!
+ * \brief Return true if an edge can be considered straight
+ */
+//================================================================================
+
+bool SMESH_Algo::isStraight( const TopoDS_Edge & E,
+ const bool degenResult)
+{
+ {
+ double f,l;
+ if ( BRep_Tool::Curve( E, f, l ).IsNull())
+ return degenResult;
+ }
+ BRepAdaptor_Curve curve( E );
+ switch( curve.GetType() )
+ {
+ case GeomAbs_Line:
+ return true;
+ case GeomAbs_Circle:
+ case GeomAbs_Ellipse:
+ case GeomAbs_Hyperbola:
+ case GeomAbs_Parabola:
+ return false;
+ // case GeomAbs_BezierCurve:
+ // case GeomAbs_BSplineCurve:
+ // case GeomAbs_OtherCurve:
+ default:;
+ }
+ const double f = curve.FirstParameter();
+ const double l = curve.LastParameter();
+ const gp_Pnt pf = curve.Value( f );
+ const gp_Pnt pl = curve.Value( l );
+ const gp_Vec v1( pf, pl );
+ const double v1Len = v1.Magnitude();
+ if ( v1Len < std::numeric_limits< double >::min() )
+ return false; // E seems closed
+ const double tol = Min( 10 * curve.Tolerance(), v1Len * 1e-2 );
+ const int nbSamples = 7;
+ for ( int i = 0; i < nbSamples; ++i )
+ {
+ const double r = ( i + 1 ) / nbSamples;
+ const gp_Pnt pi = curve.Value( f * r + l * ( 1 - r ));
+ const gp_Vec vi( pf, pi );
+ const double h = 0.5 * v1.Crossed( vi ).Magnitude() / v1Len;
+ if ( h > tol )
+ return false;
+ }
+ return true;
+}
+
//================================================================================
/*!
* \brief Return the node built on a vertex
}
+//================================================================================
+/*!
+ * Method in which an algorithm generating a structured mesh
+ * fixes positions of in-face nodes after there movement
+ * due to insertion of viscous layers.
+ */
+//================================================================================
+
+bool SMESH_2D_Algo::FixInternalNodes(const SMESH_ProxyMesh& mesh,
+ const TopoDS_Face& face)
+{
+ const SMESHDS_SubMesh* smDS = mesh.GetSubMesh(face);
+ if ( !smDS || smDS->NbElements() < 1 )
+ return false;
+
+ SMESH_MesherHelper helper( *mesh.GetMesh() );
+
+ // get all faces from a proxy sub-mesh
+ typedef SMDS_StdIterator< const SMDS_MeshElement*, SMDS_ElemIteratorPtr > TIterator;
+ TIDSortedElemSet allFaces( TIterator( smDS->GetElements() ), TIterator() );
+ TIDSortedElemSet avoidSet, firstRowQuads;
+
+ // indices of nodes to pass to a neighbour quad using SMESH_MeshAlgos::FindFaceInSet()
+ int iN1, iN2;
+
+ // get two first rows of nodes by passing through the first row of faces
+ vector< vector< const SMDS_MeshNode* > > nodeRows;
+ int iRow1 = 0, iRow2 = 1;
+ const SMDS_MeshElement* quad;
+ {
+ // look for a corner quadrangle and it's corner node
+ const SMDS_MeshElement* cornerQuad = 0;
+ int cornerNodeInd = -1;
+ SMDS_ElemIteratorPtr fIt = smDS->GetElements();
+ while ( !cornerQuad && fIt->more() )
+ {
+ cornerQuad = fIt->next();
+ if ( cornerQuad->NbCornerNodes() != 4 )
+ return false;
+ SMDS_NodeIteratorPtr nIt = cornerQuad->nodeIterator();
+ for ( int i = 0; i < 4; ++i )
+ {
+ int nbInverseQuads = 0;
+ SMDS_ElemIteratorPtr fIt = nIt->next()->GetInverseElementIterator(SMDSAbs_Face);
+ while ( fIt->more() )
+ nbInverseQuads += allFaces.count( fIt->next() );
+ if ( nbInverseQuads == 1 )
+ cornerNodeInd = i, i = 4;
+ }
+ if ( cornerNodeInd < 0 )
+ cornerQuad = 0;
+ }
+ if ( !cornerQuad || cornerNodeInd < 0 )
+ return false;
+
+ iN1 = helper.WrapIndex( cornerNodeInd + 1, 4 );
+ iN2 = helper.WrapIndex( cornerNodeInd + 2, 4 );
+ int iN3 = helper.WrapIndex( cornerNodeInd + 3, 4 );
+ nodeRows.resize(2);
+ nodeRows[iRow1].push_back( cornerQuad->GetNode( cornerNodeInd ));
+ nodeRows[iRow1].push_back( cornerQuad->GetNode( iN1 ));
+ nodeRows[iRow2].push_back( cornerQuad->GetNode( iN3 ));
+ nodeRows[iRow2].push_back( cornerQuad->GetNode( iN2 ));
+ firstRowQuads.insert( cornerQuad );
+
+ // pass through the rest quads in a face row
+ quad = cornerQuad;
+ while ( quad )
+ {
+ avoidSet.clear();
+ avoidSet.insert( quad );
+ if (( quad = SMESH_MeshAlgos::FindFaceInSet( nodeRows[iRow1].back(),
+ nodeRows[iRow2].back(),
+ allFaces, avoidSet, &iN1, &iN2)))
+ {
+ nodeRows[iRow1].push_back( quad->GetNode( helper.WrapIndex( iN2 + 2, 4 )));
+ nodeRows[iRow2].push_back( quad->GetNode( helper.WrapIndex( iN1 + 2, 4 )));
+ if ( quad->NbCornerNodes() != 4 )
+ return false;
+ }
+ }
+ if ( nodeRows[iRow1].size() < 3 )
+ return true; // there is nothing to fix
+ }
+
+ nodeRows.reserve( smDS->NbElements() / nodeRows[iRow1].size() );
+
+ // get the rest node rows
+ while ( true )
+ {
+ ++iRow1, ++iRow2;
+
+ // get the first quad in the next face row
+ if (( quad = SMESH_MeshAlgos::FindFaceInSet( nodeRows[iRow1][0],
+ nodeRows[iRow1][1],
+ allFaces, /*avoid=*/firstRowQuads,
+ &iN1, &iN2)))
+ {
+ if ( quad->NbCornerNodes() != 4 )
+ return false;
+ nodeRows.resize( iRow2+1 );
+ nodeRows[iRow2].push_back( quad->GetNode( helper.WrapIndex( iN2 + 2, 4 )));
+ nodeRows[iRow2].push_back( quad->GetNode( helper.WrapIndex( iN1 + 2, 4 )));
+ firstRowQuads.insert( quad );
+ }
+ else
+ {
+ break; // no more rows
+ }
+
+ // pass through the rest quads in a face row
+ while ( quad )
+ {
+ avoidSet.clear();
+ avoidSet.insert( quad );
+ if (( quad = SMESH_MeshAlgos::FindFaceInSet( nodeRows[iRow1][ nodeRows[iRow2].size()-1 ],
+ nodeRows[iRow2].back(),
+ allFaces, avoidSet, &iN1, &iN2)))
+ {
+ if ( quad->NbCornerNodes() != 4 )
+ return false;
+ nodeRows[iRow2].push_back( quad->GetNode( helper.WrapIndex( iN1 + 2, 4 )));
+ }
+ }
+ if ( nodeRows[iRow1].size() != nodeRows[iRow2].size() )
+ return false;
+ }
+ if ( nodeRows.size() < 3 )
+ return true; // there is nothing to fix
+
+ // get params of the first (bottom) and last (top) node rows
+ UVPtStructVec uvB( nodeRows[0].size() ), uvT( nodeRows[0].size() );
+ for ( int isBot = 0; isBot < 2; ++isBot )
+ {
+ UVPtStructVec & uvps = isBot ? uvB : uvT;
+ vector< const SMDS_MeshNode* >& nodes = nodeRows[ isBot ? 0 : nodeRows.size()-1 ];
+ for ( size_t i = 0; i < nodes.size(); ++i )
+ {
+ uvps[i].node = nodes[i];
+ gp_XY uv = helper.GetNodeUV( face, uvps[i].node );
+ uvps[i].u = uv.Coord(1);
+ uvps[i].v = uv.Coord(2);
+ uvps[i].x = 0;
+ }
+ // calculate x (normalized param)
+ for ( size_t i = 1; i < nodes.size(); ++i )
+ uvps[i].x = uvps[i-1].x + SMESH_TNodeXYZ( uvps[i-1].node ).Distance( uvps[i].node );
+ for ( size_t i = 1; i < nodes.size(); ++i )
+ uvps[i].x /= uvps.back().x;
+ }
+
+ // get params of the left and right node rows
+ UVPtStructVec uvL( nodeRows.size() ), uvR( nodeRows.size() );
+ for ( int isLeft = 0; isLeft < 2; ++isLeft )
+ {
+ UVPtStructVec & uvps = isLeft ? uvL : uvR;
+ const int iCol = isLeft ? 0 : nodeRows[0].size() - 1;
+ for ( size_t i = 0; i < nodeRows.size(); ++i )
+ {
+ uvps[i].node = nodeRows[i][iCol];
+ gp_XY uv = helper.GetNodeUV( face, uvps[i].node );
+ uvps[i].u = uv.Coord(1);
+ uvps[i].v = uv.Coord(2);
+ uvps[i].y = 0;
+ }
+ // calculate y (normalized param)
+ for ( size_t i = 1; i < nodeRows.size(); ++i )
+ uvps[i].y = uvps[i-1].y + SMESH_TNodeXYZ( uvps[i-1].node ).Distance( uvps[i].node );
+ for ( size_t i = 1; i < nodeRows.size(); ++i )
+ uvps[i].y /= uvps.back().y;
+ }
+
+ // update node coordinates
+ SMESHDS_Mesh* meshDS = mesh.GetMeshDS();
+ Handle(Geom_Surface) S = BRep_Tool::Surface( face );
+ gp_XY a0 ( uvB.front().u, uvB.front().v );
+ gp_XY a1 ( uvB.back().u, uvB.back().v );
+ gp_XY a2 ( uvT.back().u, uvT.back().v );
+ gp_XY a3 ( uvT.front().u, uvT.front().v );
+ for ( size_t iRow = 1; iRow < nodeRows.size()-1; ++iRow )
+ {
+ gp_XY p1 ( uvR[ iRow ].u, uvR[ iRow ].v );
+ gp_XY p3 ( uvL[ iRow ].u, uvL[ iRow ].v );
+ const double y0 = uvL[ iRow ].y;
+ const double y1 = uvR[ iRow ].y;
+ for ( size_t iCol = 1; iCol < nodeRows[0].size()-1; ++iCol )
+ {
+ gp_XY p0 ( uvB[ iCol ].u, uvB[ iCol ].v );
+ gp_XY p2 ( uvT[ iCol ].u, uvT[ iCol ].v );
+ const double x0 = uvB[ iCol ].x;
+ const double x1 = uvT[ iCol ].x;
+ double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0));
+ double y = y0 + x * (y1 - y0);
+ gp_XY uv = helper.calcTFI( x, y, a0,a1,a2,a3, p0,p1,p2,p3 );
+ gp_Pnt p = S->Value( uv.Coord(1), uv.Coord(2));
+ const SMDS_MeshNode* n = nodeRows[iRow][iCol];
+ meshDS->MoveNode( n, p.X(), p.Y(), p.Z() );
+ if ( SMDS_FacePosition* pos = dynamic_cast< SMDS_FacePosition*>( n->GetPosition() ))
+ pos->SetParameters( uv.Coord(1), uv.Coord(2) );
+ }
+ }
+ return true;
+}
class SMESH_HypoFilter;
class SMESH_Mesh;
class SMESH_MesherHelper;
+class SMESH_ProxyMesh;
class SMESH_subMesh;
class TopoDS_Face;
class TopoDS_Shape;
static bool IsContinuous(const TopoDS_Edge & E1, const TopoDS_Edge & E2) {
return ( Continuity( E1, E2 ) >= GeomAbs_G1 );
}
+ /*!
+ * \brief Return true if an edge can be considered straight
+ */
+ static bool isStraight( const TopoDS_Edge & E, const bool degenResult=false );
/*!
* \brief Return the node built on a vertex
{
public:
SMESH_2D_Algo(int hypId, int studyId, SMESH_Gen* gen);
+ /*!
+ * \brief Method in which an algorithm generating a structured mesh
+ * fixes positions of in-face nodes after there movement
+ * due to insertion of viscous layers.
+ */
+ virtual bool FixInternalNodes(const SMESH_ProxyMesh& mesh,
+ const TopoDS_Face& face);
};
class SMESH_EXPORT SMESH_3D_Algo: public SMESH_Algo
#include <TopTools_MapOfShape.hxx>
#include <TopoDS_Iterator.hxx>
+#include "SMESH_TryCatch.hxx" // include after OCCT headers!
+
#include "Utils_ExceptHandlers.hxx"
#include <boost/thread/thread.hpp>
bool theAutoDimension)
throw(SALOME_Exception)
{
- Unexpect aCatch(SalomeException);
+ SMESH_TRY;
DriverMED_W_SMESHDS_Mesh myWriter;
myWriter.SetFile ( file, MED::EVersion(theVersion) );
}
// Perform export
myWriter.Perform();
+
+ SMESH_CATCH( SMESH::throwSalomeEx );
}
//================================================================================
currentSubIds.Add( smToCompute[i]->GetId() );
}
double rate = algo->GetProgress();
- if ( !( 0. < rate && rate < 1.001 ))
+ if ( 0. < rate && rate < 1.001 )
+ {
+ computedCost += rate * ( algoDoneCost + algoNotDoneCost );
+ }
+ else
{
rate = algo->GetProgressByTic();
+ computedCost += algoDoneCost + rate * algoNotDoneCost;
}
// cout << "rate: "<<rate << " algoNotDoneCost: " << algoNotDoneCost << endl;
- computedCost += algoDoneCost + rate * algoNotDoneCost;
}
// get cost of already treated sub-meshes
GetMeshDS()->RemoveNode( volNodes[i] );
}
} // loop on volumes to split
-
+
myLastCreatedNodes = newNodes;
myLastCreatedElems = newElems;
}
const TopoDS_Shape& aS = theTrack->GetShapeToMesh();
- if( aS == SMESH_Mesh::PseudoShape() ) {
+ if ( !theTrack->HasShapeToMesh() ) {
//Mesh without shape
const SMDS_MeshNode* currentNode = NULL;
const SMDS_MeshNode* prevNode = theN1;
if ( BRep_Tool::Degenerated( aTrackEdge ) )
return EXTR_BAD_PATH_SHAPE;
TopExp::Vertices( aTrackEdge, aV1, aV2 );
- const SMDS_MeshNode* aN1 = 0;
- const SMDS_MeshNode* aN2 = 0;
- if ( theTrack->GetSubMesh( aV1 ) && theTrack->GetSubMesh( aV1 )->GetSubMeshDS() ) {
- aItN = theTrack->GetSubMesh( aV1 )->GetSubMeshDS()->GetNodes();
- aN1 = aItN->next();
- }
- if ( theTrack->GetSubMesh( aV2 ) && theTrack->GetSubMesh( aV2 )->GetSubMeshDS() ) {
- aItN = theTrack->GetSubMesh( aV2 )->GetSubMeshDS()->GetNodes();
- aN2 = aItN->next();
- }
+ const SMDS_MeshNode* aN1 = SMESH_Algo::VertexNode( aV1, pMeshDS );
+ const SMDS_MeshNode* aN2 = SMESH_Algo::VertexNode( aV2, pMeshDS );
// starting node must be aN1 or aN2
if ( !( aN1 == theN1 || aN2 == theN1 ) )
return EXTR_BAD_STARTING_NODE;
if ( aVprev.IsNull() ) {
// if previous vertex is not yet defined, it means that we in the beginning of wire
// and we have to find initial vertex corresponding to starting node theN1
- const SMDS_MeshNode* aN1 = 0;
- const SMDS_MeshNode* aN2 = 0;
-
- if ( locTrack->GetFather()->GetSubMesh(aV1) && locTrack->GetFather()->GetSubMesh(aV1)->GetSubMeshDS() ) {
- aItN = locTrack->GetFather()->GetSubMesh(aV1)->GetSubMeshDS()->GetNodes();
- aN1 = aItN->next();
- }
- if ( locTrack->GetFather()->GetSubMesh(aV2) && locTrack->GetFather()->GetSubMesh(aV2)->GetSubMeshDS() ) {
- aItN = locTrack->GetFather()->GetSubMesh(aV2)->GetSubMeshDS()->GetNodes();
- aN2 = aItN->next();
- }
+ const SMDS_MeshNode* aN1 = SMESH_Algo::VertexNode( aV1, pMeshDS );
+ const SMDS_MeshNode* aN2 = SMESH_Algo::VertexNode( aV2, pMeshDS );
// starting node must be aN1 or aN2
aN1isOK = ( aN1 && aN1 == theN1 );
aN2isOK = ( aN2 && aN2 == theN1 );
}
}
list< list<SMESH_MeshEditor_PathPoint> >::iterator itLLPP = LLPPs.begin();
- list<SMESH_MeshEditor_PathPoint> firstList = *itLLPP;
- list<SMESH_MeshEditor_PathPoint>::iterator itPP = firstList.begin();
- for(; itPP!=firstList.end(); itPP++) {
- fullList.push_back( *itPP );
- }
+ list<SMESH_MeshEditor_PathPoint>& firstList = *itLLPP;
+ fullList.splice( fullList.end(), firstList );
+
SMESH_MeshEditor_PathPoint PP1 = fullList.back();
fullList.pop_back();
itLLPP++;
for(; itLLPP!=LLPPs.end(); itLLPP++) {
- list<SMESH_MeshEditor_PathPoint> currList = *itLLPP;
- itPP = currList.begin();
+ list<SMESH_MeshEditor_PathPoint>& currList = *itLLPP;
SMESH_MeshEditor_PathPoint PP2 = currList.front();
gp_Dir D1 = PP1.Tangent();
gp_Dir D2 = PP2.Tangent();
gp_Dir Dnew( ( D1.XYZ() + D2.XYZ() ) / 2 );
PP1.SetTangent(Dnew);
fullList.push_back(PP1);
- itPP++;
- for(; itPP!=currList.end(); itPP++) {
- fullList.push_back( *itPP );
- }
+ fullList.splice( fullList.end(), currList, ++currList.begin(), currList.end() );
PP1 = fullList.back();
fullList.pop_back();
}
//purpose : auxilary for ExtrusionAlongTrack
//=======================================================================
SMESH_MeshEditor::Extrusion_Error
-SMESH_MeshEditor::MakeEdgePathPoints(std::list<double>& aPrms,
- const TopoDS_Edge& aTrackEdge,
- bool FirstIsStart,
+SMESH_MeshEditor::MakeEdgePathPoints(std::list<double>& aPrms,
+ const TopoDS_Edge& aTrackEdge,
+ bool FirstIsStart,
list<SMESH_MeshEditor_PathPoint>& LPP)
{
Standard_Real aTx1, aTx2, aL2, aTolVec, aTolVec2;
//purpose : auxilary for ExtrusionAlongTrack
//=======================================================================
SMESH_MeshEditor::Extrusion_Error
-SMESH_MeshEditor::MakeExtrElements(TIDSortedElemSet& theElements,
+SMESH_MeshEditor::MakeExtrElements(TIDSortedElemSet& theElements,
list<SMESH_MeshEditor_PathPoint>& fullList,
- const bool theHasAngles,
- list<double>& theAngles,
- const bool theLinearVariation,
- const bool theHasRefPoint,
- const gp_Pnt& theRefPoint,
- const bool theMakeGroups)
+ const bool theHasAngles,
+ list<double>& theAngles,
+ const bool theLinearVariation,
+ const bool theHasRefPoint,
+ const gp_Pnt& theRefPoint,
+ const bool theMakeGroups)
{
- MESSAGE("MakeExtrElements");
- //cout<<"MakeExtrElements fullList.size() = "<<fullList.size()<<endl;
- int aNbTP = fullList.size();
- vector<SMESH_MeshEditor_PathPoint> aPPs(aNbTP);
+ const int aNbTP = fullList.size();
// Angles
- if( theHasAngles && theAngles.size()>0 && theLinearVariation ) {
+ if( theHasAngles && !theAngles.empty() && theLinearVariation )
LinearAngleVariation(aNbTP-1, theAngles);
- }
- vector<double> aAngles( aNbTP );
- int j = 0;
- for(; j<aNbTP; ++j) {
- aAngles[j] = 0.;
- }
- if ( theHasAngles ) {
- double anAngle;;
- std::list<double>::iterator aItD = theAngles.begin();
- for ( j=1; (aItD != theAngles.end()) && (j<aNbTP); ++aItD, ++j ) {
- anAngle = *aItD;
- aAngles[j] = anAngle;
- }
- }
// fill vector of path points with angles
- //aPPs.resize(fullList.size());
- j = -1;
+ vector<SMESH_MeshEditor_PathPoint> aPPs;
list<SMESH_MeshEditor_PathPoint>::iterator itPP = fullList.begin();
- for(; itPP!=fullList.end(); itPP++) {
- j++;
- SMESH_MeshEditor_PathPoint PP = *itPP;
- PP.SetAngle(aAngles[j]);
- aPPs[j] = PP;
+ list<double>::iterator itAngles = theAngles.begin();
+ aPPs.push_back( *itPP++ );
+ for( ; itPP != fullList.end(); itPP++) {
+ aPPs.push_back( *itPP );
+ if ( theHasAngles && itAngles != theAngles.end() )
+ aPPs.back().SetAngle( *itAngles );
}
- TNodeOfNodeListMap mapNewNodes;
+ TNodeOfNodeListMap mapNewNodes;
TElemOfVecOfNnlmiMap mapElemNewNodes;
- TElemOfElemListMap newElemsMap;
+ TElemOfElemListMap newElemsMap;
TIDSortedElemSet::iterator itElem;
- double aX, aY, aZ;
- int aNb;
- SMDSAbs_ElementType aTypeE;
// source elements for each generated one
SMESH_SequenceOfElemPtr srcElems, srcNodes;
// 3. Center of rotation aV0
gp_Pnt aV0 = theRefPoint;
- gp_XYZ aGC;
- if ( !theHasRefPoint ) {
- aNb = 0;
- aGC.SetCoord( 0.,0.,0. );
+ if ( !theHasRefPoint )
+ {
+ gp_XYZ aGC( 0.,0.,0. );
+ TIDSortedElemSet newNodes;
itElem = theElements.begin();
for ( ; itElem != theElements.end(); itElem++ ) {
SMDS_ElemIteratorPtr itN = elem->nodesIterator();
while ( itN->more() ) {
- const SMDS_MeshNode* node = static_cast<const SMDS_MeshNode*>( itN->next() );
- aX = node->X();
- aY = node->Y();
- aZ = node->Z();
-
- if ( mapNewNodes.find( node ) == mapNewNodes.end() ) {
- list<const SMDS_MeshNode*> aLNx;
- mapNewNodes[node] = aLNx;
- //
- gp_XYZ aXYZ( aX, aY, aZ );
- aGC += aXYZ;
- ++aNb;
- }
+ const SMDS_MeshElement* node = itN->next();
+ if ( newNodes.insert( node ).second )
+ aGC += SMESH_TNodeXYZ( node );
}
}
- aGC /= aNb;
+ aGC /= newNodes.size();
aV0.SetXYZ( aGC );
} // if (!theHasRefPoint) {
- mapNewNodes.clear();
// 4. Processing the elements
SMESHDS_Mesh* aMesh = GetMeshDS();
for ( itElem = theElements.begin(); itElem != theElements.end(); itElem++ ) {
// check element type
const SMDS_MeshElement* elem = *itElem;
- aTypeE = elem->GetType();
+ SMDSAbs_ElementType aTypeE = elem->GetType();
if ( !elem || ( aTypeE != SMDSAbs_Face && aTypeE != SMDSAbs_Edge ) )
continue;
list<const SMDS_MeshNode*>& listNewNodes = nIt->second;
// make new nodes
- aX = node->X(); aY = node->Y(); aZ = node->Z();
-
Standard_Real aAngle1x, aAngleT1T0, aTolAng;
gp_Pnt aP0x, aP1x, aPN0, aPN1, aV0x, aV1x;
gp_Ax1 anAx1, anAxT1T0;
aTolAng=1.e-4;
aV0x = aV0;
- aPN0.SetCoord(aX, aY, aZ);
+ aPN0 = SMESH_TNodeXYZ( node );
const SMESH_MeshEditor_PathPoint& aPP0 = aPPs[0];
aP0x = aPP0.Pnt();
aDT0x= aPP0.Tangent();
//cout<<"j = 0 PP: Pnt("<<aP0x.X()<<","<<aP0x.Y()<<","<<aP0x.Z()<<")"<<endl;
- for ( j = 1; j < aNbTP; ++j ) {
+ for ( int j = 1; j < aNbTP; ++j ) {
const SMESH_MeshEditor_PathPoint& aPP1 = aPPs[j];
- aP1x = aPP1.Pnt();
- aDT1x = aPP1.Tangent();
+ aP1x = aPP1.Pnt();
+ aDT1x = aPP1.Tangent();
aAngle1x = aPP1.Angle();
gp_Trsf aTrsf, aTrsfRot, aTrsfRotT1T0;
srcNodes.Append( node );
listNewNodes.push_back( newNode );
}
- aX = aPN1.X();
- aY = aPN1.Y();
- aZ = aPN1.Z();
- const SMDS_MeshNode* newNode = aMesh->AddNode( aX, aY, aZ );
+ const SMDS_MeshNode* newNode = aMesh->AddNode( aPN1.X(), aPN1.Y(), aPN1.Z() );
myLastCreatedNodes.Append(newNode);
srcNodes.Append( node );
listNewNodes.push_back( newNode );
if ( !volume ) continue;
const SMDSAbs_EntityType type = volume->GetEntityType();
- if (( theToBiQuad && type == SMDSEntity_TriQuad_Hexa ) ||
- ( !theToBiQuad && type == SMDSEntity_Quad_Hexa ))
+ if ( volume->IsQuadratic() )
{
- aHelper.AddTLinks( static_cast< const SMDS_MeshVolume* >( volume ));
- continue;
+ bool alreadyOK;
+ switch ( type )
+ {
+ case SMDSEntity_Quad_Hexa: alreadyOK = !theToBiQuad; break;
+ case SMDSEntity_TriQuad_Hexa: alreadyOK = theToBiQuad; break;
+ default: alreadyOK = true;
+ }
+ if ( alreadyOK )
+ {
+ aHelper.AddTLinks( static_cast< const SMDS_MeshVolume* >( volume ));
+ continue;
+ }
}
const int id = volume->GetID();
vector<const SMDS_MeshNode *> nodes (volume->begin_nodes(), volume->end_nodes());
//================================================================================
/*!
- \brief Identify the elements that will be affected by node duplication (actual duplication is not performed.
+ \brief Identify the elements that will be affected by node duplication (actual duplication is not performed).
This method is the first step of DoubleNodeElemGroupsInRegion.
\param theElems - list of groups of elements (edges or faces) to be replicated
\param theNodesNot - list of groups of nodes not to replicated
\param theShape - shape to detect affected elements (element which geometric center
- located on or inside shape).
+ located on or inside shape). If the shape is null, detection is done on faces orientations
+ (select elements with a gravity center on the side given by faces normals).
+ This mode (null shape) is faster, but works only when theElems are faces, with coherents orientations.
The replicated nodes should be associated to affected elements.
\return groups of affected elements
\sa DoubleNodeElemGroupsInRegion()
TIDSortedElemSet& theAffectedElems)
{
if ( theShape.IsNull() )
- return false;
-
- const double aTol = Precision::Confusion();
- auto_ptr< BRepClass3d_SolidClassifier> bsc3d;
- auto_ptr<_FaceClassifier> aFaceClassifier;
- if ( theShape.ShapeType() == TopAbs_SOLID )
- {
- bsc3d.reset( new BRepClass3d_SolidClassifier(theShape));;
- bsc3d->PerformInfinitePoint(aTol);
- }
- else if (theShape.ShapeType() == TopAbs_FACE )
{
- aFaceClassifier.reset( new _FaceClassifier(TopoDS::Face(theShape)));
+ std::set<const SMDS_MeshNode*> alreadyCheckedNodes;
+ std::set<const SMDS_MeshElement*> alreadyCheckedElems;
+ std::set<const SMDS_MeshElement*> edgesToCheck;
+ alreadyCheckedNodes.clear();
+ alreadyCheckedElems.clear();
+ edgesToCheck.clear();
+
+ // --- iterates on elements to be replicated and get elements by back references from their nodes
+
+ TIDSortedElemSet::const_iterator elemItr = theElems.begin();
+ int ielem = 1;
+ for ( ; elemItr != theElems.end(); ++elemItr )
+ {
+ SMDS_MeshElement* anElem = (SMDS_MeshElement*)*elemItr;
+ if (!anElem || (anElem->GetType() != SMDSAbs_Face))
+ continue;
+ gp_XYZ normal;
+ SMESH_MeshAlgos::FaceNormal( anElem, normal, /*normalized=*/true );
+ MESSAGE("element " << ielem++ << " normal " << normal.X() << " " << normal.Y() << " " << normal.Z());
+ std::set<const SMDS_MeshNode*> nodesElem;
+ nodesElem.clear();
+ SMDS_ElemIteratorPtr nodeItr = anElem->nodesIterator();
+ while ( nodeItr->more() )
+ {
+ const SMDS_MeshNode* aNode = cast2Node(nodeItr->next());
+ nodesElem.insert(aNode);
+ }
+ std::set<const SMDS_MeshNode*>::iterator nodit = nodesElem.begin();
+ for (; nodit != nodesElem.end(); nodit++)
+ {
+ MESSAGE(" noeud ");
+ const SMDS_MeshNode* aNode = *nodit;
+ if ( !aNode || theNodesNot.find(aNode) != theNodesNot.end() )
+ continue;
+ if (alreadyCheckedNodes.find(aNode) != alreadyCheckedNodes.end())
+ continue;
+ alreadyCheckedNodes.insert(aNode);
+ SMDS_ElemIteratorPtr backElemItr = aNode->GetInverseElementIterator();
+ while ( backElemItr->more() )
+ {
+ MESSAGE(" backelem ");
+ const SMDS_MeshElement* curElem = backElemItr->next();
+ if (alreadyCheckedElems.find(curElem) != alreadyCheckedElems.end())
+ continue;
+ if (theElems.find(curElem) != theElems.end())
+ continue;
+ alreadyCheckedElems.insert(curElem);
+ double x=0, y=0, z=0;
+ int nb = 0;
+ SMDS_ElemIteratorPtr nodeItr2 = curElem->nodesIterator();
+ while ( nodeItr2->more() )
+ {
+ const SMDS_MeshNode* anotherNode = cast2Node(nodeItr2->next());
+ x += anotherNode->X();
+ y += anotherNode->Y();
+ z += anotherNode->Z();
+ nb++;
+ }
+ gp_XYZ p;
+ p.SetCoord( x/nb -aNode->X(),
+ y/nb -aNode->Y(),
+ z/nb -aNode->Z() );
+ MESSAGE(" check " << p.X() << " " << p.Y() << " " << p.Z());
+ if (normal*p > 0)
+ {
+ MESSAGE(" --- inserted")
+ theAffectedElems.insert( curElem );
+ }
+ else if (curElem->GetType() == SMDSAbs_Edge)
+ edgesToCheck.insert(curElem);
+ }
+ }
+ }
+ // --- add also edges lying on the set of faces (all nodes in alreadyCheckedNodes)
+ std::set<const SMDS_MeshElement*>::iterator eit = edgesToCheck.begin();
+ for( ; eit != edgesToCheck.end(); eit++)
+ {
+ bool onside = true;
+ const SMDS_MeshElement* anEdge = *eit;
+ SMDS_ElemIteratorPtr nodeItr = anEdge->nodesIterator();
+ while ( nodeItr->more() )
+ {
+ const SMDS_MeshNode* aNode = cast2Node(nodeItr->next());
+ if (alreadyCheckedNodes.find(aNode) == alreadyCheckedNodes.end())
+ {
+ onside = false;
+ break;
+ }
+ }
+ if (onside)
+ {
+ MESSAGE(" --- edge onside inserted")
+ theAffectedElems.insert(anEdge);
+ }
+ }
}
-
- // iterates on indicated elements and get elements by back references from their nodes
- TIDSortedElemSet::const_iterator elemItr = theElems.begin();
- for ( ; elemItr != theElems.end(); ++elemItr )
+ else
{
- SMDS_MeshElement* anElem = (SMDS_MeshElement*)*elemItr;
- if (!anElem)
- continue;
+ const double aTol = Precision::Confusion();
+ auto_ptr< BRepClass3d_SolidClassifier> bsc3d;
+ auto_ptr<_FaceClassifier> aFaceClassifier;
+ if ( theShape.ShapeType() == TopAbs_SOLID )
+ {
+ bsc3d.reset( new BRepClass3d_SolidClassifier(theShape));;
+ bsc3d->PerformInfinitePoint(aTol);
+ }
+ else if (theShape.ShapeType() == TopAbs_FACE )
+ {
+ aFaceClassifier.reset( new _FaceClassifier(TopoDS::Face(theShape)));
+ }
- SMDS_ElemIteratorPtr nodeItr = anElem->nodesIterator();
- while ( nodeItr->more() )
+ // iterates on indicated elements and get elements by back references from their nodes
+ TIDSortedElemSet::const_iterator elemItr = theElems.begin();
+ int ielem = 1;
+ for ( ; elemItr != theElems.end(); ++elemItr )
{
- const SMDS_MeshNode* aNode = cast2Node(nodeItr->next());
- if ( !aNode || theNodesNot.find(aNode) != theNodesNot.end() )
+ MESSAGE("element " << ielem++);
+ SMDS_MeshElement* anElem = (SMDS_MeshElement*)*elemItr;
+ if (!anElem)
continue;
- SMDS_ElemIteratorPtr backElemItr = aNode->GetInverseElementIterator();
- while ( backElemItr->more() )
+ SMDS_ElemIteratorPtr nodeItr = anElem->nodesIterator();
+ while ( nodeItr->more() )
{
- const SMDS_MeshElement* curElem = backElemItr->next();
- if ( curElem && theElems.find(curElem) == theElems.end() &&
- ( bsc3d.get() ?
- isInside( curElem, *bsc3d, aTol ) :
- isInside( curElem, *aFaceClassifier, aTol )))
- theAffectedElems.insert( curElem );
+ MESSAGE(" noeud ");
+ const SMDS_MeshNode* aNode = cast2Node(nodeItr->next());
+ if ( !aNode || theNodesNot.find(aNode) != theNodesNot.end() )
+ continue;
+ SMDS_ElemIteratorPtr backElemItr = aNode->GetInverseElementIterator();
+ while ( backElemItr->more() )
+ {
+ MESSAGE(" backelem ");
+ const SMDS_MeshElement* curElem = backElemItr->next();
+ if ( curElem && theElems.find(curElem) == theElems.end() &&
+ ( bsc3d.get() ?
+ isInside( curElem, *bsc3d, aTol ) :
+ isInside( curElem, *aFaceClassifier, aTol )))
+ theAffectedElems.insert( curElem );
+ }
}
}
}
for ( TopExp_Explorer vert(F,TopAbs_VERTEX); !uvOK && vert.More(); vert.Next() )
uvOK = ( V == vert.Current() );
if ( !uvOK ) {
-#ifdef _DEBUG_
MESSAGE ( "SMESH_MesherHelper::GetNodeUV(); Vertex " << vertexID
- << " not in face " << GetMeshDS()->ShapeToIndex( F ) );
-#endif
+ << " not in face " << GetMeshDS()->ShapeToIndex( F ) );
// get UV of a vertex closest to the node
double dist = 1e100;
gp_Pnt pn = XYZ( n );
}
Quantity_Parameter U = projector->LowerDistanceParameter();
u = double( U );
+ MESSAGE(" f " << f << " l " << l << " u " << u);
curvPnt = curve->Value( u );
dist = nodePnt.Distance( curvPnt );
if ( distXYZ ) {
}
if (( u < f-tol || u > l+tol ) && force )
{
+ MESSAGE("u < f-tol || u > l+tol ; u " << u << " f " << f << " l " << l);
// node is on vertex but is set on periodic but trimmed edge (issue 0020890)
try
{
}
}
}
-
* The key of the map is a normalized parameter of each
* base node on theBaseSide. Edges in theBaseSide must be sequenced.
* This method works in supposition that nodes on the face
- * forms a rectangular grid and elements can be quardrangles or triangles
+ * forms a structured grid and elements can be quardrangles or triangles
*/
static bool LoadNodeColumns(TParam2ColumnMap & theParam2ColumnMap,
const TopoDS_Face& theFace,
const SMDS_MeshElement * elt = ite->next();
//MESSAGE( " RM elt: "<<elt->GetID()<<" ( "<<elt->NbNodes()<<" )" );
//meshDS->RemoveElement(elt);
- meshDS->RemoveFreeElement(elt, subMeshDS);
+ meshDS->RemoveFreeElement(elt, 0);
}
SMDS_NodeIteratorPtr itn = subMeshDS->GetNodes();
const SMDS_MeshNode * node = itn->next();
//MESSAGE( " RM node: "<<node->GetID());
if ( node->NbInverseElements() == 0 )
- meshDS->RemoveFreeNode(node, subMeshDS);
+ meshDS->RemoveFreeNode(node, 0);
else // for StdMeshers_CompositeSegment_1D: node in one submesh, edge in another
meshDS->RemoveNode(node);
}
+ subMeshDS->Clear();
}
}
}
../MEDWrapper/Factory/libMEDWrapper.la \
../MEDWrapper/Base/libMEDWrapperBase.la \
../MEDWrapper/V2_2/libMEDWrapper_V2_2.la \
- $(KERNEL_LDFLAGS) -lSalomeLifeCycleCORBA -lSalomeNS -lOpUtil -lSALOMEBasics \
+ $(KERNEL_LDFLAGS) -lSalomeLifeCycleCORBA -lSalomeNS -lOpUtil -lSALOMEBasics -lSalomeContainer -lSalomeHDFPersist -lSalomeGenericObj \
+ -lRegistry -lResourcesManager -lSalomeResourcesManager -lSalomeNotification \
-lSalomeIDLKernel -lSALOMELocalTrace \
$(GEOM_LDFLAGS) -lNMTDS -lSalomeIDLGEOM \
$(CAS_KERNEL)
+
SMESHClientBin_CPPFLAGS = \
$(libSMESHClient_la_CPPFLAGS)
set<SMESHDS_GroupBase*>::iterator GrIt = myGroups.begin();
for (; GrIt != myGroups.end(); GrIt++) {
SMESHDS_Group* group = dynamic_cast<SMESHDS_Group*>(*GrIt);
- if (!group || group->IsEmpty()) continue;
- group->SMDSGroup().Remove(n);
+ if (group && !group->IsEmpty())
+ group->SMDSGroup().Remove(n);
}
}
if (!hasConstructionEdges() && !hasConstructionFaces())
{
SMESHDS_SubMesh* subMesh=0;
- map<int,SMESHDS_SubMesh*>::iterator SubIt = myShapeIndexToSubMesh.begin();
- for ( ; !subMesh && SubIt != myShapeIndexToSubMesh.end(); SubIt++ )
- if (!SubIt->second->IsComplexSubmesh() && SubIt->second->Contains( elt ))
+ if ( elt->getshapeId() > 0 )
+ {
+ map<int,SMESHDS_SubMesh*>::iterator SubIt = myShapeIndexToSubMesh.find( elt->getshapeId() );
+ if ( SubIt != myShapeIndexToSubMesh.end() )
subMesh = SubIt->second;
- //MESSAGE("subMesh " << elt->getshapeId());
+ }
RemoveFreeElement( elt, subMesh, true);
return;
}
//function : AddElement
//purpose :
//=======================================================================
+
void SMESHDS_SubMesh::AddElement(const SMDS_MeshElement * ME)
{
if (!IsComplexSubmesh())
AddNode( static_cast< const SMDS_MeshNode* >( ME ));
return;
}
- //MESSAGE("in " << myIndex << " AddElement "<< ME->GetID());
int oldShapeId = ME->getshapeId();
if ( oldShapeId > 0 )
{
//function : RemoveElement
//purpose :
//=======================================================================
+
bool SMESHDS_SubMesh::RemoveElement(const SMDS_MeshElement * ME, bool isElemDeleted)
{
if (!ME)
- {
- MESSAGE("-----------------> Remove Null Element " << isElemDeleted);
- return false;
- }
- //MESSAGE("-----------------> RemoveElement "<< ME->GetID() << " " << isElemDeleted);
+ {
+ MESSAGE("-----------------> Remove Null Element " << isElemDeleted);
+ return false;
+ }
if (!IsComplexSubmesh())
- {
- if ( ME->getshapeId() != myIndex )
- return false;
- int idInSubShape = ME->getIdInShape();
- //MESSAGE("in "<< myIndex << " RemoveElement " << ME->GetID() << " " << idInSubShape << " " << myUnusedIdElements);
- SMDS_MeshElement* elem = (SMDS_MeshElement*) (ME);
- elem->setShapeId(0);
- elem->setIdInShape(-1);
- if ((idInSubShape >= 0) && (idInSubShape < myElements.size()))
- {
- myElements[idInSubShape] = 0; // this vector entry is no more used
- myUnusedIdElements++;
- return true;
- }
+ {
+ if ( ME->getshapeId() != myIndex )
return false;
- // }
+ int idInSubShape = ME->getIdInShape();
+ SMDS_MeshElement* elem = (SMDS_MeshElement*) (ME);
+ elem->setShapeId(0);
+ elem->setIdInShape(-1);
+ if ((idInSubShape >= 0) && (idInSubShape < myElements.size()))
+ {
+ myElements[idInSubShape] = 0; // this vector entry is no more used
+ myUnusedIdElements++;
+ return true;
}
+ return false;
+ }
MESSAGE("Try to remove an element from a complex submesh ");
return false;
}
bool SMESHDS_SubMesh::RemoveNode(const SMDS_MeshNode * N, bool isNodeDeleted)
{
if (!IsComplexSubmesh())
- {
- // if (!isNodeDeleted) // alive node has valid ID and can be found
- // {
- if ( N->getshapeId() != myIndex )
- return false;
- int idInSubShape = N->getIdInShape();
- //int shapeId = N->getshapeId();
- //MESSAGE("in "<< myIndex << " RemoveNode " << shapeId << " " << idInSubShape << " " << N->GetID());
- SMDS_MeshNode* node = (SMDS_MeshNode*) (N);
- node->setShapeId(0);
- node->setIdInShape(-1);
- if ((idInSubShape >= 0) && (idInSubShape < myNodes.size()))
- {
- myNodes[idInSubShape] = 0; // this vector entry is no more used
- myUnusedIdNodes++;
- return true;
- }
+ {
+ if ( N->getshapeId() != myIndex )
return false;
- // }
+ int idInSubShape = N->getIdInShape();
+ SMDS_MeshNode* node = (SMDS_MeshNode*) (N);
+ node->setShapeId(0);
+ node->setIdInShape(-1);
+ if ((idInSubShape >= 0) && (idInSubShape < myNodes.size()))
+ {
+ myNodes[idInSubShape] = 0; // this vector entry is no more used
+ myUnusedIdNodes++;
+ return true;
}
+ return false;
+ }
MESSAGE("Try to remove a node from a complex submesh");
return false;
}
//function : NbElements
//purpose :
//=======================================================================
+
int SMESHDS_SubMesh::NbElements() const
{
- //MESSAGE(this << " NbElements " << IsComplexSubmesh() << " " << myElements.size() - myUnusedIdElements);
if ( !IsComplexSubmesh() )
return myElements.size() - myUnusedIdElements;
int SMESHDS_SubMesh::NbNodes() const
{
- //MESSAGE(this << " NbNodes " << IsComplexSubmesh() << " " << myNodes.size() - myUnusedIdNodes);
if ( !IsComplexSubmesh() )
return myNodes.size() - myUnusedIdNodes;
clearVector( myNodes );
myUnusedIdNodes = 0;
myUnusedIdElements = 0;
- SMESHDS_SubMeshIteratorPtr sub = GetSubMeshIterator();
- while ( sub->more() ) {
- if ( SMESHDS_SubMesh* sm = (SMESHDS_SubMesh*) sub->next())
- sm->Clear();
+ if ( NbSubMeshes() > 0 )
+ {
+ SMESHDS_SubMeshIteratorPtr sub = GetSubMeshIterator();
+ while ( sub->more() ) {
+ if ( SMESHDS_SubMesh* sm = (SMESHDS_SubMesh*) sub->next())
+ sm->Clear();
+ }
}
}
{
int c = NbNodes();
int d = NbElements();
- //cerr << "SMESHDS_SubMesh::NbNodes " << c << endl;
- //cerr << "SMESHDS_SubMesh::NbElements " << d << endl;
return c+d;
}
void SMESHDS_SubMesh::compactList()
{
- //MESSAGE("compactList old: nodes " << myNodes.size() << " elements " << myElements.size());
- //stringstream a;
- //stringstream b;
- //stringstream c;
- //stringstream d;
-
- std::vector<const SMDS_MeshElement*> newElems;
- newElems.clear();
- for (int i = 0; i < myElements.size(); i++)
- if (myElements[i])
+ if ( myUnusedIdElements > 0 )
+ {
+ std::vector<const SMDS_MeshElement*> newElems;
+ newElems.reserve( myElements.size() - myUnusedIdElements );
+ for (size_t i = 0; i < myElements.size(); i++)
+ if (myElements[i])
{
SMDS_MeshElement* elem = (SMDS_MeshElement*)myElements[i];
elem->setIdInShape(newElems.size());
newElems.push_back(elem);
- //a << elem->GetID() << " ";
- //b << elem->GetID() << " ";
}
- //else
- // a << "_ ";
- myElements.swap(newElems);
- myUnusedIdElements = 0;
- //MESSAGE("in " << myIndex << " oldElems " << a.str());
- //MESSAGE("in " << myIndex << " newElems " << b.str());
+ myElements.swap(newElems);
+ myUnusedIdElements = 0;
+ }
- std::vector<const SMDS_MeshNode*> newNodes;
- newNodes.clear();
- for (int i = 0; i < myNodes.size(); i++)
- if (myNodes[i])
+ if ( myUnusedIdNodes > 0 )
+ {
+ std::vector<const SMDS_MeshNode*> newNodes;
+ newNodes.reserve( myNodes.size() - myUnusedIdNodes );
+ for (size_t i = 0; i < myNodes.size(); i++)
+ if (myNodes[i])
{
SMDS_MeshNode* node = (SMDS_MeshNode*)myNodes[i];
node->setIdInShape(newNodes.size());
newNodes.push_back(node);
- //c << node->GetID() << " ";
- //d << node->GetID() << " ";
}
- //else
- // c << "_ ";
- myNodes.swap(newNodes);
- myUnusedIdNodes = 0;
- //MESSAGE("in " << myIndex << " oldNodes " << c.str());
- //MESSAGE("in " << myIndex << " newNodes " << d.str());
- //MESSAGE("compactList new: nodes " << myNodes.size() << " elements " << myElements.size());
+ myNodes.swap(newNodes);
+ myUnusedIdNodes = 0;
+ }
}
nodist_salomeres_DATA= \
SMESH_images.qm \
SMESH_msg_en.qm \
- SMESH_msg_fr.qm
+ SMESH_msg_fr.qm \
+ SMESH_msg_ja.qm
SMESH::SetName( aMeshSO, QFileInfo(filename).fileName() );
anEntryList.append( aMeshSO->GetID().c_str() );
-
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- aMeshes[i]->UnRegister();
}
else {
isEmpty = true;
}
}
- void AutoColor(){
+ void AutoColor()
+ {
SALOME_ListIO selected;
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
if( !app )
if( aMainObject->_is_nil() )
return;
+ SUIT_OverrideCursor wc;
+
aMainObject->SetAutoColor( true ); // mesh groups are re-colored here
QList<SALOMEDS::Color> aReservedColors;
SALOMEDS::Color aColor = SMESHGUI::getUniqueColor( aReservedColors );
aReservedColors.append( aColor );
#endif // SIMPLE_AUTOCOLOR
+ aGroupObject->SetColor( aColor );
_PTR(SObject) aGroupSObject = SMESH::FindSObject(aGroupObject);
if (aGroupSObject) {
aSel->selectedObjects( selected );
if(selected.Extent()){
- Handle(SALOME_InteractiveObject) anIObject = selected.First();
- _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
- _PTR(SObject) aSObj = aStudy->FindObjectID(anIObject->getEntry());
- if (aSObj) {
- if ( aStudy->GetUseCaseBuilder()->SortChildren( aSObj, true/*AscendingOrder*/ ) ) {
- SMESHGUI::GetSMESHGUI()->updateObjBrowser();
- }
- }
+ Handle(SALOME_InteractiveObject) anIObject = selected.First();
+ _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+ _PTR(SObject) aSObj = aStudy->FindObjectID(anIObject->getEntry());
+ if (aSObj) {
+ if ( aStudy->GetUseCaseBuilder()->SortChildren( aSObj, true/*AscendingOrder*/ ) ) {
+ SMESHGUI::GetSMESHGUI()->updateObjBrowser();
+ }
+ }
}
}
}
aSO = aRefSObject; // Delete main Object instead of reference
listSO.push_back( aSO );
- std::list< _PTR(SObject) >::iterator itSO = listSO.begin();
+ std::list< _PTR(SObject) >::iterator itSO = --listSO.end();
for ( ; itSO != listSO.end(); ++itSO ) {
_PTR(ChildIterator) it = aStudy->NewChildIterator( *itSO );
for (it->InitEx(false); it->More(); it->Next())
if ( !SO ) continue;
std::string anEntry = SO->GetID();
- /** Erase graphical object **/
+ /** Erase graphical object and remove all its data **/
if(SO->FindAttribute(anAttr, "AttributeIOR")) {
SMESH::RemoveVisualObjectWithActors( anEntry.c_str(), true);
- // ViewManagerList aViewMenegers = anApp->viewManagers();
- // ViewManagerList::const_iterator it = aViewMenegers.begin();
- // for( ; it != aViewMenegers.end(); it++) {
- // SUIT_ViewManager* vm = *it;
- // int nbSf = vm ? vm->getViewsCount() : 0;
- // if(vm) {
- // QVector<SUIT_ViewWindow*> aViews = vm->getViews();
- // for(int i = 0; i < nbSf; i++){
- // SUIT_ViewWindow *sf = aViews[i];
- // if(SMESH_Actor* anActor = SMESH::FindActorByEntry(sf,anEntry.c_str())){
- // SMESH::RemoveActor(sf,anActor);
- // }
- // }
- // }
- // }
}
/** Remove an object from data structures **/
SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH::SObjectToObject( SO ));
*/
//=============================================================================
bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh,
- int* entities, bool* limitExceeded )
+ int* entities, bool* limitExceeded, int* hidden )
{
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
if ( !resMgr )
long requestedSize = theMesh->NbElements();
*entities = SMESH_Actor::eAllEntity;
+ *hidden = 0;
bool exceeded = updateLimit > 0 && requestedSize > updateLimit;
long total = 0;
if ( nbOdElems > 0 ) {
- if ( total + nbOdElems > updateLimit )
+ if ( total + nbOdElems > updateLimit ) {
*entities = *entities & ~SMESH_Actor::e0DElements;
+ *hidden = *hidden | SMESH_Actor::e0DElements;
+ }
else
exceeded = false;
}
total += nbOdElems;
if ( nbEdges > 0 ) {
- if ( total + nbEdges > updateLimit )
+ if ( total + nbEdges > updateLimit ) {
*entities = *entities & ~SMESH_Actor::eEdges;
+ *hidden = *hidden | SMESH_Actor::eEdges;
+ }
else
exceeded = false;
}
total += nbEdges;
if ( nbFaces > 0 ) {
- if ( total + nbFaces > updateLimit )
+ if ( total + nbFaces > updateLimit ) {
*entities = *entities & ~SMESH_Actor::eFaces;
+ *hidden = *hidden | SMESH_Actor::eFaces;
+ }
else
exceeded = false;
}
total += nbFaces;
if ( nbVolumes > 0 ) {
- if ( total + nbVolumes > updateLimit )
+ if ( total + nbVolumes > updateLimit ) {
*entities = *entities & ~SMESH_Actor::eVolumes;
+ *hidden = *hidden | SMESH_Actor::eVolumes;
+ }
else
exceeded = false;
}
total += nbVolumes;
if ( nbBalls > 0 ) {
- if ( total + nbBalls > updateLimit )
+ if ( total + nbBalls > updateLimit ) {
*entities = *entities & ~SMESH_Actor::eBallElem;
+ *hidden = *hidden | SMESH_Actor::eBallElem;
+ }
else
exceeded = false;
}
if (vtkwnd) {
SALOME_ListIteratorOfListIO It( to_process );
for ( ; It.More(); It.Next()) {
- MESSAGE("---");
+ MESSAGE("---");
Handle(SALOME_InteractiveObject) IOS = It.Value();
if (IOS->hasEntry()) {
- MESSAGE("---");
+ MESSAGE("---");
if (!SMESH::UpdateView(anAction, IOS->getEntry())) {
SMESHGUI::GetSMESHGUI()->EmitSignalVisibilityChanged();
break; // PAL16774 (Crash after display of many groups)
// PAL13338 + PAL15161 -->
if ( ( theCommandID==301 || theCommandID==302 ) && !checkLock(aStudy)) {
- MESSAGE("anAction = SMESH::eDisplayOnly");
+ MESSAGE("anAction = SMESH::eDisplayOnly");
SMESH::UpdateView();
SMESHGUI::GetSMESHGUI()->EmitSignalVisibilityChanged();
}
}
case 501:
case 502:
+ case 503:
+ case 504:
+ case 505:
{
- int page = theCommandID == 501 ? SMESHGUI_MeasureDlg::MinDistance : SMESHGUI_MeasureDlg::BoundingBox;
+ int page = SMESHGUI_MeasureDlg::MinDistance;
+ if ( theCommandID == 502 )
+ page = SMESHGUI_MeasureDlg::BoundingBox;
+ else if ( theCommandID == 503 )
+ page = SMESHGUI_MeasureDlg::Length;
+ else if ( theCommandID == 504 )
+ page = SMESHGUI_MeasureDlg::Area;
+ else if ( theCommandID == 505 )
+ page = SMESHGUI_MeasureDlg::Volume;
+
EmitSignalDeactivateDialog();
SMESHGUI_MeasureDlg* dlg = new SMESHGUI_MeasureDlg( SMESHGUI::desktop(), page );
dlg->show();
createSMESHAction( 501, "MEASURE_MIN_DIST", "ICON_MEASURE_MIN_DIST" );
createSMESHAction( 502, "MEASURE_BND_BOX", "ICON_MEASURE_BND_BOX" );
+ createSMESHAction( 503, "MEASURE_LENGTH", "ICON_MEASURE_LENGTH" );
+ createSMESHAction( 504, "MEASURE_AREA", "ICON_MEASURE_AREA" );
+ createSMESHAction( 505, "MEASURE_VOLUME", "ICON_MEASURE_VOLUME" );
createSMESHAction( 300, "HIDE" );
createSMESHAction( 301, "SHOW" );
addId = createMenu( tr( "MEN_ADD" ), modifyId, 402 ),
removeId = createMenu( tr( "MEN_REMOVE" ), modifyId, 403 ),
renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ),
- transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 );
+ transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 ),
+ basicPropId = createMenu( tr( "MEN_BASIC_PROPERTIES" ), measureId, -1, 10 );
//createMenu( 111, importId, -1 );
createMenu( 112, importId, -1 );
createMenu( 501, measureId, -1 );
createMenu( 502, measureId, -1 );
+ createMenu( 503, basicPropId, -1 );
+ createMenu( 504, basicPropId, -1 );
+ createMenu( 505, basicPropId, -1 );
createMenu( 214, viewId, -1 );
// ----- create toolbars --------------
bool isActiveStudyLocked();
static bool automaticUpdate(unsigned int requestedSize = 0, bool* limitExceeded = 0);
- static bool automaticUpdate( SMESH::SMESH_Mesh_ptr, int*, bool* );
+ static bool automaticUpdate( SMESH::SMESH_Mesh_ptr, int*, bool*, int* );
static void Modified( bool = true );
#include CORBA_SERVER_HEADER(SMESH_Mesh)
#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
#define SPACING 6
#define MARGIN 11
return false;
// get a mesh
- SMESH::SMESH_IDSource_var meshObject;
- SMESH::SMESH_Mesh_var mesh;
+ SMESH::SMESH_IDSource_wrap meshObject;
+ SMESH::SMESH_Mesh_var mesh;
if ( !myIO.IsNull() )
{
CORBA::Object_var obj = SMESH::IObjectToObject( myIO );
meshObject = SMESH::SMESH_IDSource::_narrow( obj );
if ( !meshObject->_is_nil() )
+ {
mesh = meshObject->GetMesh();
+ meshObject->Register();
+ }
}
if ( mesh->_is_nil() )
{
#define SPACING 6
#define MARGIN 11
-//To disable automatic genericobj management, the following line should be commented.
-//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
-#define WITHGENERICOBJ
-
//=================================================================================
// name : SMESHGUI_BuildCompoundDlg
// Purpose :
SMESHGUI::Modified();
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- if (!CORBA::is_nil(aCompoundMesh))
- aCompoundMesh->UnRegister();
-
return true;
}
return false;
bool limitExceeded;
long limitSize = resMgr->integerValue( "SMESH", "update_limit", 500000 );
int entities = SMESH_Actor::eAllEntity;
+ int hidden = 0;
if ( !memoryLack )
{
- if ( getSMESHGUI()->automaticUpdate( myMesh, &entities, &limitExceeded ) )
+ if ( getSMESHGUI()->automaticUpdate( myMesh, &entities, &limitExceeded, &hidden ) )
{
try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
#endif
SMESH_Actor *anActor = SMESH::FindActorByObject( myMesh );
if ( !anActor ) anActor = SMESH::CreateActor( aMeshSObj->GetStudy(), aMeshSObj->GetID().c_str(), true );
-
- anActor->SetEntityMode( entities );
- SMESH::DisplayActor( SMESH::GetActiveWindow(), anActor );
-
+ if ( anActor ) // actor is not created for an empty mesh
+ {
+ anActor->SetEntityMode( entities );
+ SMESH::DisplayActor( SMESH::GetActiveWindow(), anActor );
+ }
SMESH::Update(myIObject, true);
if ( limitExceeded )
{
+ QStringList hiddenMsg;
+ if ( hidden & SMESH_Actor::e0DElements ) hiddenMsg << tr( "SMESH_ELEMS0D" );
+ if ( hidden & SMESH_Actor::eEdges ) hiddenMsg << tr( "SMESH_EDGES" );
+ if ( hidden & SMESH_Actor::eFaces ) hiddenMsg << tr( "SMESH_FACES" );
+ if ( hidden & SMESH_Actor::eVolumes ) hiddenMsg << tr( "SMESH_VOLUMES" );
+ if ( hidden & SMESH_Actor::eBallElem ) hiddenMsg << tr( "SMESH_BALLS" );
SUIT_MessageBox::warning( desktop(),
tr( "SMESH_WRN_WARNING" ),
- tr( "SMESH_WRN_SIZE_INC_LIMIT_EXCEEDED" ).arg( myMesh->NbElements() ).arg( limitSize ) );
+ tr( "SMESH_WRN_SIZE_INC_LIMIT_EXCEEDED" ).arg( myMesh->NbElements() ).arg( limitSize ).arg( hiddenMsg.join(", ") ) );
}
}
catch (...) {
#define SPACING 6
#define MARGIN 11
-//To disable automatic genericobj management, the following line should be commented.
-//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
-#define WITHGENERICOBJ
-
//================================================================================
/*!
try
{
SUIT_OverrideCursor aWaitCursor;
- SMESH::SMESH_IDSource_var aPartToCopy;
+ SMESH::SMESH_IDSource_wrap aPartToCopy;
if ( myIdSourceCheck->isChecked())
{
aPartToCopy = mySelectedObject;
+ aPartToCopy->Register();
}
else
{
if( !newMesh->_is_nil() )
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( newMesh ) )
anEntryList.append( aSObject->GetID().c_str() );
-#ifdef WITHGENERICOBJ
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- newMesh->UnRegister();
-#endif
- } catch (...) {
+ }
+ catch (...) {
}
mySMESHGUI->updateObjBrowser(true);
connect(SelectPathMeshButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(SelectStartPointButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(SelectBasePointButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+ connect(BasePointGrp, SIGNAL(toggled(bool)), this, SLOT(SetEditCurrentArgument()));
connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
return;
QString aString;
- int aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myMeshActor->getIO(), aString);
+ int aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
// return if more than one node is selected
if (aNbUnits != 1)
return;
void SMESHGUI_ExtrusionAlongPathDlg::SetEditCurrentArgument()
{
QToolButton* send = (QToolButton*)sender();
+ if ( sender() == BasePointGrp )
+ send = SelectBasePointButton;
if (send != SelectElementsButton &&
send != SelectPathMeshButton &&
send != SelectStartPointButton &&
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
aViewWindow->SetSelectionMode(NodeSelection);
- SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter(SMESH::MESHorSUBMESH);
- SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter(SMESH::GROUP);
+ SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter(SMESH::IDSOURCE);
SMESH_NumberFilter* aVertexFilter = new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE,
-1, TopAbs_VERTEX);
QList<SUIT_SelectionFilter*> aListOfFilters;
if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
- if (aSmeshGroupFilter) aListOfFilters.append(aSmeshGroupFilter);
if (aVertexFilter) aListOfFilters.append(aVertexFilter);
mySelectionMgr->installFilter(new SMESH_LogicalFilter
- (aListOfFilters, SMESH_LogicalFilter::LO_OR));
+ (aListOfFilters, SMESH_LogicalFilter::LO_OR, true));
}
if (myEditCurrentArgument && !myEditCurrentArgument->hasFocus())
SMESH::SMESH_MeshEditor::Extrusion_Error retVal;
SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditPreviewer();
bool NeedGroups = false;
- SMESH::ElementType ElemType = SMESH::FACE;
- if( GetConstructorId() == 0 )
- ElemType = SMESH::EDGE;
+ SMESH::ElementType ElemType = ( GetConstructorId() == 0 ) ? SMESH::EDGE : SMESH::FACE;
if( !MeshCheck->isChecked() ) {
aMeshEditor->ExtrusionAlongPathX(anElementsId, myPath, aNodeStart, AnglesGrp->isChecked(),
anAngles, LinearAnglesCheck->isChecked(),
BasePointGrp->isChecked(), aBasePoint,
NeedGroups, ElemType, retVal);
}
-
- wc.suspend();
+
if( retVal == SMESH::SMESH_MeshEditor::EXTR_OK ) {
SMESH::MeshPreviewStruct_var aMeshPreviewStruct = aMeshEditor->GetPreviewData();
mySimulation->SetData(aMeshPreviewStruct._retn());
aCriterion != SMESH::FT_OverConstrainedFace &&
aCriterion != SMESH::FT_OverConstrainedVolume)
||
- aCriterion == SMESH::FT_CoplanarFaces);
+ aCriterion == SMESH::FT_CoplanarFaces ||
+ aCriterion == SMESH::FT_EqualNodes);
if (!myAddWidgets.contains(anItem))
{
{
isThresholdEditable = true;
}
+ if ( !isThresholdEditable )
+ {
+ aTable->setItem( row, 2, new QTableWidgetItem() );
+ }
aTable->setEditable( isThresholdEditable, row, 2);
aCriteria[ i ] = aCriterion;
}
+ if ( !myFilter[ theType ]->_is_nil() )
+ myFilter[ theType ]->UnRegister();
myFilter[ theType ] = aFilterMgr->CreateFilter();
myFilter[ theType ]->SetCriteria(aCriteria.inout());
void SMESHGUI_FilterDlg::SetFilter(SMESH::Filter_var filter, int type)
{
+ if ( !filter->_is_nil() )
+ filter->Register();
+ if ( !myFilter[ type ]->_is_nil() )
+ myFilter[ type ]->UnRegister();
+
myFilter[ type ] = filter;
}
+//================================================================================
+/*!
+ * \brief call UnRegister() for myFilter's
+ */
+//================================================================================
+
+void SMESHGUI_FilterDlg::UnRegisterFilters()
+{
+ QMap< int, SMESH::Filter_var >::iterator i_f = myFilter.begin();
+ for ( ; i_f != myFilter.end(); ++i_f )
+ if ( !i_f.value()->_is_nil() )
+ i_f.value()->UnRegister();
+ myFilter.clear();
+}
+
//=======================================================================
// name : SMESHGUI_FilterDlg::insertFilterInViewer
// Purpose : Insert filter in viewer
SMESH::Filter_var GetFilter() const;
void SetFilter(SMESH::Filter_var filter, int type);
+ void UnRegisterFilters();
signals:
#include <SMESH_TypeFilter.hxx>
#include <SMESH_Actor.h>
-#include <SMESH_ActorUtils.h>
+//#include <SMESH_ActorUtils.h>
#include <SMESH_LogicalFilter.hxx>
// SALOME GEOM includes
QStringList anEntryList;
SMESH::SMESH_GroupBase_var resultGroup;
- bool isCreation;
+ bool isCreation, isConversion = false;
if (myGrpTypeId == 0) // standalone
{
else
myGroup = myMesh->ConvertToStandalone( myGroupOnGeom );
- myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
+ myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
myGroupOnFilter = SMESH::SMESH_GroupOnFilter::_nil();
+ isConversion = true;
}
}
resultGroup->SetName(myName->text().toLatin1().data());
if ( aMeshGroupSO )
+ {
if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aMeshGroupSO->GetID().c_str())) {
+ if ( isConversion ) { // need to reset TVisualObj and actor
+ Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
+ SMESH::RemoveVisualObjectWithActors( anIO->getEntry(), true );
+ SMESH::Update( anIO,true);
+ myActorsList.clear();
+ anActor = SMESH::FindActorByEntry( anIO->getEntry() );
+ if ( !anActor ) return false;
+ myActorsList.append( anActor );
+ }
anActor->setName(myName->text().toLatin1().data());
QColor c;
int delta;
case grpBallSelection: anActor->SetBallColor( aColor.R, aColor.G, aColor.B ); break;
case grpEdgeSelection: anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B ); break;
case grpVolumeSelection:
- SMESH::GetColor("SMESH", "volume_color", c , delta, "255,0,170|-100");
- anActor->SetVolumeColor( aColor.R, aColor.G, aColor.B, delta ); break;
- break;
+ SMESH::GetColor("SMESH", "volume_color", c , delta, "255,0,170|-100");
+ anActor->SetVolumeColor( aColor.R, aColor.G, aColor.B, delta ); break;
+ break;
case grpFaceSelection:
default:
- SMESH::GetColor("SMESH", "fill_color", c , delta, "0,170,255|-100");
- anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta ); break;
- break;
+ SMESH::GetColor("SMESH", "fill_color", c , delta, "0,170,255|-100");
+ anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta ); break;
+ break;
}
}
+ }
}
SMESHGUI::Modified();
mySMESHGUI->updateObjBrowser(true);
if ( onApply() )
reject();
setIsApplyAndClose( false );
+
+ if ( myFilterDlg ) myFilterDlg->UnRegisterFilters();
}
//=================================================================================
mySMESHGUI->ResetState();
QDialog::reject();
+
+ if ( myFilterDlg ) myFilterDlg->UnRegisterFilters();
}
//=================================================================================
create( false, theHypName, parent, obj, slot );
}
-void SMESHGUI_GenericHypothesisCreator::create( bool isAlgo,
+void SMESHGUI_GenericHypothesisCreator::create( bool isAlgo,
const QString& theHypName,
QWidget* theParent, QObject* obj, const QString& slot )
{
if (isAlgo) {
SMESH::SMESH_Hypothesis_var anAlgo =
SMESH::CreateHypothesis( hypType(), theHypName, isAlgo );
- if (!CORBA::is_nil(anAlgo))
- anAlgo->UnRegister();
+ anAlgo.out(); // avoid unused variable warning
}
else {
SMESH::SMESH_Hypothesis_var aHypothesis =
SMESH::CreateHypothesis( hypType(), theHypName, false );
editHypothesis( aHypothesis.in(), theHypName, theParent, obj, slot );
- if (!CORBA::is_nil(aHypothesis))
- aHypothesis->UnRegister();
}
}
void SMESHGUI_GenericHypothesisCreator::edit( SMESH::SMESH_Hypothesis_ptr theHypothesis,
- const QString& theHypName,
+ const QString& theHypName,
QWidget* theParent, QObject* obj, const QString& slot )
{
if( CORBA::is_nil( theHypothesis ) )
return;
- MESSAGE("Edition of hypothesis");
-
myIsCreate = false;
editHypothesis( theHypothesis, theHypName, theParent, obj, slot );
if ( !newMesh->_is_nil() ) {
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( newMesh ) )
theEntryList.append( aSObject->GetID().c_str() );
-#ifdef WITHGENERICOBJ
- newMesh->UnRegister();
-#endif
- }
- if ( !newGrp->_is_nil() ) {
-#ifdef WITHGENERICOBJ
- newGrp->UnRegister();
-#endif
}
ok = true;
void SMESHGUI_MinDistance::compute()
{
SUIT_OverrideCursor wc;
- SMESH::SMESH_IDSource_var s1;
- SMESH::SMESH_IDSource_var s2;
+ SMESH::SMESH_IDSource_wrap s1;
+ SMESH::SMESH_IDSource_wrap s2;
bool isOrigin = mySecond->checkedId() == OriginTgt;
// process first target
}
else {
s1 = myFirstSrc;
+ s1->Register();
}
}
}
else {
s2 = mySecondSrc;
+ s2->Register();
}
}
}
else {
srcList->length( mySrc.count() );
- for( int i = 0; i < mySrc.count(); i++ )
+ for( int i = 0; i < mySrc.count(); i++ ) {
srcList[i] = mySrc[i];
+ mySrc[i]->Register();
+ }
}
if ( srcList->length() > 0 ) {
// compute bounding box
int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 );
SMESH::Measurements_var measure = SMESHGUI::GetSMESHGen()->CreateMeasurements();
SMESH::Measure result = measure->BoundingBox( srcList.in() );
+ SALOME::UnRegister( srcList );
measure->UnRegister();
myXmin->setText( QString::number( result.minX, precision > 0 ? 'f' : 'g', qAbs( precision ) ) );
myXmax->setText( QString::number( result.maxX, precision > 0 ? 'f' : 'g', qAbs( precision ) ) );
erasePreview();
}
+/*!
+ \class SMESHGUI_BasicProperties
+ \brief basic properties measurement widget.
+
+ Widget to calculate length, area or volume for the selected object(s).
+*/
+
+/*!
+ \brief Constructor.
+ \param parent parent widget
+*/
+SMESHGUI_BasicProperties::SMESHGUI_BasicProperties( QWidget* parent )
+: QWidget( parent )
+{
+ // Property (length, area or volume)
+ QGroupBox* aPropertyGrp = new QGroupBox( tr( "PROPERTY" ), this );
+
+ QRadioButton* aLength = new QRadioButton( tr( "LENGTH" ), aPropertyGrp );
+ QRadioButton* anArea = new QRadioButton( tr( "AREA" ), aPropertyGrp );
+ QRadioButton* aVolume = new QRadioButton( tr( "VOLUME" ), aPropertyGrp );
+
+ myMode = new QButtonGroup( this );
+ myMode->addButton( aLength, Length );
+ myMode->addButton( anArea, Area );
+ myMode->addButton( aVolume, Volume );
+
+ QHBoxLayout* aPropertyLayout = new QHBoxLayout;
+ aPropertyLayout->addWidget( aLength );
+ aPropertyLayout->addWidget( anArea );
+ aPropertyLayout->addWidget( aVolume );
+
+ aPropertyGrp->setLayout( aPropertyLayout );
+
+ // Source object
+ QGroupBox* aSourceGrp = new QGroupBox( tr( "SOURCE_MESH_SUBMESH_GROUP" ), this );
+
+ mySource = new QLineEdit( aSourceGrp );
+ mySource->setReadOnly( true );
+
+ QHBoxLayout* aSourceLayout = new QHBoxLayout;
+ aSourceLayout->addWidget( mySource );
+
+ aSourceGrp->setLayout( aSourceLayout );
+
+ // Compute button
+ QPushButton* aCompute = new QPushButton( tr( "COMPUTE" ), this );
+
+ // Result of computation (length, area or volume)
+ myResultGrp = new QGroupBox( this );
+
+ myResult = new QLineEdit;
+ myResult->setReadOnly( true );
+
+ QHBoxLayout* aResultLayout = new QHBoxLayout;
+ aResultLayout->addWidget( myResult );
+
+ myResultGrp->setLayout( aResultLayout );
+
+ // Layout
+ QGridLayout* aMainLayout = new QGridLayout( this );
+ aMainLayout->setMargin( MARGIN );
+ aMainLayout->setSpacing( SPACING );
+
+ aMainLayout->addWidget( aPropertyGrp, 0, 0, 1, 2 );
+ aMainLayout->addWidget( aSourceGrp, 1, 0, 1, 2 );
+ aMainLayout->addWidget( aCompute, 2, 0 );
+ aMainLayout->addWidget( myResultGrp, 3, 0, 1, 2 );
+ aMainLayout->setColumnStretch( 1, 5 );
+ aMainLayout->setRowStretch( 4, 5 );
+
+ // Initial state
+ setMode( Length );
+
+ // Connections
+ connect( myMode, SIGNAL( buttonClicked( int ) ), this, SLOT( modeChanged( int ) ) );
+ connect( aCompute, SIGNAL( clicked() ), this, SLOT( compute() ) );
+
+ // Selection filter
+ QList<SUIT_SelectionFilter*> filters;
+ filters.append( new SMESH_TypeFilter( SMESH::MESHorSUBMESH ) );
+ filters.append( new SMESH_TypeFilter( SMESH::GROUP ) );
+ myFilter = new SMESH_LogicalFilter( filters, SMESH_LogicalFilter::LO_OR );
+}
+
+/*!
+ \brief Destructor
+*/
+SMESHGUI_BasicProperties::~SMESHGUI_BasicProperties()
+{
+}
+
+/*!
+ \brief Sets the measurement mode.
+ \param theMode the mode to set (length, area or volume meausurement)
+*/
+void SMESHGUI_BasicProperties::setMode( const Mode theMode )
+{
+ QRadioButton* aButton = qobject_cast<QRadioButton*>( myMode->button( theMode ) );
+ if ( aButton ) {
+ aButton->setChecked( true );
+ modeChanged( theMode );
+ }
+}
+
+/*!
+ \brief Setup the selection mode.
+*/
+void SMESHGUI_BasicProperties::updateSelection()
+{
+ LightApp_SelectionMgr* selMgr = SMESHGUI::selectionMgr();
+
+ disconnect( selMgr, 0, this, 0 );
+ selMgr->clearFilters();
+
+ SMESH::SetPointRepresentation( false );
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() ) {
+ aViewWindow->SetSelectionMode( ActorSelection );
+ }
+ selMgr->installFilter( myFilter );
+
+ connect( selMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( selectionChanged() ) );
+}
+
+/*!
+ \brief Deactivate widget
+*/
+void SMESHGUI_BasicProperties::deactivate()
+{
+ disconnect( SMESHGUI::selectionMgr(), 0, this, 0 );
+}
+
+/*!
+ \brief Called when selection is changed
+*/
+void SMESHGUI_BasicProperties::selectionChanged()
+{
+ SUIT_OverrideCursor wc;
+
+ SALOME_ListIO selected;
+ SMESHGUI::selectionMgr()->selectedObjects( selected );
+
+ if ( selected.Extent() == 1 ) {
+ Handle(SALOME_InteractiveObject) IO = selected.First();
+ SMESH::SMESH_IDSource_var obj = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
+ if ( !CORBA::is_nil( obj ) ) {
+ mySrc = obj;
+
+ QString aName;
+ SMESH::GetNameOfSelectedIObjects( SMESHGUI::selectionMgr(), aName );
+ mySource->setText( aName );
+ }
+ }
+
+ clear();
+}
+
+/*!
+ \brief Called when the measurement mode selection is changed.
+ \param theMode the selected mode
+*/
+void SMESHGUI_BasicProperties::modeChanged( int theMode )
+{
+ clear();
+
+ if ( theMode == Length ) {
+ myResultGrp->setTitle( tr("LENGTH") );
+ } else if ( theMode == Area ) {
+ myResultGrp->setTitle( tr("AREA") );
+ } else if ( theMode == Volume ) {
+ myResultGrp->setTitle( tr("VOLUME") );
+ }
+}
+
+/*!
+ \brief Calculate length, area or volume for the selected object(s)
+*/
+void SMESHGUI_BasicProperties::compute()
+{
+ SUIT_OverrideCursor wc;
+
+ SMESH::SMESH_IDSource_var source;
+
+ if ( !CORBA::is_nil( mySrc ) ) {
+ // compute
+ int precision = SMESHGUI::resourceMgr()->integerValue( "SMESH", "length_precision", 6 );
+ SMESH::Measurements_var measure = SMESHGUI::GetSMESHGen()->CreateMeasurements();
+
+ double result = 0;
+
+ if ( myMode->checkedId() == Length ) {
+ result = measure->Length( mySrc.in() );
+ } else if ( myMode->checkedId() == Area ) {
+ result = measure->Area( mySrc.in() );
+ } else if ( myMode->checkedId() == Volume ) {
+ result = measure->Volume( mySrc.in() );
+ }
+
+ measure->UnRegister();
+
+ myResult->setText( QString::number( result, precision > 0 ? 'f' : 'g', qAbs( precision ) ) );
+ } else {
+ clear();
+ }
+}
+
+/*!
+ \brief Reset the widget to the initial state (nullify the result field)
+*/
+void SMESHGUI_BasicProperties::clear()
+{
+ myResult->clear();
+}
+
/*!
\class SMESHGUI_MeshInfoDlg
\brief Centralized dialog box for the measurements
// min distance
myMinDist = new SMESHGUI_MinDistance( myTabWidget );
- myTabWidget->addTab( myMinDist, resMgr->loadPixmap( "SMESH", tr( "ICON_MEASURE_MIN_DIST" ) ), tr( "MIN_DIST" ) );
+ int aMinDistInd = myTabWidget->addTab( myMinDist, resMgr->loadPixmap( "SMESH", tr( "ICON_MEASURE_MIN_DIST" ) ), tr( "MIN_DIST" ) );
// bounding box
myBndBox = new SMESHGUI_BoundingBox( myTabWidget );
- myTabWidget->addTab( myBndBox, resMgr->loadPixmap( "SMESH", tr( "ICON_MEASURE_BND_BOX" ) ), tr( "BND_BOX" ) );
+ int aBndBoxInd = myTabWidget->addTab( myBndBox, resMgr->loadPixmap( "SMESH", tr( "ICON_MEASURE_BND_BOX" ) ), tr( "BND_BOX" ) );
+
+ // basic properties
+
+ myBasicProps = new SMESHGUI_BasicProperties( myTabWidget );
+ int aBasicPropInd = myTabWidget->addTab( myBasicProps, resMgr->loadPixmap( "SMESH", tr( "ICON_MEASURE_BASIC_PROPS" ) ), tr( "BASIC_PROPERTIES" ) );
// buttons
QPushButton* okBtn = new QPushButton( tr( "SMESH_BUT_OK" ), this );
l->addStretch();
l->addLayout( btnLayout );
- myTabWidget->setCurrentIndex( qMax( (int)MinDistance, qMin( (int)BoundingBox, page ) ) );
+ int anInd = -1;
+ if ( page == MinDistance ) {
+ anInd = aMinDistInd;
+ } else if ( page == BoundingBox ) {
+ anInd = aBndBoxInd;
+ } else if ( page == Length || page == Area || page == Volume ) {
+ myBasicProps->setMode( (SMESHGUI_BasicProperties::Mode)(page - Length) );
+ anInd = aBasicPropInd;
+ }
+
+ if ( anInd >= 0 ) {
+ myTabWidget->setCurrentIndex( anInd );
+ }
connect( okBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
connect( helpBtn, SIGNAL( clicked() ), this, SLOT( help() ) );
myMinDist->updateSelection();
else if ( myTabWidget->currentIndex() == BoundingBox )
myBndBox->updateSelection();
-
+ else {
+ myBndBox->erasePreview();
+ myBasicProps->updateSelection();
+ }
}
/*!
*/
void SMESHGUI_MeasureDlg::help()
{
- SMESH::ShowHelpFile( myTabWidget->currentIndex() == MinDistance ?
- "measurements_page.html#min_distance_anchor" :
- "measurements_page.html#bounding_box_anchor" );
+ QString aHelpFile;
+ if ( myTabWidget->currentIndex() == MinDistance ) {
+ aHelpFile = "measurements_page.html#min_distance_anchor";
+ } else if ( myTabWidget->currentIndex() == BoundingBox ) {
+ aHelpFile = "measurements_page.html#bounding_box_anchor";
+ } else {
+ aHelpFile = "measurements_page.html#basic_properties_anchor";
+ }
+
+ SMESH::ShowHelpFile( aHelpFile );
}
/*!
*/
void SMESHGUI_MeasureDlg::deactivate()
{
+ myBasicProps->deactivate();
myMinDist->deactivate();
myBndBox->deactivate();
myTabWidget->setEnabled( false );
class QButtonGroup;
class QLineEdit;
class QTabWidget;
+class QGroupBox;
class SUIT_SelectionFilter;
class SALOME_Actor;
class SMESH_Actor;
void updateSelection();
void deactivate();
+ void erasePreview();
private:
- void erasePreview();
void displayPreview();
void createPreview( double, double, double, double, double, double );
SALOME_Actor* myPreview;
};
+class SMESHGUI_EXPORT SMESHGUI_BasicProperties : public QWidget
+{
+ Q_OBJECT;
+
+public:
+ //! Property type
+ enum Mode { Length, Area, Volume };
+
+ SMESHGUI_BasicProperties( QWidget* = 0 );
+ ~SMESHGUI_BasicProperties();
+
+ void setMode( const Mode );
+
+ void updateSelection();
+ void deactivate();
+
+private slots:
+ void selectionChanged();
+ void modeChanged( int);
+ void compute();
+ void clear();
+
+private:
+ QButtonGroup* myMode;
+ QLineEdit* mySource;
+ QGroupBox* myResultGrp;
+ QLineEdit* myResult;
+ SMESH::SMESH_IDSource_var mySrc;
+ SUIT_SelectionFilter* myFilter;
+};
+
class SMESHGUI_EXPORT SMESHGUI_MeasureDlg : public QDialog
{
Q_OBJECT;
//! Measurement type
enum {
MinDistance, //!< minimum distance
- BoundingBox //!< bounding box
+ BoundingBox, //!< bounding box
+ Length, //!< length
+ Area, //!< area
+ Volume //!< volume
};
SMESHGUI_MeasureDlg( QWidget* = 0, int = MinDistance );
QTabWidget* myTabWidget;
SMESHGUI_MinDistance* myMinDist;
SMESHGUI_BoundingBox* myBndBox;
+ SMESHGUI_BasicProperties* myBasicProps;
};
#endif // SMESHGUI_MEASUREMENTS_H
{
// type
GEOM::GEOM_Object_var shape = mesh->GetShapeToMesh();
- SMESH::MedFileInfo* inf = mesh->GetMEDFileInfo();
+ SMESH::MedFileInfo_var inf = mesh->GetMEDFileInfo();
QTreeWidgetItem* typeItem = createItem( parent, Bold );
typeItem->setText( 0, tr( "TYPE" ) );
if ( !CORBA::is_nil( shape ) ) {
anItem->attach( myPlot );
myPlot->replot();
}
+ delete aHistogram;
}
void SMESHGUI_CtrlInfo::computeAspectRatio3D()
anItem->attach( myPlot3D );
myPlot3D->replot();
}
+ delete aHistogram;
}
/*!
okBtn->setAutoDefault( true );
okBtn->setDefault( true );
okBtn->setFocus();
+ QPushButton* dumpBtn = new QPushButton( tr( "BUT_DUMP_MESH" ), this );
+ dumpBtn->setAutoDefault( true );
+ QPushButton* helpBtn = new QPushButton( tr( "SMESH_BUT_HELP" ), this );
+ helpBtn->setAutoDefault( true );
+
+ QHBoxLayout* btnLayout = new QHBoxLayout;
+ btnLayout->setSpacing( SPACING );
+ btnLayout->setMargin( 0 );
+
+ btnLayout->addWidget( okBtn );
+ btnLayout->addWidget( dumpBtn );
+ btnLayout->addStretch( 10 );
+ btnLayout->addWidget( helpBtn );
- QGridLayout* l = new QGridLayout ( this );
+ QVBoxLayout* l = new QVBoxLayout ( this );
l->setMargin( MARGIN );
l->setSpacing( SPACING );
- l->addWidget( myCtrlInfo, 0, 0, 1, 3 );
- l->addWidget( okBtn, 1, 1 );
- l->setColumnStretch( 0, 5 );
- l->setColumnStretch( 2, 5 );
+ l->addWidget( myCtrlInfo );
+ l->addLayout( btnLayout );
- connect( okBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+ connect( okBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
+ connect( dumpBtn, SIGNAL( clicked() ), this, SLOT( dump() ) );
+ connect( helpBtn, SIGNAL( clicked() ), this, SLOT( help() ) );
connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( deactivate() ) );
connect( SMESHGUI::GetSMESHGUI(), SIGNAL( SignalCloseAllDialogs() ), this, SLOT( reject() ) );
disconnect( SMESHGUI::selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( updateInfo() ) );
}
+/*!
+ * \brief Dump contents into a file
+ */
+void SMESHGUI_CtrlInfoDlg::dump()
+{
+ SUIT_Application* app = SUIT_Session::session()->activeApplication();
+ if ( !app ) return;
+ SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study *>( app->activeStudy() );
+ if ( !appStudy ) return;
+ _PTR( Study ) aStudy = appStudy->studyDS();
+ QStringList aFilters;
+ aFilters.append( tr( "TEXT_FILES" ) );
+
+ DumpFileDlg fd( this );
+ fd.setWindowTitle( tr( "SAVE_INFO" ) );
+ fd.setFilters( aFilters );
+ fd.myBaseChk->hide();
+ fd.myElemChk->hide();
+ fd.myAddChk ->hide();
+ fd.myCtrlChk->hide();
+ if ( fd.exec() == QDialog::Accepted )
+ {
+ QString aFileName = fd.selectedFile();
+ if ( !aFileName.isEmpty() ) {
+ QFileInfo aFileInfo( aFileName );
+ if ( aFileInfo.isDir() )
+ return;
+
+ QFile aFile( aFileName );
+ if ( !aFile.open( QIODevice::WriteOnly | QIODevice::Text ) )
+ return;
+
+ QTextStream out( &aFile );
+ myCtrlInfo->saveInfo( out );
+ }
+ }
+}
+
+/*!
+ * \brief Show help
+ */
+void SMESHGUI_CtrlInfoDlg::help()
+{
+ SMESH::ShowHelpFile("mesh_infos_page.html#mesh_quality_info_anchor");
+}
void activate();
void deactivate();
void updateSelection();
+ void help();
+ void dump();
private:
SMESHGUI_CtrlInfo* myCtrlInfo;
#include <SALOMEconfig.h>
#include CORBA_CLIENT_HEADER(SMESH_Gen)
-//To disable automatic genericobj management, the following line should be commented.
-//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
-#define WITHGENERICOBJ
-
//================================================================================
/*!
* \brief Constructor
// Call hypothesis creation server method (without GUI)
SMESH::SMESH_Hypothesis_var aHyp =
SMESH::CreateHypothesis(theTypeName, aHypName, false);
-#ifdef WITHGENERICOBJ
- if (!CORBA::is_nil(aHyp))
- aHyp->UnRegister();
-#endif
- } else {
+ aHyp.out();
+ }
+ else {
// Get hypotheses creator client (GUI)
- // BUG 0020378
- //SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(theTypeName);
SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(theTypeName);
// Create hypothesis
else {
SMESH::SMESH_Hypothesis_var aHyp =
SMESH::CreateHypothesis(theTypeName, aHypName, false);
-#ifdef WITHGENERICOBJ
- if (!CORBA::is_nil(aHyp))
- aHyp->UnRegister();
-#endif
+ aHyp.out();
}
}
if ( !anAlgoVar->_is_nil() )
SMESH::AddHypothesisOnMesh( aMeshVar, anAlgoVar );
}
-#ifdef WITHGENERICOBJ
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- if (aMeshSO)
- aMeshVar->UnRegister();
-#endif
}
return true;
}
GEOM::GEOM_Object_wrap aGroupVar = op->CreateGroup(mainGeom, aGroupType);
op->UnionList(aGroupVar, aSeq);
- if (op->IsDone()) {
- aGeomVar = aGroupVar.in();
+ if (op->IsDone())
+ {
+ aGeomVar = GEOM::GEOM_Object::_duplicate( aGroupVar.in() );
// publish the GEOM group in study
QString aNewGeomGroupName ("Auto_group_for_");
if (aHypData)
{
QString aClientLibName = aHypData->ClientLibName;
- if (aClientLibName == "")
+ if ( aClientLibName.isEmpty() )
{
// Call hypothesis creation server method (without GUI)
SMESH::SMESH_Hypothesis_var aHyp =
SMESH::CreateHypothesis(aHypName, aHypName, true);
-#ifdef WITHGENERICOBJ
- if (!CORBA::is_nil(aHyp))
- aHyp->UnRegister();
-#endif
+ aHyp.out();
}
else
{
// Get hypotheses creator client (GUI)
- // BUG 0020378
SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(aHypName);
// Create algorithm
if (aCreator)
- aCreator->create(true, aHypName, myDlg, 0, QString::null );
+ aCreator->create( true, aHypName, myDlg, 0, QString::null );
else {
SMESH::SMESH_Hypothesis_var aHyp =
SMESH::CreateHypothesis(aHypName, aHypName, true);
-#ifdef WITHGENERICOBJ
- if (!CORBA::is_nil(aHyp))
- aHyp->UnRegister();
-#endif
+ aHyp.out();
}
}
QStringList tmpList;
{
if ( hasObj )
return theEditor->QuadTo4Tri( obj ), true;
- SMESH::SMESH_IDSource_var elems = theEditor->MakeIDSource( theIds, SMESH::FACE );
+ SMESH::SMESH_IDSource_wrap elems = theEditor->MakeIDSource( theIds, SMESH::FACE );
theEditor->QuadTo4Tri( elems );
return true;
}
const SMESH::long_array& theIds,
SMESH::SMESH_IDSource_ptr theObj)
{
- SMESH::SMESH_IDSource_var obj = theObj;
+ SMESH::SMESH_IDSource_wrap obj = theObj;
if ( CORBA::is_nil( obj ))
obj = theEditor->MakeIDSource( theIds, myEntityType ? SMESH::VOLUME : SMESH::FACE );
+ else
+ obj->Register();
try {
theEditor->SplitVolumesIntoTetra( obj, myGroupChoice->checkedId()+1 );
}
SalomeApp_Tools::QtCatchCorbaException( S_ex );
return false;
}
+ catch(...) {
+ return false;
+ }
return true;
}
#define SPACING 8
#define MARGIN 11
-//To disable automatic genericobj management, the following line should be commented.
-//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
-#define WITHGENERICOBJ
//=================================================================================
// class : SMESHGUI_RotationDlg()
if (!mesh->_is_nil()) {
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( mesh ) )
anEntryList.append( aSObject->GetID().c_str() );
-#ifdef WITHGENERICOBJ
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- mesh->UnRegister();
-#endif
}
}
}
if (!mesh->_is_nil()) {
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( mesh ) )
anEntryList.append( aSObject->GetID().c_str() );
-#ifdef WITHGENERICOBJ
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- mesh->UnRegister();
-#endif
}
}
break;
#define SPACING 6
#define MARGIN 11
-//To disable automatic genericobj management, the following line should be commented.
-//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
-#define WITHGENERICOBJ
-
//=================================================================================
// class : SMESHGUI_ScaleDlg()
// purpose :
}
else {
SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[0]->GetMeshEditor();
+ SMESH::SMESH_IDSource_wrap src = aMeshEditor->MakeIDSource(anElementsId, SMESH::ALL);
myMeshes[0]->SetParameters( aParameters.join( ":" ).toLatin1().constData() );
- aMeshEditor->Scale(aMeshEditor->MakeIDSource(anElementsId, SMESH::ALL), aPoint, aScaleFact, false);
+ aMeshEditor->Scale( src, aPoint, aScaleFact, false);
}
break;
}
else {
SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[0]->GetMeshEditor();
+ SMESH::SMESH_IDSource_wrap src = aMeshEditor->MakeIDSource(anElementsId, SMESH::ALL);
myMeshes[0]->SetParameters(aParameters.join( ":" ).toLatin1().constData());
- groups = aMeshEditor->ScaleMakeGroups(aMeshEditor->MakeIDSource(anElementsId, SMESH::ALL), aPoint, aScaleFact);
+ groups = aMeshEditor->ScaleMakeGroups( src, aPoint, aScaleFact);
}
}
else {
}
else {
SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[0]->GetMeshEditor();
+ SMESH::SMESH_IDSource_wrap src = aMeshEditor->MakeIDSource(anElementsId, SMESH::ALL);
myMeshes[0]->SetParameters(aParameters.join( ":" ).toLatin1().constData());
- aMeshEditor->Scale(aMeshEditor->MakeIDSource(anElementsId, SMESH::ALL), aPoint, aScaleFact, true);
+ aMeshEditor->Scale( src, aPoint, aScaleFact, true);
}
}
break;
aName.toLatin1().data());
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( mesh ) )
anEntryList.append( aSObject->GetID().c_str() );
-#ifdef WITHGENERICOBJ
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- mesh->UnRegister();
-#endif
}
}
else {
SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[0]->GetMeshEditor();
myMeshes[0]->SetParameters(aParameters.join( ":" ).toLatin1().constData());
- mesh = aMeshEditor->ScaleMakeMesh(aMeshEditor->MakeIDSource(anElementsId, SMESH::ALL), aPoint, aScaleFact, makeGroups,
- LineEditNewMesh->text().toLatin1().data());
+ SMESH::SMESH_IDSource_wrap src = aMeshEditor->MakeIDSource(anElementsId, SMESH::ALL);
+ mesh = aMeshEditor->ScaleMakeMesh( src, aPoint, aScaleFact, makeGroups,
+ LineEditNewMesh->text().toLatin1().data());
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( mesh ) )
anEntryList.append( aSObject->GetID().c_str() );
-#ifdef WITHGENERICOBJ
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- mesh->UnRegister();
-#endif
}
break;
}
}
else {
SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[0]->GetMeshEditPreviewer();
- aMeshEditor->Scale(aMeshEditor->MakeIDSource(anElementsId, SMESH::ALL), aPoint, aScaleFact, copy);
+ SMESH::SMESH_IDSource_wrap src = aMeshEditor->MakeIDSource(anElementsId, SMESH::ALL);
+ aMeshEditor->Scale( src, aPoint, aScaleFact, copy);
aMeshPreviewStruct << aMeshEditor->GetPreviewData();
}
setSimulationPreview(aMeshPreviewStruct);
#define SPACING 6
#define MARGIN 11
-//To disable automatic genericobj management, the following line should be commented.
-//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
-#define WITHGENERICOBJ
-
//=================================================================================
// class : SMESHGUI_SymmetryDlg()
// purpose :
aName.toLatin1().data());
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( mesh ) )
anEntryList.append( aSObject->GetID().c_str() );
-#ifdef WITHGENERICOBJ
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- mesh->UnRegister();
-#endif
}
else {
SMESH::SMESH_MeshEditor_var aMeshEditor = myMeshes[0]->GetMeshEditor();
LineEditNewMesh->text().toLatin1().data());
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( mesh ) )
anEntryList.append( aSObject->GetID().c_str() );
-#ifdef WITHGENERICOBJ
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- mesh->UnRegister();
-#endif
}
}
break;
aName.toLatin1().data());
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( mesh ) )
anEntryList.append( aSObject->GetID().c_str() );
-
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- mesh->UnRegister();
}
}
else {
LineEditNewMesh->text().toLatin1().data());
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( mesh ) )
anEntryList.append( aSObject->GetID().c_str() );
-
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- mesh->UnRegister();
}
break;
}
SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
(SUIT_Session::session()->activeApplication());
if ( app ) {
- QString IOR = app->orb()->object_to_string( theObject );
+ CORBA::String_var ior = app->orb()->object_to_string( theObject );
SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
- if ( study && !IOR.isEmpty() )
- res = study->studyDS()->FindObjectIOR( IOR.toLatin1().constData() );
+ if ( study && strlen( ior ) > 0 )
+ res = study->studyDS()->FindObjectIOR( ior.in() );
}
return res;
}
// SALOME KERNEL includes
#include <SALOMEDSClient_definitions.hxx>
+#include <SALOME_GenericObj_wrap.hxx>
// SALOME GUI includes
#include <SALOME_InteractiveObject.hxx>
//OCC includes
#include <gp_XYZ.hxx>
+#include <SALOMEconfig.h>
+#include CORBA_CLIENT_HEADER(SMESH_Mesh)
+
class SUIT_ViewWindow;
class SUIT_Desktop;
class SUIT_Study;
SMESHGUI_EXPORT
gp_XYZ getNormale( const SMDS_MeshFace* theFace );
+
+ // type to use instead of SMESH_IDSource_var for automatic UnRegister()
+ typedef SALOME::GenericObj_wrap<SMESH_IDSource> SMESH_IDSource_wrap;
+
}
#endif // SMESHGUI_UTILS_H
<source>ICON_SPLIT_TO_TETRA</source>
<translation>split_into_tetra.png</translation>
</message>
+ <message>
+ <source>ICON_MEASURE_LENGTH</source>
+ <translation>mesh_measure_length.png</translation>
+ </message>
+ <message>
+ <source>ICON_MEASURE_AREA</source>
+ <translation>mesh_measure_area.png</translation>
+ </message>
+ <message>
+ <source>ICON_MEASURE_VOLUME</source>
+ <translation>mesh_measure_volume.png</translation>
+ </message>
+ <message>
+ <source>ICON_MEASURE_BASIC_PROPS</source>
+ <translation>mesh_measure_basic_props.png</translation>
+ </message>
<message>
<source>ICON_MEASURE_MIN_DIST</source>
<translation>mesh_min_dist.png</translation>
<source>TOP_MEASURE_BND_BOX</source>
<translation>Bounding box</translation>
</message>
+ <message>
+ <source>MEN_BASIC_PROPERTIES</source>
+ <translation>Basic Properties</translation>
+ </message>
+ <message>
+ <source>MEN_MEASURE_LENGTH</source>
+ <translation>Length</translation>
+ </message>
+ <message>
+ <source>STB_MEASURE_LENGTH</source>
+ <translation>Calculate sum of length of all 1D elements of the selected object(s)</translation>
+ </message>
+ <message>
+ <source>TOP_MEASURE_LENGTH</source>
+ <translation>Length</translation>
+ </message>
+ <message>
+ <source>MEN_MEASURE_AREA</source>
+ <translation>Area</translation>
+ </message>
+ <message>
+ <source>STB_MEASURE_AREA</source>
+ <translation>Calculate sum of area of all 2D elements of the selected object(s)</translation>
+ </message>
+ <message>
+ <source>TOP_MEASURE_AREA</source>
+ <translation>Area</translation>
+ </message>
+ <message>
+ <source>MEN_MEASURE_VOLUME</source>
+ <translation>Volume</translation>
+ </message>
+ <message>
+ <source>STB_MEASURE_VOLUME</source>
+ <translation>Calculate sum of volume of all 3D elements of the selected object(s)</translation>
+ </message>
+ <message>
+ <source>TOP_MEASURE_VOLUME</source>
+ <translation>Volume</translation>
+ </message>
<message>
<source>MEN_MOVE</source>
<translation>Move Node</translation>
<source>SMESH_FACE</source>
<translation>Face</translation>
</message>
+ <message>
+ <source>SMESH_FACES</source>
+ <translation>Faces</translation>
+ </message>
<message>
<source>SMESH_FEATUREANGLE</source>
<translation>Feature Angle</translation>
<source>SMESH_VOLUME</source>
<translation>Volume</translation>
</message>
+ <message>
+ <source>SMESH_VOLUMES</source>
+ <translation>Volumes</translation>
+ </message>
<message>
<source>SMESH_WARNING</source>
<translation>Warning</translation>
</message>
<message>
<source>SMESH_WRN_SIZE_LIMIT_EXCEEDED</source>
- <translation>No automatic update of the presentation has been done: new mesh size (%1 elements) exceeds current size limit (%2 elements).
-Please check preferences of Mesh module.
+ <translation>No automatic update of the presentation has been done:
+New mesh size (%1 elements) exceeds current size limit of automatic update (%2 elements).
</translation>
</message>
<message>
<source>SMESH_WRN_SIZE_INC_LIMIT_EXCEEDED</source>
- <translation>New mesh sise (%1 elements) exceeds current size limit (%2 elements).
-Not all mesh elements are shown. Please check preferences of Mesh module.
+ <translation>New mesh size (%1 elements) exceeds current size limit of automatic update (%2 elements).
+The following elements are not shown: %3.
+Use Display Entity menu command to show them.
</translation>
</message>
<message>
<source>CTRL_INFO</source>
<translation>Quality Info</translation>
</message>
+ <message>
+ <source>BUT_DUMP_MESH</source>
+ <translation>&Dump</translation>
+ </message>
+ <message>
+ <source>TEXT_FILES</source>
+ <translation>Text files (*.txt)</translation>
+ </message>
+ <message>
+ <source>SAVE_INFO</source>
+ <translation>Save info</translation>
+ </message>
</context>
<context>
<name>SMESHGUI_MinDistance</name>
<translation>Distance</translation>
</message>
</context>
+<context>
+ <name>SMESHGUI_BasicProperties</name>
+ <message>
+ <source>PROPERTY</source>
+ <translation>Property</translation>
+ </message>
+ <message>
+ <source>LENGTH</source>
+ <translation>Length</translation>
+ </message>
+ <message>
+ <source>AREA</source>
+ <translation>Area</translation>
+ </message>
+ <message>
+ <source>VOLUME</source>
+ <translation>Volume</translation>
+ </message>
+ <message>
+ <source>SOURCE_MESH_SUBMESH_GROUP</source>
+ <translation>Source (mesh, sub-mesh or group)</translation>
+ </message>
+ <message>
+ <source>COMPUTE</source>
+ <translation>Compute</translation>
+ </message>
+</context>
<context>
<name>SMESHGUI_CopyMeshDlg</name>
<message>
<source>BND_BOX</source>
<translation>Bounding Box</translation>
</message>
+ <message>
+ <source>BASIC_PROPERTIES</source>
+ <translation>Basic Properties</translation>
+ </message>
</context>
<context>
<name>SMESHGUI_BoundingBox</name>
<source>TOP_MEASURE_BND_BOX</source>
<translation>Boîte englobante</translation>
</message>
+ <message>
+ <source>MEN_BASIC_PROPERTIES</source>
+ <translation type="unfinished">Basic Properties</translation>
+ </message>
+ <message>
+ <source>MEN_MEASURE_LENGTH</source>
+ <translation type="unfinished">Length</translation>
+ </message>
+ <message>
+ <source>STB_MEASURE_LENGTH</source>
+ <translation type="unfinished">Calculate sum of length of all 1D elements of the selected object(s)</translation>
+ </message>
+ <message>
+ <source>TOP_MEASURE_LENGTH</source>
+ <translation type="unfinished">Length</translation>
+ </message>
+ <message>
+ <source>MEN_MEASURE_AREA</source>
+ <translation type="unfinished">Area</translation>
+ </message>
+ <message>
+ <source>STB_MEASURE_AREA</source>
+ <translation type="unfinished">Calculate sum of area of all 2D elements of the selected object(s)</translation>
+ </message>
+ <message>
+ <source>TOP_MEASURE_AREA</source>
+ <translation type="unfinished">Area</translation>
+ </message>
+ <message>
+ <source>MEN_MEASURE_VOLUME</source>
+ <translation type="unfinished">Volume</translation>
+ </message>
+ <message>
+ <source>STB_MEASURE_VOLUME</source>
+ <translation type="unfinished">Calculate sum of volume of all 3D elements of the selected object(s)</translation>
+ </message>
+ <message>
+ <source>TOP_MEASURE_VOLUME</source>
+ <translation type="unfinished">Volume</translation>
+ </message>
<message>
<source>MEN_MOVE</source>
<translation>Déplacer un nœud</translation>
<source>SMESH_FACE</source>
<translation>Face</translation>
</message>
+ <message>
+ <source>SMESH_FACES</source>
+ <translation>Faces</translation>
+ </message>
<message>
<source>SMESH_FEATUREANGLE</source>
<translation>Montrer l'angle</translation>
<source>SMESH_VOLUME</source>
<translation>Volume</translation>
</message>
+ <message>
+ <source>SMESH_VOLUMES</source>
+ <translation>Volumes</translation>
+ </message>
<message>
<source>SMESH_WARNING</source>
<translation>Avertissement</translation>
</message>
<message>
<source>SMESH_WRN_SIZE_LIMIT_EXCEEDED</source>
- <translation>La présentation n'a pas été mise à jour automatiquement: la nouvelle taille du maillage (%1 éléments) dépasse la limite de taille actuelle (%2 éléments).
+ <translation>La présentation n'a pas été mise à jour automatiquement:
+la nouvelle taille du maillage (%1 éléments) dépasse la limite de taille actuelle (%2 éléments).
Vérifiez la limite dans les préférences du module Mesh.
</translation>
</message>
<message>
<source>SMESH_WRN_SIZE_INC_LIMIT_EXCEEDED</source>
- <translation type="unfinished">New mesh sise (%1 elements) exceeds current size limit (%2 elements).
-Not all mesh elements are shown. Please check preferences of Mesh module.
+ <translation>La nouvelle taille de maillage (%1 éléments) dépasse l'actuelle taille limite de la mise à jour automatique (%2 éléments).
+Les éléments suivants ne sont pas affichés: %3.
+Utilisez le menu "Visualiser une entité" pour les afficher.
</translation>
</message>
<message>
</context>
<context>
<name>SMESHGUI_CtrlInfoDlg</name>
+ <message>
+ <source>SAVE_INFO</source>
+ <translation type="unfinished">Save info</translation>
+ </message>
+ <message>
+ <source>TEXT_FILES</source>
+ <translation type="unfinished">Text files (*.txt)</translation>
+ </message>
+ <message>
+ <source>BUT_DUMP_MESH</source>
+ <translation type="unfinished">&Dump</translation>
+ </message>
<message>
<source>CTRL_INFO</source>
<translation type="unfinished">Quality Info</translation>
<translation>Distance</translation>
</message>
</context>
+<context>
+ <name>SMESHGUI_BasicProperties</name>
+ <message>
+ <source>PROPERTY</source>
+ <translation type="unfinished">Property</translation>
+ </message>
+ <message>
+ <source>LENGTH</source>
+ <translation type="unfinished">Length</translation>
+ </message>
+ <message>
+ <source>AREA</source>
+ <translation type="unfinished">Area</translation>
+ </message>
+ <message>
+ <source>VOLUME</source>
+ <translation type="unfinished">Volume</translation>
+ </message>
+ <message>
+ <source>SOURCE_MESH_SUBMESH_GROUP</source>
+ <translation type="unfinished">Source (mesh, sub-mesh or group)</translation>
+ </message>
+ <message>
+ <source>COMPUTE</source>
+ <translation type="unfinished">Compute</translation>
+ </message>
+</context>
<context>
<name>SMESHGUI_CopyMeshDlg</name>
<message>
<source>BND_BOX</source>
<translation>Boîte englobante</translation>
</message>
+ <message>
+ <source>BASIC_PROPERTIES</source>
+ <translation type="unfinished">Basic Properties</translation>
+ </message>
</context>
<context>
<name>SMESHGUI_BoundingBox</name>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS>
+ <context>
+ <name>@default</name>
+ <message>
+ <source>SMESH_EXPORT_MESH</source>
+ <translation>メッシュをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>MED_FILES_FILTER</source>
+ <translation>医学ファイル</translation>
+ </message>
+ <message>
+ <source>IDEAS_FILES_FILTER</source>
+ <translation>IDEAS ファイル</translation>
+ </message>
+ <message>
+ <source>DAT_FILES_FILTER</source>
+ <translation>DAT ファイル</translation>
+ </message>
+ <message>
+ <source>TEXT_FILES_FILTER</source>
+ <translation>TXT ファイル</translation>
+ </message>
+ <message>
+ <source>MED_VX_FILES_FILTER</source>
+ <translation>MED%1 ファイル</translation>
+ </message>
+ <message>
+ <source>STL_FILES_FILTER</source>
+ <translation>STL ファイル</translation>
+ </message>
+ <message>
+ <source>STL_ASCII_FILES_FILTER</source>
+ <translation>STL ASCII ファイル</translation>
+ </message>
+ <message>
+ <source>CGNS_FILES_FILTER</source>
+ <translation>CGNS ファイル</translation>
+ </message>
+ <message>
+ <source>GMF_ASCII_FILES_FILTER</source>
+ <translation>組み換え ASCII ファイル</translation>
+ </message>
+ <message>
+ <source>GMF_BINARY_FILES_FILTER</source>
+ <translation>組み換えバイナリ ファイル</translation>
+ </message>
+ <message>
+ <source>STL_BIN_FILES_FILTER</source>
+ <translation>STL バイナリ ファイル</translation>
+ </message>
+ <message>
+ <source>ALL_FILES_FILTER</source>
+ <translation>すべてのファイル</translation>
+ </message>
+ <message>
+ <source>SMESH_AND</source>
+ <translation>と</translation>
+ </message>
+ <message>
+ <source>AREA_ELEMENTS</source>
+ <translation>エリア</translation>
+ </message>
+ <message>
+ <source>MIN_DIAG_ELEMENTS</source>
+ <translation>最小斜め</translation>
+ </message>
+ <message>
+ <source>ASPECTRATIO_3D_ELEMENTS</source>
+ <translation>アスペクト比 3 D</translation>
+ </message>
+ <message>
+ <source>ASPECTRATIO_ELEMENTS</source>
+ <translation>アスペクト比</translation>
+ </message>
+ <message>
+ <source>NODE_POSITION</source>
+ <translation>位置</translation>
+ </message>
+ <message>
+ <source>U_POSITION</source>
+ <translation>U</translation>
+ </message>
+ <message>
+ <source>V_POSITION</source>
+ <translation>V</translation>
+ </message>
+ <message>
+ <source>COL_ALGO_HEADER</source>
+ <translation>アルゴリズム</translation>
+ </message>
+ <message>
+ <source>COL_ERROR_HEADER</source>
+ <translation>エラー</translation>
+ </message>
+ <message>
+ <source>COL_SHAPE_HEADER</source>
+ <translation>サブ</translation>
+ </message>
+ <message>
+ <source>COMPERR_ALGO_FAILED</source>
+ <translation>失敗したアルゴリズム</translation>
+ </message>
+ <message>
+ <source>COMPERR_BAD_INPUT_MESH</source>
+ <translation>無効な入力メッシュ</translation>
+ </message>
+ <message>
+ <source>COMPERR_BAD_SHAPE</source>
+ <translation>予期しないジオメトリ</translation>
+ </message>
+ <message>
+ <source>COMPERR_EXCEPTION</source>
+ <translation>不明な例外</translation>
+ </message>
+ <message>
+ <source>COMPERR_MEMORY_PB</source>
+ <translation>メモリ割り当ての問題</translation>
+ </message>
+ <message>
+ <source>COMPERR_OCC_EXCEPTION</source>
+ <translation>OCC 例外</translation>
+ </message>
+ <message>
+ <source>COMPERR_OK</source>
+ <translation>エラーなし</translation>
+ </message>
+ <message>
+ <source>COMPERR_SLM_EXCEPTION</source>
+ <translation>サロメ例外</translation>
+ </message>
+ <message>
+ <source>COMPERR_STD_EXCEPTION</source>
+ <translation>スポット</translation>
+ </message>
+ <message>
+ <source>COMPERR_UNKNOWN</source>
+ <translation>不明なエラー</translation>
+ </message>
+ <message>
+ <source>COMPERR_CANCELED</source>
+ <translation>計算のキャンセル</translation>
+ </message>
+ <message>
+ <source>COMPERR_NO_MESH_ON_SHAPE</source>
+ <translation>サブに割り当てられたメッシュ要素がないです。</translation>
+ </message>
+ <message>
+ <source>EDITERR_NO_MEDIUM_ON_GEOM</source>
+ <translation>マジェンタ色で表示される要素のゆがみを防ぐジオメトリ上に配置しないいくつかの中のノード</translation>
+ </message>
+ <message>
+ <source>SMESH_GEOM</source>
+ <translation>ジオメトリ</translation>
+ </message>
+ <message>
+ <source>DIRECT_GEOM_SELECTION</source>
+ <translation>直接ジオメトリの選択</translation>
+ </message>
+ <message>
+ <source>ELEMENT_ID</source>
+ <translation>要素の ID</translation>
+ </message>
+ <message>
+ <source>ELEMENT_IDS</source>
+ <translation>要素 Id</translation>
+ </message>
+ <message>
+ <source>FREE_BORDERS</source>
+ <translation>無料の罫線</translation>
+ </message>
+ <message>
+ <source>GEOMETRY_NAME</source>
+ <translation>ジオメトリの名前</translation>
+ </message>
+ <message>
+ <source>GEOM_BY_MESH_ELEM_SELECTION</source>
+ <translation>ジオメトリをメッシュ要素の選択を見つける</translation>
+ </message>
+ <message>
+ <source>GLOBAL_ALGO</source>
+ <translation>グローバル</translation>
+ </message>
+ <message>
+ <source>INF_SELECT_OBJECT</source>
+ <translation>オブジェクトを選択します。</translation>
+ </message>
+ <message>
+ <source>LENGTH2D_EDGES</source>
+ <translation>長さ 2 D</translation>
+ </message>
+ <message>
+ <source>LENGTH_EDGES</source>
+ <translation>長さ</translation>
+ </message>
+ <message>
+ <source>LOCAL_ALGO</source>
+ <translation>ローカル</translation>
+ </message>
+ <message>
+ <source>MAX_ELEMENT_LENGTH_2D</source>
+ <translation>要素の直径 2 D</translation>
+ </message>
+ <message>
+ <source>MAX_ELEMENT_LENGTH_3D</source>
+ <translation>要素の直径 3 D</translation>
+ </message>
+ <message>
+ <source>MEN_ADD</source>
+ <translation>追加</translation>
+ </message>
+ <message>
+ <source>MEN_ADV_INFO</source>
+ <translation>メッシュ情報</translation>
+ </message>
+ <message>
+ <source>MEN_ALL</source>
+ <translation>すべて</translation>
+ </message>
+ <message>
+ <source>MEN_AREA</source>
+ <translation>エリア</translation>
+ </message>
+ <message>
+ <source>MEN_ASPECT</source>
+ <translation>アスペクト比</translation>
+ </message>
+ <message>
+ <source>MEN_ASPECT_3D</source>
+ <translation>アスペクト比 3 D</translation>
+ </message>
+ <message>
+ <source>MEN_AUTO_COLOR</source>
+ <translation>自動カラー補正</translation>
+ </message>
+ <message>
+ <source>MEN_AUTO_UPD</source>
+ <translation>自動更新</translation>
+ </message>
+ <message>
+ <source>MEN_BUILD_COMPOUND</source>
+ <translation>化合物を構築します。</translation>
+ </message>
+ <message>
+ <source>MEN_COPY_MESH</source>
+ <translation>メッシュをコピーします。</translation>
+ </message>
+ <message>
+ <source>MEN_CLIP</source>
+ <translation>クリッピング</translation>
+ </message>
+ <message>
+ <source>MEN_COLORS</source>
+ <translation>プロパティ</translation>
+ </message>
+ <message>
+ <source>MEN_COMPUTE</source>
+ <translation>計算</translation>
+ </message>
+ <message>
+ <source>MEN_PRECOMPUTE</source>
+ <translation>プレビュー</translation>
+ </message>
+ <message>
+ <source>MEN_EVALUATE</source>
+ <translation>評価</translation>
+ </message>
+ <message>
+ <source>MEN_CONNECTION</source>
+ <translation>複数の罫線</translation>
+ </message>
+ <message>
+ <source>MEN_CONNECTION_2D</source>
+ <translation>国境で多種の 2 D</translation>
+ </message>
+ <message>
+ <source>MEN_CONSTRUCT_GROUP</source>
+ <translation>構成グループ</translation>
+ </message>
+ <message>
+ <source>MEN_CONV_TO_QUAD</source>
+ <translation>2 次に/から変換します。</translation>
+ </message>
+ <message>
+ <source>MEN_2D_FROM_3D</source>
+ <translation>境界要素を作成します。</translation>
+ </message>
+ <message>
+ <source>MEN_MESH_ORDER</source>
+ <translation>サブメッシュ優先度の変更</translation>
+ </message>
+ <message>
+ <source>MEN_CREATE_GROUP</source>
+ <translation>グループを作成します。</translation>
+ </message>
+ <message>
+ <source>MEN_CREATE_GEO_GROUP</source>
+ <translation>ジオメトリ グループを作成します。</translation>
+ </message>
+ <message>
+ <source>MEN_CREATE_MESH</source>
+ <translation>メッシュを作成します。</translation>
+ </message>
+ <message>
+ <source>MEN_CREATE_SUBMESH</source>
+ <translation>サブメッシュを作成します。</translation>
+ </message>
+ <message>
+ <source>MEN_CTRL</source>
+ <translation>コントロール</translation>
+ </message>
+ <message>
+ <source>MEN_NODE_CTRL</source>
+ <translation>ノードのコントロール</translation>
+ </message>
+ <message>
+ <source>MEN_EDGE_CTRL</source>
+ <translation>エッジ コントロール</translation>
+ </message>
+ <message>
+ <source>MEN_FACE_CTRL</source>
+ <translation>顔のコントロール</translation>
+ </message>
+ <message>
+ <source>MEN_VOLUME_CTRL</source>
+ <translation>ボリューム コントロール</translation>
+ </message>
+ <message>
+ <source>MEN_CUT</source>
+ <translation>四角形の切断</translation>
+ </message>
+ <message>
+ <source>MEN_CUT_GROUP</source>
+ <translation>グループをカットします。</translation>
+ </message>
+ <message>
+ <source>MEN_IMPORT_DAT</source>
+ <translation>DAT ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_DAT</source>
+ <translation>DAT ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_DELETE</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>MEN_DEL_GROUP</source>
+ <translation>グループの内容を削除します。</translation>
+ </message>
+ <message>
+ <source>MEN_FACE_ORIENTATION</source>
+ <translation>顔の向き</translation>
+ </message>
+ <message>
+ <source>MEN_DISABLE_AUTO_COLOR</source>
+ <translation>自動カラー補正を無効にします。</translation>
+ </message>
+ <message>
+ <source>MEN_DISPLAY_ONLY</source>
+ <translation>のみを表示します。</translation>
+ </message>
+ <message>
+ <source>MEN_DISPMODE</source>
+ <translation>表示モード</translation>
+ </message>
+ <message>
+ <source>MEN_DISP_ENT</source>
+ <translation>エンティティを表示します。</translation>
+ </message>
+ <message>
+ <source>MEN_ELEM0D</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>MEN_ELEMS0D</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>MEN_0D_ON_ALL_NODES</source>
+ <translation>要素ノード上の 0 D 要素</translation>
+ </message>
+ <message>
+ <source>MEN_BALL</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>MEN_BALLS</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>MEN_EDGE</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>MEN_EDGES</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>MEN_EDIT</source>
+ <translation>編集</translation>
+ </message>
+ <message>
+ <source>MEN_EDIT_GROUP</source>
+ <translation>[グループの編集</translation>
+ </message>
+ <message>
+ <source>MEN_EDIT_GEOMGROUP_AS_GROUP</source>
+ <translation>スタンドアロンとしてグループの編集</translation>
+ </message>
+ <message>
+ <source>MEN_EDIT_HYPO</source>
+ <translation>仮説を編集します。</translation>
+ </message>
+ <message>
+ <source>MEN_EDIT_MESHSUBMESH</source>
+ <translation>メッシュ/サブ mesh を編集します。</translation>
+ </message>
+ <message>
+ <source>MEN_EXPORT</source>
+ <translation>エクスポート</translation>
+ </message>
+ <message>
+ <source>MEN_EXPORT_DAT</source>
+ <translation>DAT ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>MEN_EXPORT_MED</source>
+ <translation>医学ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>MEN_EXPORT_CGNS</source>
+ <translation>CGNS ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>MEN_EXPORT_GMF</source>
+ <translation>組み換えファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>MEN_EXPORT_SAUV</source>
+ <translation>SAUV ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>MEN_EXPORT_STL</source>
+ <translation>STL ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>MEN_EXPORT_UNV</source>
+ <translation>UNV ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>MEN_EXTRUSION</source>
+ <translation>押出</translation>
+ </message>
+ <message>
+ <source>MEN_EXTRUSION_ALONG</source>
+ <translation>押し出しパスに沿って</translation>
+ </message>
+ <message>
+ <source>MEN_FACES</source>
+ <translation>直面しています。</translation>
+ </message>
+ <message>
+ <source>MEN_FILE</source>
+ <translation>ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_FIND_ELEM</source>
+ <translation>要素のポイントを検索します。</translation>
+ </message>
+ <message>
+ <source>TOP_REORIENT_2D</source>
+ <translation>ベクトルによって顔の向きを変更します。</translation>
+ </message>
+ <message>
+ <source>MEN_REORIENT_2D</source>
+ <translation>ベクトルによって顔の向きを変更します。</translation>
+ </message>
+ <message>
+ <source>STB_REORIENT_2D</source>
+ <translation>ベクトルによって顔の向きを変更します。</translation>
+ </message>
+ <message>
+ <source>TOP_FIND_ELEM</source>
+ <translation>要素のポイントを検索します。</translation>
+ </message>
+ <message>
+ <source>STB_FIND_ELEM</source>
+ <translation>要素のポイントを検索します。</translation>
+ </message>
+ <message>
+ <source>EQUAL_NODE</source>
+ <translation>二重ノード</translation>
+ </message>
+ <message>
+ <source>MEN_EQUAL_NODE</source>
+ <translation>二重ノード</translation>
+ </message>
+ <message>
+ <source>STB_EQUAL_NODE</source>
+ <translation>二重ノード</translation>
+ </message>
+ <message>
+ <source>TOP_EQUAL_NODE</source>
+ <translation>二重ノード</translation>
+ </message>
+ <message>
+ <source>EQUAL_EDGE</source>
+ <translation>ダブル エッジ</translation>
+ </message>
+ <message>
+ <source>MEN_EQUAL_EDGE</source>
+ <translation>ダブル エッジ</translation>
+ </message>
+ <message>
+ <source>STB_EQUAL_EDGE</source>
+ <translation>ダブル エッジ</translation>
+ </message>
+ <message>
+ <source>TOP_EQUAL_EDGE</source>
+ <translation>ダブル エッジ</translation>
+ </message>
+ <message>
+ <source>EQUAL_FACE</source>
+ <translation>二重の顔</translation>
+ </message>
+ <message>
+ <source>MEN_EQUAL_FACE</source>
+ <translation>二重の顔</translation>
+ </message>
+ <message>
+ <source>STB_EQUAL_FACE</source>
+ <translation>二重の顔</translation>
+ </message>
+ <message>
+ <source>TOP_EQUAL_FACE</source>
+ <translation>二重の顔</translation>
+ </message>
+ <message>
+ <source>EQUAL_VOLUME</source>
+ <translation>ダブル ボリューム</translation>
+ </message>
+ <message>
+ <source>MEN_EQUAL_VOLUME</source>
+ <translation>ダブル ボリューム</translation>
+ </message>
+ <message>
+ <source>STB_EQUAL_VOLUME</source>
+ <translation>ダブル ボリューム</translation>
+ </message>
+ <message>
+ <source>TOP_EQUAL_VOLUME</source>
+ <translation>ダブル ボリューム</translation>
+ </message>
+ <message>
+ <source>MEN_BARE_BORDER_VOLUME</source>
+ <translation>ボリュームが裸の枠線</translation>
+ </message>
+ <message>
+ <source>MEN_BARE_BORDER_FACE</source>
+ <translation>顔が裸の枠線</translation>
+ </message>
+ <message>
+ <source>MEN_OVER_CONSTRAINED_VOLUME</source>
+ <translation>過剰のボリューム</translation>
+ </message>
+ <message>
+ <source>MEN_OVER_CONSTRAINED_FACE</source>
+ <translation>過剰拘束面</translation>
+ </message>
+ <message>
+ <source>MEN_FREE_BORDER</source>
+ <translation>無料の罫線</translation>
+ </message>
+ <message>
+ <source>MEN_FREE_EDGE</source>
+ <translation>自由辺</translation>
+ </message>
+ <message>
+ <source>MEN_FREE_NODE</source>
+ <translation>無料ノード</translation>
+ </message>
+ <message>
+ <source>MEN_FREE_FACES</source>
+ <translation>無料顔</translation>
+ </message>
+ <message>
+ <source>MEN_GLOBAL_HYPO</source>
+ <translation>グローバルな仮説</translation>
+ </message>
+ <message>
+ <source>MEN_HEXA</source>
+ <translation>直方体</translation>
+ </message>
+ <message>
+ <source>MEN_HIDE</source>
+ <translation>非表示</translation>
+ </message>
+ <message>
+ <source>MEN_HYPO</source>
+ <translation>仮説</translation>
+ </message>
+ <message>
+ <source>MEN_IMPORT</source>
+ <translation>インポート</translation>
+ </message>
+ <message>
+ <source>MEN_INT_GROUP</source>
+ <translation>グループが交差します。</translation>
+ </message>
+ <message>
+ <source>MEN_INV</source>
+ <translation>斜めの反転</translation>
+ </message>
+ <message>
+ <source>MEN_LENGTH</source>
+ <translation>長さ</translation>
+ </message>
+ <message>
+ <source>MEN_LENGTH_2D</source>
+ <translation>長さ 2 D</translation>
+ </message>
+ <message>
+ <source>MEN_MAP</source>
+ <translation>パターンのマッピング</translation>
+ </message>
+ <message>
+ <source>MEN_MAX_ELEMENT_LENGTH_2D</source>
+ <translation>要素の直径 2 D</translation>
+ </message>
+ <message>
+ <source>MEN_MAX_ELEMENT_LENGTH_3D</source>
+ <translation>要素の直径 3 D</translation>
+ </message>
+ <message>
+ <source>MEN_IMPORT_MED</source>
+ <translation>医学ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_MED</source>
+ <translation>医学ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_IMPORT_CGNS</source>
+ <translation>CGNS ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_CGNS</source>
+ <translation>CGNS ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_IMPORT_GMF</source>
+ <translation>組み換えファイル</translation>
+ </message>
+ <message>
+ <source>MEN_GMF</source>
+ <translation>組み換えファイル</translation>
+ </message>
+ <message>
+ <source>MEN_IMPORT_SAUV</source>
+ <translation>SAUV ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_SAUV</source>
+ <translation>SAUV ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_MERGE</source>
+ <translation>節点はマージします。</translation>
+ </message>
+ <message>
+ <source>MEN_MERGE_ELEMENTS</source>
+ <translation>要素をマージします。</translation>
+ </message>
+ <message>
+ <source>MEN_MESH</source>
+ <translation>メッシュ</translation>
+ </message>
+ <message>
+ <source>MEN_MESH_THROU_POINT</source>
+ <translation>ノードの移動</translation>
+ </message>
+ <message>
+ <source>MEN_MIN_ANG</source>
+ <translation>最小角度</translation>
+ </message>
+ <message>
+ <source>MEN_MODIFY</source>
+ <translation>変更</translation>
+ </message>
+ <message>
+ <source>MEN_MEASURE</source>
+ <translation>測定</translation>
+ </message>
+ <message>
+ <source>MEN_MEASURE_MIN_DIST</source>
+ <translation>最小距離</translation>
+ </message>
+ <message>
+ <source>STB_MEASURE_MIN_DIST</source>
+ <translation>2 つのオブジェクト間の最小距離を計算します。</translation>
+ </message>
+ <message>
+ <source>TOP_MEASURE_MIN_DIST</source>
+ <translation>最小距離</translation>
+ </message>
+ <message>
+ <source>MEN_MEASURE_BND_BOX</source>
+ <translation>境界ボックス</translation>
+ </message>
+ <message>
+ <source>STB_MEASURE_BND_BOX</source>
+ <translation>選択したオブジェクトの境界ボックスを計算します。</translation>
+ </message>
+ <message>
+ <source>TOP_MEASURE_BND_BOX</source>
+ <translation>境界ボックス</translation>
+ </message>
+ <message>
+ <source>MEN_MOVE</source>
+ <translation>ノードの移動</translation>
+ </message>
+ <message>
+ <source>MEN_NODE</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>MEN_NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>MEN_NUM</source>
+ <translation>段落番号</translation>
+ </message>
+ <message>
+ <source>MEN_NUM_ELEMENTS</source>
+ <translation>要素を表示 #</translation>
+ </message>
+ <message>
+ <source>MEN_NUM_NODES</source>
+ <translation>ノードを表示 #</translation>
+ </message>
+ <message>
+ <source>MEN_ORIENT</source>
+ <translation>印刷の向き</translation>
+ </message>
+ <message>
+ <source>MEN_POLYGON</source>
+ <translation>多角形</translation>
+ </message>
+ <message>
+ <source>MEN_POLYHEDRON</source>
+ <translation>多面体</translation>
+ </message>
+ <message>
+ <source>MEN_PRECISION</source>
+ <translation>精度</translation>
+ </message>
+ <message>
+ <source>MEN_PREF</source>
+ <translation>設定</translation>
+ </message>
+ <message>
+ <source>MEN_QUAD</source>
+ <translation>四角形</translation>
+ </message>
+ <message>
+ <source>MEN_QUADRATIC_EDGE</source>
+ <translation>2 次のエッジ</translation>
+ </message>
+ <message>
+ <source>MEN_QUADRATIC_HEXAHEDRON</source>
+ <translation>二次六面体</translation>
+ </message>
+ <message>
+ <source>MEN_QUADRATIC_PENTAHEDRON</source>
+ <translation>二次 5面体</translation>
+ </message>
+ <message>
+ <source>MEN_QUADRATIC_PYRAMID</source>
+ <translation>二次ピラミッド</translation>
+ </message>
+ <message>
+ <source>MEN_QUADRATIC_QUADRANGLE</source>
+ <translation>二次四角形</translation>
+ </message>
+ <message>
+ <source>MEN_QUADRATIC_TETRAHEDRON</source>
+ <translation>二次四面体</translation>
+ </message>
+ <message>
+ <source>MEN_QUADRATIC_TRIANGLE</source>
+ <translation>2 次三角形</translation>
+ </message>
+ <message>
+ <source>MEN_QUALITY</source>
+ <translation>品質コントロール</translation>
+ </message>
+ <message>
+ <source>MEN_REMOVE</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>MEN_REMOVE_ELEMENTS</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>MEN_REMOVE_NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>MEN_REMOVE_ORPHAN_NODES</source>
+ <translation>孤児ノード</translation>
+ </message>
+ <message>
+ <source>MEN_RENAME</source>
+ <translation>名前の変更</translation>
+ </message>
+ <message>
+ <source>MEN_RENUM</source>
+ <translation>番号を付け替える</translation>
+ </message>
+ <message>
+ <source>MEN_RENUM_ELEMENTS</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>MEN_RENUM_NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>MEN_RESET</source>
+ <translation>リセット</translation>
+ </message>
+ <message>
+ <source>MEN_DISTRIBUTION_CTRL</source>
+ <translation>配布</translation>
+ </message>
+ <message>
+ <source>MEN_SAVE_DISTRIBUTION</source>
+ <translation>エクスポート.</translation>
+ </message>
+ <message>
+ <source>MEN_SHOW_DISTRIBUTION</source>
+ <translation>ショー</translation>
+ </message>
+ <message>
+ <source>MEN_PLOT_DISTRIBUTION</source>
+ <translation>プロット</translation>
+ </message>
+ <message>
+ <source>DISTRIBUTION_NB_ENT</source>
+ <translation>エンティティ数</translation>
+ </message>
+ <message>
+ <source>MEN_REVOLUTION</source>
+ <translation>革命</translation>
+ </message>
+ <message>
+ <source>MEN_ROT</source>
+ <translation>回転</translation>
+ </message>
+ <message>
+ <source>MEN_SCALAR_BAR</source>
+ <translation>スカラー バー</translation>
+ </message>
+ <message>
+ <source>MEN_SCALAR_BAR_PROP</source>
+ <translation>スカラー バーのプロパティ</translation>
+ </message>
+ <message>
+ <source>MEN_SELECTION</source>
+ <translation>選択</translation>
+ </message>
+ <message>
+ <source>MEN_SEL_FILTER_LIB</source>
+ <translation>選択フィルター ライブラリ</translation>
+ </message>
+ <message>
+ <source>MEN_SEW</source>
+ <translation>縫製</translation>
+ </message>
+ <message>
+ <source>MEN_SHADE</source>
+ <translation>網かけの設定</translation>
+ </message>
+ <message>
+ <source>MEN_QUADRATIC_REPRESENT</source>
+ <translation>2 D 二次</translation>
+ </message>
+ <message>
+ <source>MEN_LINE_REPRESENTATION</source>
+ <translation>行</translation>
+ </message>
+ <message>
+ <source>MEN_ARC_REPRESENTATION</source>
+ <translation>円弧</translation>
+ </message>
+ <message>
+ <source>MEN_SHOW</source>
+ <translation>ショー</translation>
+ </message>
+ <message>
+ <source>MEN_SHRINK</source>
+ <translation>縮小</translation>
+ </message>
+ <message>
+ <source>MEN_SKEW</source>
+ <translation>傾斜</translation>
+ </message>
+ <message>
+ <source>MEN_SMOOTH</source>
+ <translation>平滑化</translation>
+ </message>
+ <message>
+ <source>MEN_STD_INFO</source>
+ <translation>標準的なメッシュ情報</translation>
+ </message>
+ <message>
+ <source>MEN_IMPORT_STL</source>
+ <translation>STL ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_STL</source>
+ <translation>STL ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_SYM</source>
+ <translation>対称性</translation>
+ </message>
+ <message>
+ <source>MEN_TAPER</source>
+ <translation>テーパ</translation>
+ </message>
+ <message>
+ <source>MEN_TETRA</source>
+ <translation>四面体</translation>
+ </message>
+ <message>
+ <source>MEN_TOOLS</source>
+ <translation>ツール</translation>
+ </message>
+ <message>
+ <source>MEN_TRANS</source>
+ <translation>翻訳</translation>
+ </message>
+ <message>
+ <source>MEN_SCALE</source>
+ <translation>スケール変換</translation>
+ </message>
+ <message>
+ <source>MEN_DUPLICATE_NODES</source>
+ <translation>重複したノード</translation>
+ </message>
+ <message>
+ <source>MEN_TRANSF</source>
+ <translation>変換</translation>
+ </message>
+ <message>
+ <source>MEN_TRANSP</source>
+ <translation>透明性</translation>
+ </message>
+ <message>
+ <source>MEN_TRIANGLE</source>
+ <translation>三角形</translation>
+ </message>
+ <message>
+ <source>MEN_UNASSIGN</source>
+ <translation>割り当てを解除します。</translation>
+ </message>
+ <message>
+ <source>MEN_UNION</source>
+ <translation>三角形の和集合</translation>
+ </message>
+ <message>
+ <source>MEN_UNION2</source>
+ <translation>2 つの三角形の和集合</translation>
+ </message>
+ <message>
+ <source>MEN_IMPORT_UNV</source>
+ <translation>UNV ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_UNV</source>
+ <translation>UNV ファイル</translation>
+ </message>
+ <message>
+ <source>MEN_UN_GROUP</source>
+ <translation>連合のグループ</translation>
+ </message>
+ <message>
+ <source>MEN_UNDERLYING_ELEMS</source>
+ <translation>基になるエンティティのグループ</translation>
+ </message>
+ <message>
+ <source>MEN_UPDATE</source>
+ <translation>更新プログラム</translation>
+ </message>
+ <message>
+ <source>MEN_VIEW</source>
+ <translation>ビュー</translation>
+ </message>
+ <message>
+ <source>MEN_VOLUMES</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>MEN_VOLUME_3D</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>MEN_WARP</source>
+ <translation>ワープ角度</translation>
+ </message>
+ <message>
+ <source>MEN_WHAT_IS</source>
+ <translation>メッシュ要素の情報</translation>
+ </message>
+ <message>
+ <source>MEN_WIRE</source>
+ <translation>ワイヤ フレーム</translation>
+ </message>
+ <message>
+ <source>MEN_SPLIT_TO_TETRA</source>
+ <translation>四面体に分割します。</translation>
+ </message>
+ <message>
+ <source>TOP_SPLIT_TO_TETRA</source>
+ <translation>四面体に分割します。</translation>
+ </message>
+ <message>
+ <source>STB_SPLIT_TO_TETRA</source>
+ <translation>四面体に分割します。</translation>
+ </message>
+ <message>
+ <source>MESHERS_FILE_CANT_OPEN</source>
+ <translation>リソース ファイルを開くことができません。</translation>
+ </message>
+ <message>
+ <source>MESHERS_FILE_CHECK_VARIABLE</source>
+ <translation>環境変数 SMESH_MeshersList をチェックします。</translation>
+ </message>
+ <message>
+ <source>MESHERS_FILE_NO_VARIABLE</source>
+ <translation>環境変数 SMESH_MeshersList が定義されていません</translation>
+ </message>
+ <message>
+ <source>MESH_IS_NOT_SELECTED</source>
+ <translation>選択したメッシュしてください。 がない、メッシュを選択し、もう一度やり直してください。</translation>
+ </message>
+ <message>
+ <source>MESH_NODE</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>MESH_NODE_TITLE</source>
+ <translation>ノードを追加します。</translation>
+ </message>
+ <message>
+ <source>MINIMUMANGLE_ELEMENTS</source>
+ <translation>最小角度</translation>
+ </message>
+ <message>
+ <source>MULTI2D_BORDERS</source>
+ <translation>国境マルチ 2 D で</translation>
+ </message>
+ <message>
+ <source>MULTI_BORDERS</source>
+ <translation>国境 Multi-Connections で</translation>
+ </message>
+ <message>
+ <source>GROUP_NAME_IS_EMPTY</source>
+ <translation>グループの名前が指定されていません。作成するか、既存のものを選択する新しいグループの名前を入力してください。</translation>
+ </message>
+ <message>
+ <source>MESH_STANDALONE_GRP_CHOSEN</source>
+ <translation>ジオメトリ上のグループを選択:%1。スタンドアロンのグループに変換しますか。</translation>
+ </message>
+ <message>
+ <source>NODE_ID</source>
+ <translation>ノード ID</translation>
+ </message>
+ <message>
+ <source>NODE_IDS</source>
+ <translation>ノード Id</translation>
+ </message>
+ <message>
+ <source>NON_SMESH_OBJECTS_SELECTED</source>
+ <translation>あるオブジェクトを選択、%1 コンポーネントに属していません。</translation>
+ </message>
+ <message>
+ <source>PREVIEW</source>
+ <translation>プレビュー</translation>
+ </message>
+ <message>
+ <source>SKEW_ELEMENTS</source>
+ <translation>傾斜</translation>
+ </message>
+ <message>
+ <source>SMESHGUI_INVALID_PARAMETERS</source>
+ <translation>パラメーターが正しく指定されていない正しい値を入力して、もう一度実行してください</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_ALGORITHM</source>
+ <translation>アルゴリズム</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_ALGORITHM_TITLE</source>
+ <translation>アルゴリズムの割り当て</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_ELEM0D</source>
+ <translation>0 D の要素を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_ELEM0D_TITLE</source>
+ <translation>0 D の要素を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_BALL</source>
+ <translation>ボールの要素を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_BALL_TITLE</source>
+ <translation>ボールの要素を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_EDGE</source>
+ <translation>エッジを追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_EDGE_TITLE</source>
+ <translation>エッジを追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_HEXAS</source>
+ <translation>六面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_HEXAS_TITLE</source>
+ <translation>六面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_HYPOTHESIS</source>
+ <translation>仮説</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_HYPOTHESIS_TITLE</source>
+ <translation>仮説の割り当て</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_HYP_WRN</source>
+ <translation>「割り当て%1」が。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_OCTA</source>
+ <translation>角柱を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_OCTA_TITLE</source>
+ <translation>角柱を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_POLYGON</source>
+ <translation>多角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_POLYGON_TITLE</source>
+ <translation>多角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_PENTA</source>
+ <translation>表層五面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_PENTA_TITLE</source>
+ <translation>表層五面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_PYRAMID</source>
+ <translation>ピラミッドを追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_PYRAMID_TITLE</source>
+ <translation>ピラミッドを追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRANGLE</source>
+ <translation>四角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRANGLE_TITLE</source>
+ <translation>四角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_EDGE_TITLE</source>
+ <translation>2 次のエッジを追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_HEXAHEDRON_TITLE</source>
+ <translation>二次六面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_TRIQUADRATIC_HEXAHEDRON_TITLE</source>
+ <translation>TriQuadratic 直方体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_PENTAHEDRON_TITLE</source>
+ <translation>二次 5面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_PYRAMID_TITLE</source>
+ <translation>二次ピラミッドを追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_BIQUADRATIC_QUADRANGLE_TITLE</source>
+ <translation>バイカッド四角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_QUADRANGLE_TITLE</source>
+ <translation>2 次の四角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_TETRAHEDRON_TITLE</source>
+ <translation>二次四面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_TRIANGLE_TITLE</source>
+ <translation>2 次三角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_SUBMESH</source>
+ <translation>サブメッシュ建設</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_TETRAS</source>
+ <translation>四面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_TETRAS_TITLE</source>
+ <translation>四面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_TO_GROUP</source>
+ <translation>グループに追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_TRIANGLE</source>
+ <translation>三角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_TRIANGLE_TITLE</source>
+ <translation>三角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ANGLE</source>
+ <translation>角度</translation>
+ </message>
+ <message>
+ <source>SMESH_ARGUMENTS</source>
+ <translation>引数</translation>
+ </message>
+ <message>
+ <source>SMESH_AUTO_GROUPS</source>
+ <translation>自動的にグループを作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_REQUIRED_GROUPS</source>
+ <translation>必要なエンティティのグループを作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_AVAILABLE</source>
+ <translation>利用可能です</translation>
+ </message>
+ <message>
+ <source>SMESH_AVAILABLE_ALGORITHMS</source>
+ <translation>利用可能なアルゴリズム</translation>
+ </message>
+ <message>
+ <source>SMESH_AVAILABLE_HYPOTHESES</source>
+ <translation>使用可能な仮説</translation>
+ </message>
+ <message>
+ <source>SMESH_AXIS</source>
+ <translation>軸</translation>
+ </message>
+ <message>
+ <source>SMESH_BAD_SELECTION</source>
+ <translation>有効な選択</translation>
+ </message>
+ <message>
+ <source>SMESH_BAD_MESH_SELECTION</source>
+ <translation>有効なメッシュも選択されていません</translation>
+ </message>
+ <message>
+ <source>SMESH_BOUNDARYEDGES</source>
+ <translation>境界エッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_BUILD_COMPOUND_TITLE</source>
+ <translation>化合物を作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_COPY_MESH_TITLE</source>
+ <translation>メッシュをコピーします。</translation>
+ </message>
+ <message>
+ <source>SMESH_KEEP_IDS</source>
+ <translation>要素の Id を保持します。</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_ADD</source>
+ <translation>A & dd</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_APPLY</source>
+ <translation>& 適用</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_CANCEL</source>
+ <translation>& [キャンセル</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_CLOSE</source>
+ <translation>& 閉じる</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_CREATE</source>
+ <translation>作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_DELETE</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_FILTER</source>
+ <translation>セット & フィルター</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_HELP</source>
+ <translation>& ヘルプ</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_NEW</source>
+ <translation>新機能</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_NO</source>
+ <translation>& なし</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_OK</source>
+ <translation>& [Ok]</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_OVERWRITE</source>
+ <translation>以上 & 書き込み</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_APPLY_AND_CLOSE</source>
+ <translation>A & に当てて行うと閉じる</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_REMOVE</source>
+ <translation>& 削除</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_SORT</source>
+ <translation>& 一覧を並べ替える</translation>
+ </message>
+ <message>
+ <source>SMESH_BUT_YES</source>
+ <translation>& はい</translation>
+ </message>
+ <message>
+ <source>SMESH_CANT_ADD_HYP</source>
+ <translation>「%1」を割り当てることはできません。</translation>
+ </message>
+ <message>
+ <source>SMESH_CANT_RM_HYP</source>
+ <translation>「%1」の割り当てを解除することができますないです。</translation>
+ </message>
+ <message>
+ <source>SMESH_CHECK_COLOR</source>
+ <translation>色</translation>
+ </message>
+ <message>
+ <source>SMESH_CLIPPING_FROM</source>
+ <translation><--</translation>
+ </message>
+ <message>
+ <source>SMESH_CLIPPING_INTO</source>
+ <translation>%> します。</translation>
+ </message>
+ <message>
+ <source>SMESH_CLIPPING_TITLE</source>
+ <translation>クリップを変更します。</translation>
+ </message>
+ <message>
+ <source>SMESH_COMPUTE_SUCCEED</source>
+ <translation>メッシュ計算を成功します。</translation>
+ </message>
+ <message>
+ <source>SMESH_EVALUATE_SUCCEED</source>
+ <translation>メッシュ評価成功します。</translation>
+ </message>
+ <message>
+ <source>SMESH_CONTENT</source>
+ <translation>コンテンツ</translation>
+ </message>
+ <message>
+ <source>SMESH_CONTINUE_MESH_VISUALIZATION</source>
+ <translation>それによりアプリケーションがクラッシュ、メッシュを表示するには、十分なメモリがないことようであります。可視化を続行しますか?</translation>
+ </message>
+ <message>
+ <source>SMESH_COORDINATES</source>
+ <translation>座標</translation>
+ </message>
+ <message>
+ <source>SMESH_COPY_ELEMENTS</source>
+ <translation>要素のコピー</translation>
+ </message>
+ <message>
+ <source>SMESH_COPY_GROUPS</source>
+ <translation>コピー グループ</translation>
+ </message>
+ <message>
+ <source>SMESH_CREATE_ALGORITHMS</source>
+ <translation>アルゴリズムを作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_CREATE_COPY</source>
+ <translation>コピーを作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_CREATE_GROUP_TITLE</source>
+ <translation>グループを作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_CREATE_GEO_GROUP</source>
+ <translation>ジオメトリ グループを作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_CREATE_HYPOTHESES</source>
+ <translation>仮説を作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_CREATE_MESH</source>
+ <translation>新しいメッシュを作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_CREATE_POLYHEDRAL_VOLUME_TITLE</source>
+ <translation>多面体のボリュームを作成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_DIAGONAL</source>
+ <translation>斜めの反転</translation>
+ </message>
+ <message>
+ <source>SMESH_DIAGONAL_INVERSION_TITLE</source>
+ <translation>斜めの反転</translation>
+ </message>
+ <message>
+ <source>SMESH_DISTANCE</source>
+ <translation>距離</translation>
+ </message>
+ <message>
+ <source>SMESH_DRS_1</source>
+ <translation>医学ファイルに指定した名前のメッシュが含まれていません。</translation>
+ </message>
+ <message>
+ <source>SMESH_DRS_2</source>
+ <translation>医学ファイルは要素数の範囲を重複しています、ファイルから番号は無視されます。</translation>
+ </message>
+ <message>
+ <source>SMESH_DRS_3</source>
+ <translation>不正なファイル データがいくつかの要素がスキップされました</translation>
+ </message>
+ <message>
+ <source>SMESH_DRS_4</source>
+ <translation>ファイルが正しいではない、いくつかのデータが失われて</translation>
+ </message>
+ <message>
+ <source>SMESH_DRS_EMPTY</source>
+ <translation>ファイルは空です、何も公開します。</translation>
+ </message>
+ <message>
+ <source>SMESH_DX</source>
+ <translation>dX</translation>
+ </message>
+ <message>
+ <source>SMESH_DY</source>
+ <translation>dY</translation>
+ </message>
+ <message>
+ <source>SMESH_DZ</source>
+ <translation>アルジェリア</translation>
+ </message>
+ <message>
+ <source>SMESH_ELEM0D</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>SMESH_ELEMS0D</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>SMESH_BALL_ELEM</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>SMESH_BALL</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>SMESH_BALLS</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>SMESH_EDGE</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_EDGES</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_EDGES_CONNECTIVITY_TITLE</source>
+ <translation>エッジ接続</translation>
+ </message>
+ <message>
+ <source>SMESH_EDIT_GROUP_TITLE</source>
+ <translation>[グループの編集</translation>
+ </message>
+ <message>
+ <source>SMESH_EDIT_GEOMGROUP_AS_GROUP_TITLE</source>
+ <translation>スタンドアロンとしてグループの編集</translation>
+ </message>
+ <message>
+ <source>SMESH_EDIT_HYPOTHESES</source>
+ <translation>仮説の割り当て</translation>
+ </message>
+ <message>
+ <source>SMESH_EDIT_USED</source>
+ <translation>使用</translation>
+ </message>
+ <message>
+ <source>SMESH_ELEMENTS</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>SMESH_ELEMENTS_COLOR</source>
+ <translation>メッシュ要素の色</translation>
+ </message>
+ <message>
+ <source>SMESH_ELEMENTS_TYPE</source>
+ <translation>要素型</translation>
+ </message>
+ <message>
+ <source>SMESH_ELEMENT_TYPE</source>
+ <translation>要素の型</translation>
+ </message>
+ <message>
+ <source>SMESH_ERROR</source>
+ <translation>エラー</translation>
+ </message>
+ <message>
+ <source>SMESH_ERR_SCALARBAR_PARAMS</source>
+ <translation>警告 !パラメーターが正しくありません。</translation>
+ </message>
+ <message>
+ <source>SMESH_EXPORT_FAILED</source>
+ <translation>メッシュのエクスポートに失敗しました。おそらく、ないディスクに十分なスペースです。</translation>
+ </message>
+ <message>
+ <source>SMESH_EXPORT_MED_DUPLICATED_GRP</source>
+ <translation>メッシュ「%1」に重複しているグループ名です。エクスポートをキャンセルし、名前を変更することができます、それ以外の場合は、結果のファイル内のいくつかのグループ名もの研究で一致しません。続行しますか。</translation>
+ </message>
+ <message>
+ <source>SMESH_EXPORT_MED_DUPLICATED_MESH_NAMES</source>
+ <translation>いくつかのメッシュ オブジェクトと、選択範囲内の同じ名前です。結果ファイルが正しくない可能性があります。続行しますか。</translation>
+ </message>
+ <message>
+ <source>SMESH_EXPORT_MED_V2_1</source>
+ <translation>名 - エクスポート メッシュ中 MED 2.1 ポリゴンと多面体要素に「%1」MED 2.2 は確かに MED の 2.1 にエクスポートする正しいエクスポート用に惜しまれることでしょうか?</translation>
+ </message>
+ <message>
+ <source>SMESH_EXPORT_MED_VERSION_COLLISION</source>
+ <translation>ファイル「%1」の音楽配信マック & バージョンは不明であるか、選択したバージョンと一致しません。ファイルを上書きしますか。</translation>
+ </message>
+ <message>
+ <source>SMESH_EXPORT_MED_MESH_NAMES_COLLISION</source>
+ <translation>選択したファイルには、既に次の名前のメッシュが含まれます:%1 結果ファイルが正しくない可能性があります。ファイルを上書きしますか。</translation>
+ </message>
+ <message>
+ <source>EXPORT_NOT_SUPPORTED</source>
+ <translation>エクスポート中にメッシュ名「%1」に%2%3 に惜しまれることでしょう。続行しますか。</translation>
+ </message>
+ <message>
+ <source>SMESH_EXTRUSION</source>
+ <translation>押出</translation>
+ </message>
+ <message>
+ <source>SMESH_EXTRUSION_TO_DISTANCE</source>
+ <translation>押出の距離</translation>
+ </message>
+ <message>
+ <source>SMESH_EXTRUSION_ALONG_VECTOR</source>
+ <translation>ベクトルに沿って押出</translation>
+ </message>
+ <message>
+ <source>SMESH_FACE</source>
+ <translation>顔</translation>
+ </message>
+ <message>
+ <source>SMESH_FEATUREANGLE</source>
+ <translation>機能の角度</translation>
+ </message>
+ <message>
+ <source>SMESH_FEATUREEDGES</source>
+ <translation>フィーチャー エッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_FILE_EXISTS</source>
+ <translation>ファイル「%1」は既に存在します。それを上書きするか、エクスポートされたデータにその内容を追加しますか。</translation>
+ </message>
+ <message>
+ <source>SMESH_FONT_ARIAL</source>
+ <translation>Ms p ゴシック</translation>
+ </message>
+ <message>
+ <source>SMESH_FONT_BOLD</source>
+ <translation>太字</translation>
+ </message>
+ <message>
+ <source>SMESH_FONT_COURIER</source>
+ <translation>宅配便</translation>
+ </message>
+ <message>
+ <source>SMESH_FONT_ITALIC</source>
+ <translation>斜体</translation>
+ </message>
+ <message>
+ <source>SMESH_FONT_SCALARBAR</source>
+ <translation>フォント</translation>
+ </message>
+ <message>
+ <source>SMESH_FONT_SHADOW</source>
+ <translation>シャドウ</translation>
+ </message>
+ <message>
+ <source>SMESH_FONT_TIMES</source>
+ <translation>回</translation>
+ </message>
+ <message>
+ <source>SMESH_GEOM_GROUP</source>
+ <translation>ジオメトリ グループ</translation>
+ </message>
+ <message>
+ <source>SMESH_GROUP</source>
+ <translation>グループ</translation>
+ </message>
+ <message>
+ <source>SMESH_GROUP_GEOMETRY</source>
+ <translation>ジオメトリ グループします。</translation>
+ </message>
+ <message>
+ <source>SMESH_GROUP_FILTER</source>
+ <translation>フィルターをグループ化します。</translation>
+ </message>
+ <message>
+ <source>SMESH_GROUP_SELECTED</source>
+ <translation>%1 グループ</translation>
+ </message>
+ <message>
+ <source>SMESH_GROUP_STANDALONE</source>
+ <translation>スタンドアロン グループ</translation>
+ </message>
+ <message>
+ <source>SMESH_GROUP_TYPE</source>
+ <translation>グループの種類</translation>
+ </message>
+ <message>
+ <source>SMESH_HEIGHT</source>
+ <translation>高さ:</translation>
+ </message>
+ <message>
+ <source>SMESH_HEXAS</source>
+ <translation>直方体</translation>
+ </message>
+ <message>
+ <source>SMESH_HEXAHEDRA</source>
+ <translation>Hexahedrons</translation>
+ </message>
+ <message>
+ <source>SMESH_HILIGHT_COLOR</source>
+ <translation>強調表示色</translation>
+ </message>
+ <message>
+ <source>SMESH_HORIZONTAL</source>
+ <translation>水平方向</translation>
+ </message>
+ <message>
+ <source>SMESH_HYPOTHESES</source>
+ <translation>仮説</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_1</source>
+ <translation>仮説のアルゴリズムをミスします。</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_10</source>
+ <translation>仮説とサブメッシュの大きさが一致しません</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_11</source>
+ <translation>図形は、メインの 1 つもそのサブも、有効なグループでもないです。</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_12</source>
+ <translation>アルゴリズムの期待チェック アルゴリズムについてサポートされているジオメトリは、ジオメトリの不一致します。</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_13</source>
+ <translation>アルゴリズムは、図形を働くことができません。</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_2</source>
+ <translation>上の図形が同時仮説です。</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_3</source>
+ <translation>仮説の不適切なパラメーター値をが</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_4</source>
+ <translation>%1 D の要素を生成する上のディメンションの別のアルゴリズムとしてサブメッシュは無視されます。</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_5</source>
+ <translation>アルゴリズムよりも低い次元のアルゴリズムがすべての寸法要素を生成することによって非表示にします。</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_6</source>
+ <translation>原因不明の致命的なエラー仮説の定義</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_7</source>
+ <translation>仮説は、現在のコンテキストに適していません。</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_8</source>
+ <translation>非準拠メッシュ応用仮説を使用して生成されます。</translation>
+ </message>
+ <message>
+ <source>SMESH_HYP_9</source>
+ <translation>そのような次元仮説は、既に図形に割り当てられています。</translation>
+ </message>
+ <message>
+ <source>SMESH_ID_DIAGONAL</source>
+ <translation>Id エッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_ID_ELEMENTS</source>
+ <translation>Id 要素</translation>
+ </message>
+ <message>
+ <source>SMESH_ID_FACES</source>
+ <translation>Id の顔</translation>
+ </message>
+ <message>
+ <source>SMESH_ID_NODES</source>
+ <translation>Id ノード</translation>
+ </message>
+ <message>
+ <source>SMESH_INCORRECT_INPUT</source>
+ <translation>不正な入力データ !</translation>
+ </message>
+ <message>
+ <source>SMESH_INFORMATION</source>
+ <translation>情報</translation>
+ </message>
+ <message>
+ <source>SMESH_INIT</source>
+ <translation>メッシュ</translation>
+ </message>
+ <message>
+ <source>SMESH_INIT_MESH</source>
+ <translation>メッシュ構造</translation>
+ </message>
+ <message>
+ <source>SMESH_INSUFFICIENT_DATA</source>
+ <translation>不十分な入力値</translation>
+ </message>
+ <message>
+ <source>SMESH_LABELS</source>
+ <translation>ラベル:</translation>
+ </message>
+ <message>
+ <source>SMESH_LABELS_COLORS_SCALARBAR</source>
+ <translation>色 && ラベル</translation>
+ </message>
+ <message>
+ <source>SMESH_LENGTH</source>
+ <translation>長さ</translation>
+ </message>
+ <message>
+ <source>SMESH_MAKE_GROUPS</source>
+ <translation>グループを生成します。</translation>
+ </message>
+ <message>
+ <source>SMESH_MANIFOLDEDGES</source>
+ <translation>多様体のエッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX</source>
+ <translation>最大</translation>
+ </message>
+ <message>
+ <source>SMESH_MEN_ALGORITHMS</source>
+ <translation>アルゴリズム</translation>
+ </message>
+ <message>
+ <source>SMESH_MEN_APPLIED_ALGORIHTMS</source>
+ <translation>適用されたアルゴリズム</translation>
+ </message>
+ <message>
+ <source>SMESH_MEN_APPLIED_HYPOTHESIS</source>
+ <translation>応用仮説</translation>
+ </message>
+ <message>
+ <source>SMESH_MEN_COMPONENT</source>
+ <translation>SMESH</translation>
+ </message>
+ <message>
+ <source>SMESH_MEN_HYPOTHESIS</source>
+ <translation>仮説</translation>
+ </message>
+ <message>
+ <source>SMESH_MEN_SubMeshesOnCompound</source>
+ <translation>SubMeshes 化合物</translation>
+ </message>
+ <message>
+ <source>SMESH_MEN_SubMeshesOnEdge</source>
+ <translation>SubMeshes エッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_MEN_SubMeshesOnFace</source>
+ <translation>SubMeshes 顔</translation>
+ </message>
+ <message>
+ <source>SMESH_MEN_SubMeshesOnSolid</source>
+ <translation>SubMeshes ソリッド</translation>
+ </message>
+ <message>
+ <source>SMESH_MEN_SubMeshesOnVertex</source>
+ <translation>頂点に subMeshes</translation>
+ </message>
+ <message>
+ <source>SMESH_AUTOMATIC</source>
+ <translation>自動</translation>
+ </message>
+ <message>
+ <source>SMESH_MANUAL</source>
+ <translation>手動</translation>
+ </message>
+ <message>
+ <source>SMESH_MERGE_ELEMENTS</source>
+ <translation>要素をマージします。</translation>
+ </message>
+ <message>
+ <source>SMESH_MODE</source>
+ <translation>モード</translation>
+ </message>
+ <message>
+ <source>SMESH_MERGED_ELEMENTS</source>
+ <translation>%1 要素をうまくマージしました。</translation>
+ </message>
+ <message>
+ <source>SMESH_MERGED_NODES</source>
+ <translation>%1 ノードが正常にマージします。</translation>
+ </message>
+ <message>
+ <source>SMESH_NO_ELEMENTS_DETECTED</source>
+ <translation>マージ要素はありません。</translation>
+ </message>
+ <message>
+ <source>SMESH_NO_NODES_DETECTED</source>
+ <translation>マージ ノードはありません。</translation>
+ </message>
+ <message>
+ <source>SMESH_MERGE_NODES</source>
+ <translation>節点はマージします。</translation>
+ </message>
+ <message>
+ <source>SMESH_MESH</source>
+ <translation>メッシュ</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_0DELEMS</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_BALLS</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_ALL_TYPES</source>
+ <translation>異種</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_EDGES</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_ELEMENTS</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_ENTITIES</source>
+ <translation>エンティティ</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_FACES</source>
+ <translation>直面しています。</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_HEXAS</source>
+ <translation>Hexahedrons</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_NAME</source>
+ <translation>名前</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_ORDER0</source>
+ <translation>合計</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_ORDER1</source>
+ <translation>線形</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_ORDER2</source>
+ <translation>2 次</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_HEXAPRISM</source>
+ <translation>六角形プリズム</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_POLYEDRES</source>
+ <translation>多面体</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_POLYGONES</source>
+ <translation>ポリゴン</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_PRISMS</source>
+ <translation>プリズム</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_PYRAS</source>
+ <translation>ピラミッド</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_QUADRANGLES</source>
+ <translation>四角形</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_TETRAS</source>
+ <translation>四面体</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_TITLE</source>
+ <translation>メッシュ情報</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_TOTAL</source>
+ <translation>合計</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_TRIANGLES</source>
+ <translation>三角形</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_TYPE</source>
+ <translation>タイプ</translation>
+ </message>
+ <message>
+ <source>SMESH_MESHINFO_VOLUMES</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>SMESH_MIN</source>
+ <translation>分</translation>
+ </message>
+ <message>
+ <source>SMESH_MOVE</source>
+ <translation>移動</translation>
+ </message>
+ <message>
+ <source>SMESH_MOVE_ELEMENTS</source>
+ <translation>要素を移動します。</translation>
+ </message>
+ <message>
+ <source>SMESH_MOVE_NODES_TITLE</source>
+ <translation>ノードの移動</translation>
+ </message>
+ <message>
+ <source>SMESH_NAME</source>
+ <translation>名前</translation>
+ </message>
+ <message>
+ <source>SMESH_NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>SMESH_NONMANIFOLDEDGES</source>
+ <translation>非多様体のエッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_NORMAL</source>
+ <translation>通常</translation>
+ </message>
+ <message>
+ <source>SMESH_NO_MESH_VISUALIZATION</source>
+ <translation>メッシュを表示するには、十分なメモリがありません。</translation>
+ </message>
+ <message>
+ <source>SMESH_NUMBEROFCOLORS</source>
+ <translation>色の注意:</translation>
+ </message>
+ <message>
+ <source>SMESH_NUMBEROFLABELS</source>
+ <translation>ラベルの注意:</translation>
+ </message>
+ <message>
+ <source>SMESH_NUMBEROFSTEPS</source>
+ <translation>ステップの数:</translation>
+ </message>
+ <message>
+ <source>SMESH_OBJECTS_SELECTED</source>
+ <translation>%1_objects</translation>
+ </message>
+ <message>
+ <source>SMESH_OBJECT_ALGORITHM</source>
+ <translation>アルゴリズム</translation>
+ </message>
+ <message>
+ <source>SMESH_OBJECT_GEOM</source>
+ <translation>幾何学的オブジェクト</translation>
+ </message>
+ <message>
+ <source>SMESH_OBJECT_HYPOTHESIS</source>
+ <translation>仮説</translation>
+ </message>
+ <message>
+ <source>SMESH_OBJECT_MESH</source>
+ <translation>メッシュ</translation>
+ </message>
+ <message>
+ <source>SMESH_OBJECT_MESHorSUBMESH</source>
+ <translation>メッシュまたはサブメッシュ</translation>
+ </message>
+ <message>
+ <source>SMESH_OPERATION_FAILED</source>
+ <translation>操作に失敗しました</translation>
+ </message>
+ <message>
+ <source>SMESH_OCTA</source>
+ <translation>クック プリズム</translation>
+ </message>
+ <message>
+ <source>SMESH_OCTAHEDRA</source>
+ <translation>クック プリズム</translation>
+ </message>
+ <message>
+ <source>TOP_OCTA</source>
+ <translation>角柱</translation>
+ </message>
+ <message>
+ <source>MEN_OCTA</source>
+ <translation>角柱</translation>
+ </message>
+ <message>
+ <source>STB_OCTA</source>
+ <translation>角柱</translation>
+ </message>
+ <message>
+ <source>SMESH_ORIENTATION</source>
+ <translation>印刷の向き</translation>
+ </message>
+ <message>
+ <source>SMESH_ORIENTATION_ELEMENTS_TITLE</source>
+ <translation>向きを変更します。</translation>
+ </message>
+ <message>
+ <source>SMESH_OUTLINE_COLOR</source>
+ <translation>メッシュ オブジェクトの色</translation>
+ </message>
+ <message>
+ <source>SMESH_PARAMETERS</source>
+ <translation>パラメーター</translation>
+ </message>
+ <message>
+ <source>SMESH_PENTA</source>
+ <translation>表層五面体</translation>
+ </message>
+ <message>
+ <source>SMESH_PENTAHEDRA</source>
+ <translation>Pentahedrons</translation>
+ </message>
+ <message>
+ <source>TOP_PENTA</source>
+ <translation>表層五面体</translation>
+ </message>
+ <message>
+ <source>MEN_PENTA</source>
+ <translation>表層五面体</translation>
+ </message>
+ <message>
+ <source>STB_PENTA</source>
+ <translation>表層五面体</translation>
+ </message>
+ <message>
+ <source>SMESH_PLANE</source>
+ <translation>飛行機</translation>
+ </message>
+ <message>
+ <source>SMESH_POINT</source>
+ <translation>ポイント</translation>
+ </message>
+ <message>
+ <source>SMESH_POINT_1</source>
+ <translation>ポイント 1</translation>
+ </message>
+ <message>
+ <source>SMESH_POINT_2</source>
+ <translation>ポイント 2</translation>
+ </message>
+ <message>
+ <source>SMESH_BASE_POINT</source>
+ <translation>基点</translation>
+ </message>
+ <message>
+ <source>SMESH_POLYEDRE_CREATE_ERROR</source>
+ <translation>Polyedron の作成エラー</translation>
+ </message>
+ <message>
+ <source>SMESH_POLYEDRON</source>
+ <translation>多面体</translation>
+ </message>
+ <message>
+ <source>SMESH_POLYEDRONS</source>
+ <translation>多面体</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_POLYEDRON</source>
+ <translation>二次多面体</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_POLYEDRONS</source>
+ <translation>二次多面体</translation>
+ </message>
+ <message>
+ <source>SMESH_POLYGON</source>
+ <translation>多角形</translation>
+ </message>
+ <message>
+ <source>SMESH_POLYGONS</source>
+ <translation>ポリゴン</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_POLYGON</source>
+ <translation>二次ポリゴン</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_POLYGONS</source>
+ <translation>二次ポリゴン</translation>
+ </message>
+ <message>
+ <source>SMESH_POSITION_SIZE_SCALARBAR</source>
+ <translation>起源 && サイズ</translation>
+ </message>
+ <message>
+ <source>SMESH_DISTRIBUTION_SCALARBAR</source>
+ <translation>配布</translation>
+ </message>
+ <message>
+ <source>SMESH_SHOW_DISTRIBUTION_SCALARBAR</source>
+ <translation>分布を表示します。</translation>
+ </message>
+ <message>
+ <source>SMESH_PRECISION</source>
+ <translation>精度</translation>
+ </message>
+ <message>
+ <source>SMESH_PREFERENCES_SCALARBAR</source>
+ <translation>スカラー バー設定項目</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_SELECTION</source>
+ <translation>設定 - 選択</translation>
+ </message>
+ <message>
+ <source>SMESH_PRESELECTION</source>
+ <translation>予選</translation>
+ </message>
+ <message>
+ <source>SMESH_PRISM</source>
+ <translation>プリズム</translation>
+ </message>
+ <message>
+ <source>SMESH_PROPERTIES_SCALARBAR</source>
+ <translation>スカラー バーのプロパティ</translation>
+ </message>
+ <message>
+ <source>SMESH_PYRAMID</source>
+ <translation>ピラミッド</translation>
+ </message>
+ <message>
+ <source>SMESH_PYRAMIDS</source>
+ <translation>ピラミッド</translation>
+ </message>
+ <message>
+ <source>MEN_PYRAMID</source>
+ <translation>ピラミッド</translation>
+ </message>
+ <message>
+ <source>TOP_PYRAMID</source>
+ <translation>ピラミッド</translation>
+ </message>
+ <message>
+ <source>STB_PYRAMID</source>
+ <translation>ピラミッド</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRANGLE</source>
+ <translation>四角形</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRANGLES</source>
+ <translation>四角形</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_EDGE</source>
+ <translation>2 次のエッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_EDGES</source>
+ <translation>2 次のエッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_HEXAHEDRON</source>
+ <translation>二次六面体</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_HEXAHEDRONS</source>
+ <translation>二次 Hexahedrons</translation>
+ </message>
+ <message>
+ <source>SMESH_TRIQUADRATIC_HEXAHEDRON</source>
+ <translation>TriQuadratic 直方体</translation>
+ </message>
+ <message>
+ <source>SMESH_TRIQUADRATIC_HEXAHEDRONS</source>
+ <translation>TriQuadratic Hexahedrons</translation>
+ </message>
+ <message>
+ <source>TOP_TRIQUADRATIC_HEXAHEDRON</source>
+ <translation>TriQuadratic 直方体</translation>
+ </message>
+ <message>
+ <source>MEN_TRIQUADRATIC_HEXAHEDRON</source>
+ <translation>TriQuadratic 直方体</translation>
+ </message>
+ <message>
+ <source>STB_TRIQUADRATIC_HEXAHEDRON</source>
+ <translation>TriQuadratic 直方体</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_PENTAHEDRON</source>
+ <translation>二次 5面体</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_PENTAHEDRONS</source>
+ <translation>二次 Pentahedrons</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_PYRAMID</source>
+ <translation>二次ピラミッド</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_PYRAMIDS</source>
+ <translation>二次ピラミッド</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_QUADRANGLE</source>
+ <translation>二次四角形</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_QUADRANGLES</source>
+ <translation>二次四角形</translation>
+ </message>
+ <message>
+ <source>SMESH_BIQUADRATIC_QUADRANGLE</source>
+ <translation>バイカッド四角形</translation>
+ </message>
+ <message>
+ <source>SMESH_BIQUADRATIC_QUADRANGLES</source>
+ <translation>バイカッド四角形</translation>
+ </message>
+ <message>
+ <source>MEN_BIQUADRATIC_QUADRANGLE</source>
+ <translation>バイカッド四角形</translation>
+ </message>
+ <message>
+ <source>TOP_BIQUADRATIC_QUADRANGLE</source>
+ <translation>バイカッド四角形</translation>
+ </message>
+ <message>
+ <source>STB_BIQUADRATIC_QUADRANGLE</source>
+ <translation>バイカッド四角形</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_TETRAHEDRON</source>
+ <translation>二次四面体</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_TETRAHEDRONS</source>
+ <translation>二次四面体</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_TRIANGLE</source>
+ <translation>2 次三角形</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRATIC_TRIANGLES</source>
+ <translation>2 次三角形</translation>
+ </message>
+ <message>
+ <source>SMESH_RANGE_MAX</source>
+ <translation>最大値:</translation>
+ </message>
+ <message>
+ <source>SMESH_RANGE_MIN</source>
+ <translation>最小値:</translation>
+ </message>
+ <message>
+ <source>SMESH_RANGE_SCALARBAR</source>
+ <translation>スカラー範囲</translation>
+ </message>
+ <message>
+ <source>SMESH_REALLY_DELETE</source>
+ <translation>本当にこの%1 オブジェクトを削除しますか。: %2</translation>
+ </message>
+ <message>
+ <source>SMESH_REMOVE</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>SMESH_REMOVE_ELEMENTS_TITLE</source>
+ <translation>要素を削除します。</translation>
+ </message>
+ <message>
+ <source>SMESH_REMOVE_NODES_TITLE</source>
+ <translation>ノードを削除します。</translation>
+ </message>
+ <message>
+ <source>SMESH_RENUMBERING</source>
+ <translation>番号を付け替える</translation>
+ </message>
+ <message>
+ <source>SMESH_RENUMBERING_ELEMENTS_TITLE</source>
+ <translation>要素の番号を付け替える</translation>
+ </message>
+ <message>
+ <source>SMESH_RENUMBERING_NODES_TITLE</source>
+ <translation>ノード番号の再割り当てください。</translation>
+ </message>
+ <message>
+ <source>SMESH_REVERSE</source>
+ <translation>逆</translation>
+ </message>
+ <message>
+ <source>SMESH_REVOLUTION</source>
+ <translation>革命</translation>
+ </message>
+ <message>
+ <source>SMESH_RM_HYP_WRN</source>
+ <translation>「割り当てられていない%1」が。</translation>
+ </message>
+ <message>
+ <source>SMESH_ROTATION</source>
+ <translation>回転</translation>
+ </message>
+ <message>
+ <source>SMESH_ROTATION_TITLE</source>
+ <translation>軸についての回転</translation>
+ </message>
+ <message>
+ <source>SMESH_SCALARBAR</source>
+ <translation>スカラー バー</translation>
+ </message>
+ <message>
+ <source>SMESH_SEGMENTS</source>
+ <translation>セグメント</translation>
+ </message>
+ <message>
+ <source>SMESH_SELECTION</source>
+ <translation>選択</translation>
+ </message>
+ <message>
+ <source>SMESH_SELECT_FROM</source>
+ <translation>選択します</translation>
+ </message>
+ <message>
+ <source>SMESH_SELECT_WHOLE_MESH</source>
+ <translation>全体のメッシュ、サブメッシュまたはグループを選択します</translation>
+ </message>
+ <message>
+ <source>SMESH_SUBMESH_GROUP</source>
+ <translation>メッシュ、サブメッシュ、グループ</translation>
+ </message>
+ <message>
+ <source>SMESH_SET_COLOR</source>
+ <translation>カラー グループ</translation>
+ </message>
+ <message>
+ <source>SMESH_SEWING</source>
+ <translation>縫製</translation>
+ </message>
+ <message>
+ <source>SMESH_SMOOTHING</source>
+ <translation>平滑化</translation>
+ </message>
+ <message>
+ <source>SMESH_STANDARD_MESHINFO_TITLE</source>
+ <translation>標準的なメッシュ情報</translation>
+ </message>
+ <message>
+ <source>SMESH_SUBMESH</source>
+ <translation>サブメッシュ</translation>
+ </message>
+ <message>
+ <source>SMESH_SUBMESH_SELECTED</source>
+ <translation>%1 SubMeshes</translation>
+ </message>
+ <message>
+ <source>SMESH_SYMMETRY</source>
+ <translation>対称性</translation>
+ </message>
+ <message>
+ <source>SMESH_TETRAS</source>
+ <translation>四面体</translation>
+ </message>
+ <message>
+ <source>SMESH_TETRAHEDRA</source>
+ <translation>四面体</translation>
+ </message>
+ <message>
+ <source>SMESH_TITLE</source>
+ <translation>タイトル:</translation>
+ </message>
+ <message>
+ <source>SMESH_TOLERANCE</source>
+ <translation>トレランス</translation>
+ </message>
+ <message>
+ <source>SMESH_TRANSLATION</source>
+ <translation>翻訳</translation>
+ </message>
+ <message>
+ <source>SMESH_SCALE_TITLE</source>
+ <translation>スケール変換</translation>
+ </message>
+ <message>
+ <source>SMESH_DUPLICATE_TITLE</source>
+ <translation>重複したノード</translation>
+ </message>
+ <message>
+ <source>SMESH_SCALE</source>
+ <translation>スケール</translation>
+ </message>
+ <message>
+ <source>SMESH_SCALE_FACTOR</source>
+ <translation>スケール ファクター。</translation>
+ </message>
+ <message>
+ <source>SMESH_SCALE_FACTOR_X</source>
+ <translation>スケール ファクター X:</translation>
+ </message>
+ <message>
+ <source>SMESH_SCALE_FACTOR_Y</source>
+ <translation>スケール ファクター Y:</translation>
+ </message>
+ <message>
+ <source>SMESH_SCALE_FACTOR_Z</source>
+ <translation>尺度係数 Z:</translation>
+ </message>
+ <message>
+ <source>SMESH_TRANSPARENCY_OPAQUE</source>
+ <translation>不透明</translation>
+ </message>
+ <message>
+ <source>SMESH_TRANSPARENCY_TITLE</source>
+ <translation>透明度を変更します。</translation>
+ </message>
+ <message>
+ <source>SMESH_TRANSPARENCY_TRANSPARENT</source>
+ <translation>透明</translation>
+ </message>
+ <message>
+ <source>SMESH_TRIANGLE</source>
+ <translation>三角形</translation>
+ </message>
+ <message>
+ <source>SMESH_TRIANGLES</source>
+ <translation>三角形</translation>
+ </message>
+ <message>
+ <source>SMESH_UPDATEVIEW</source>
+ <translation>ビューを更新します。</translation>
+ </message>
+ <message>
+ <source>SMESH_VALUE</source>
+ <translation>値</translation>
+ </message>
+ <message>
+ <source>SMESH_VECTOR</source>
+ <translation>ベクトル</translation>
+ </message>
+ <message>
+ <source>SMESH_VERTICAL</source>
+ <translation>垂直方向</translation>
+ </message>
+ <message>
+ <source>SMESH_DISTRIBUTION_COLORING_TYPE</source>
+ <translation>着色型</translation>
+ </message>
+ <message>
+ <source>SMESH_MONOCOLOR</source>
+ <translation>単色</translation>
+ </message>
+ <message>
+ <source>SMESH_DISTRIBUTION_COLOR</source>
+ <translation>配布の色:</translation>
+ </message>
+ <message>
+ <source>SMESH_MULTICOLOR</source>
+ <translation>多色</translation>
+ </message>
+ <message>
+ <source>SMESH_VISU_PROBLEM</source>
+ <translation>メッシュの可視化は、おそらくためメモリ不足のため失敗</translation>
+ </message>
+ <message>
+ <source>SMESH_VISU_PROBLEM_CLEAR</source>
+ <translation>メッシュの可視化に失敗しました、ライブ アプリケーションに削除されたすべての視覚的なデータも、メッセージを表示するメモリがありません。アプリケーションがクラッシュする前に作業を保存するを検討してください。</translation>
+ </message>
+ <message>
+ <source>SMESH_VOLUME</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>SMESH_WARNING</source>
+ <translation>警告</translation>
+ </message>
+ <message>
+ <source>SMESH_WHAT_IS_TITLE</source>
+ <translation>メッシュ要素情報</translation>
+ </message>
+ <message>
+ <source>SMESH_WIDTH</source>
+ <translation>幅:</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_ALGORITHM_ALREADYEXIST</source>
+ <translation>アルゴリズムが既に存在します。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_COMPUTE_FAILED</source>
+ <translation>メッシュの計算に失敗しました</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_EVALUATE_FAILED</source>
+ <translation>メッシュ評価に失敗しました</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_EMPTY_NAME</source>
+ <translation>空の名前が無効です。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_HYPOTHESIS_ALREADYEXIST</source>
+ <translation>仮説が既に存在します。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_HYPOTHESIS_NOTEXIST</source>
+ <translation>仮説またはアルゴリズムが存在するのではないです。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_MISSING_PARAMETERS</source>
+ <translation>不足しているパラメーター</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_NO_AVAILABLE_DATA</source>
+ <translation>選択に利用可能なデータがありません。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_SELECTIONMODE_DIAGONAL</source>
+ <translation>リンク選択モードをアクティブにします。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_SELECTIONMODE_ELEMENTS</source>
+ <translation>要素選択モードをアクティブにします。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_SELECTIONMODE_NODES</source>
+ <translation>ノード選択モードをアクティブにします。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_VIEWER_VTK</source>
+ <translation>研究フレーム VTK ビューアーをアクティブ化する必要があります。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_SIZE_LIMIT_EXCEEDED</source>
+ <translation>プレゼンテーションの自動更新が行われていない: 新しいメッシュ サイズ (%1 要素) は、現在のサイズ制限 (%2 要素) を超えています。メッシュ モジュールの設定を確認してください。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_WARNING</source>
+ <translation>警告</translation>
+ </message>
+ <message>
+ <source>SMESH_X</source>
+ <translation>X</translation>
+ </message>
+ <message>
+ <source>SMESH_X_SCALARBAR</source>
+ <translation>X:</translation>
+ </message>
+ <message>
+ <source>SMESH_Y</source>
+ <translation>Y</translation>
+ </message>
+ <message>
+ <source>SMESH_Y_SCALARBAR</source>
+ <translation>Y:</translation>
+ </message>
+ <message>
+ <source>SMESH_Z</source>
+ <translation>Z</translation>
+ </message>
+ <message>
+ <source>STATE_ALGO_MISSING</source>
+ <translation>%3-2 D のアルゴリズムがありません。</translation>
+ </message>
+ <message>
+ <source>STATE_HYP_BAD_GEOMETRY</source>
+ <translation>%3-2 D アルゴリズム「%1」への期待の不一致のジオメトリに割り当てられています。</translation>
+ </message>
+ <message>
+ <source>STATE_HYP_BAD_PARAMETER</source>
+ <translation>%3%の仮説 2 D アルゴリズム「%1」が無効なパラメーター値</translation>
+ </message>
+ <message>
+ <source>STATE_HYP_MISSING</source>
+ <translation>%3%2 D アルゴリズム「%1」ミス%4 D 仮説</translation>
+ </message>
+ <message>
+ <source>STATE_HYP_NOTCONFORM</source>
+ <translation>%3%2 D アルゴリズム「%1」の食材はメッシュ、適合しない: グローバル「適合メッシュできません」hypotesis が見つかりません</translation>
+ </message>
+ <message>
+ <source>STB_ADV_INFO</source>
+ <translation>メッシュ オブジェクトに関する基本情報を表示します。</translation>
+ </message>
+ <message>
+ <source>STB_ALL</source>
+ <translation>すべて</translation>
+ </message>
+ <message>
+ <source>STB_AREA</source>
+ <translation>エリア</translation>
+ </message>
+ <message>
+ <source>STB_ASPECT</source>
+ <translation>アスペクト比</translation>
+ </message>
+ <message>
+ <source>STB_ASPECT_3D</source>
+ <translation>アスペクト比 3 D</translation>
+ </message>
+ <message>
+ <source>STB_AUTO_COLOR</source>
+ <translation>自動カラー補正</translation>
+ </message>
+ <message>
+ <source>STB_AUTO_UPD</source>
+ <translation>自動更新</translation>
+ </message>
+ <message>
+ <source>STB_BUILD_COMPOUND</source>
+ <translation>複合メッシュを構築します。</translation>
+ </message>
+ <message>
+ <source>STB_COPY_MESH</source>
+ <translation>メッシュをコピーします。</translation>
+ </message>
+ <message>
+ <source>STB_CLIP</source>
+ <translation>クリッピング</translation>
+ </message>
+ <message>
+ <source>STB_COLORS</source>
+ <translation>プロパティ</translation>
+ </message>
+ <message>
+ <source>STB_COMPUTE</source>
+ <translation>計算</translation>
+ </message>
+ <message>
+ <source>STB_PRECOMPUTE</source>
+ <translation>プレビュー</translation>
+ </message>
+ <message>
+ <source>STB_EVALUATE</source>
+ <translation>評価</translation>
+ </message>
+ <message>
+ <source>STB_CONNECTION</source>
+ <translation>複数の罫線</translation>
+ </message>
+ <message>
+ <source>STB_CONNECTION_2D</source>
+ <translation>国境で多種の 2 D</translation>
+ </message>
+ <message>
+ <source>STB_CONSTRUCT_GROUP</source>
+ <translation>構成グループ</translation>
+ </message>
+ <message>
+ <source>STB_CONV_TO_QUAD</source>
+ <translation>2 次に/から変換します。</translation>
+ </message>
+ <message>
+ <source>STB_2D_FROM_3D</source>
+ <translation>境界要素を作成します。</translation>
+ </message>
+ <message>
+ <source>STB_MESH_ORDER</source>
+ <translation>サブメッシュ優先度の変更</translation>
+ </message>
+ <message>
+ <source>STB_CREATE_GROUP</source>
+ <translation>グループを作成します。</translation>
+ </message>
+ <message>
+ <source>STB_CREATE_GEO_GROUP</source>
+ <translation>ジオメトリ グループを作成します。</translation>
+ </message>
+ <message>
+ <source>STB_CREATE_MESH</source>
+ <translation>メッシュを作成します。</translation>
+ </message>
+ <message>
+ <source>STB_CREATE_SUBMESH</source>
+ <translation>サブメッシュを作成します。</translation>
+ </message>
+ <message>
+ <source>STB_CUT</source>
+ <translation>四角形の切断</translation>
+ </message>
+ <message>
+ <source>STB_CUT_GROUP</source>
+ <translation>グループをカットします。</translation>
+ </message>
+ <message>
+ <source>STB_DAT</source>
+ <translation>DAT ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_IMPORT_DAT</source>
+ <translation>DAT ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>STB_DELETE</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>STB_DEL_GROUP</source>
+ <translation>グループの内容を削除します。</translation>
+ </message>
+ <message>
+ <source>STB_FACE_ORIENTATION</source>
+ <translation>顔の向き</translation>
+ </message>
+ <message>
+ <source>STB_DISABLE_AUTO_COLOR</source>
+ <translation>自動カラー補正を無効にします。</translation>
+ </message>
+ <message>
+ <source>STB_DISPLAY_ONLY</source>
+ <translation>のみを表示します。</translation>
+ </message>
+ <message>
+ <source>STB_DISP_ENT</source>
+ <translation>エンティティを表示します。</translation>
+ </message>
+ <message>
+ <source>STB_ELEM0D</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>STB_0D_ON_ALL_NODES</source>
+ <translation>0 D 要素の要素ノードを</translation>
+ </message>
+ <message>
+ <source>STB_ELEMS0D</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>STB_BALLS</source>
+ <translation>ボールの要素</translation>
+ </message>
+ <message>
+ <source>STB_BALL</source>
+ <translation>ボールの要素</translation>
+ </message>
+ <message>
+ <source>STB_EDGE</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>STB_EDGES</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>STB_EDIT_GROUP</source>
+ <translation>[グループの編集</translation>
+ </message>
+ <message>
+ <source>STB_EDIT_GEOMGROUP_AS_GROUP</source>
+ <translation>スタンドアロンとしてグループの編集</translation>
+ </message>
+ <message>
+ <source>STB_EDIT_HYPO</source>
+ <translation>仮説を編集します。</translation>
+ </message>
+ <message>
+ <source>STB_EDIT_MESHSUBMESH</source>
+ <translation>メッシュ/サブ mesh を編集します。</translation>
+ </message>
+ <message>
+ <source>STB_EXPORT_DAT</source>
+ <translation>DAT ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_EXPORT_MED</source>
+ <translation>医学ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_EXPORT_CGNS</source>
+ <translation>CGNS ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_EXPORT_GMF</source>
+ <translation>組み換えファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_EXPORT_SAUV</source>
+ <translation>SAUV ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_EXPORT_STL</source>
+ <translation>STL ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_EXPORT_UNV</source>
+ <translation>UNV ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_EXTRUSION</source>
+ <translation>押出</translation>
+ </message>
+ <message>
+ <source>STB_EXTRUSION_ALONG</source>
+ <translation>押し出しパスに沿って</translation>
+ </message>
+ <message>
+ <source>STB_FACES</source>
+ <translation>直面しています。</translation>
+ </message>
+ <message>
+ <source>STB_BARE_BORDER_VOLUME</source>
+ <translation>ボリュームが裸の枠線</translation>
+ </message>
+ <message>
+ <source>STB_BARE_BORDER_FACE</source>
+ <translation>顔が裸の枠線</translation>
+ </message>
+ <message>
+ <source>STB_OVER_CONSTRAINED_VOLUME</source>
+ <translation>過剰のボリューム</translation>
+ </message>
+ <message>
+ <source>STB_OVER_CONSTRAINED_FACE</source>
+ <translation>過剰拘束面</translation>
+ </message>
+ <message>
+ <source>STB_FREE_BORDER</source>
+ <translation>無料の罫線</translation>
+ </message>
+ <message>
+ <source>STB_FREE_EDGE</source>
+ <translation>自由辺</translation>
+ </message>
+ <message>
+ <source>STB_FREE_NODE</source>
+ <translation>無料ノード</translation>
+ </message>
+ <message>
+ <source>STB_FREE_FACES</source>
+ <translation>無料顔</translation>
+ </message>
+ <message>
+ <source>STB_GLOBAL_HYPO</source>
+ <translation>グローバルな仮説</translation>
+ </message>
+ <message>
+ <source>STB_HEXA</source>
+ <translation>直方体</translation>
+ </message>
+ <message>
+ <source>STB_HIDE</source>
+ <translation>非表示</translation>
+ </message>
+ <message>
+ <source>STB_INT_GROUP</source>
+ <translation>グループが交差します。</translation>
+ </message>
+ <message>
+ <source>STB_INV</source>
+ <translation>斜めの反転</translation>
+ </message>
+ <message>
+ <source>STB_LENGTH</source>
+ <translation>長さ</translation>
+ </message>
+ <message>
+ <source>STB_LENGTH_2D</source>
+ <translation>長さ 2 D</translation>
+ </message>
+ <message>
+ <source>STB_MAP</source>
+ <translation>パターンのマッピング</translation>
+ </message>
+ <message>
+ <source>STB_MAX_ELEMENT_LENGTH_2D</source>
+ <translation>要素の直径 2 D</translation>
+ </message>
+ <message>
+ <source>STB_MAX_ELEMENT_LENGTH_3D</source>
+ <translation>要素の直径 3 D</translation>
+ </message>
+ <message>
+ <source>STB_IMPORT_MED</source>
+ <translation>音楽配信マック & ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>STB_MED</source>
+ <translation>音楽配信マック & ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_IMPORT_STL</source>
+ <translation>STL ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>STB_STL</source>
+ <translation>STL ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_IMPORT_CGNS</source>
+ <translation>CGNS ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>STB_CGNS</source>
+ <translation>CGNS ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_IMPORT_GMF</source>
+ <translation>組み換えファイルのインポート</translation>
+ </message>
+ <message>
+ <source>STB_GMF</source>
+ <translation>組み換えファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_IMPORT_SAUV</source>
+ <translation>SAUV ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>STB_SAUV</source>
+ <translation>SAUV ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_MERGE</source>
+ <translation>節点はマージします。</translation>
+ </message>
+ <message>
+ <source>STB_MERGE_ELEMENTS</source>
+ <translation>要素をマージします。</translation>
+ </message>
+ <message>
+ <source>STB_MESH_THROU_POINT</source>
+ <translation>ノードの移動</translation>
+ </message>
+ <message>
+ <source>STB_MIN_ANG</source>
+ <translation>最小角度</translation>
+ </message>
+ <message>
+ <source>STB_MOVE</source>
+ <translation>ノードの移動</translation>
+ </message>
+ <message>
+ <source>STB_NODE</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>STB_NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>STB_NUM_ELEMENTS</source>
+ <translation>要素を表示します。</translation>
+ </message>
+ <message>
+ <source>STB_NUM_NODES</source>
+ <translation>ノードを表示します。</translation>
+ </message>
+ <message>
+ <source>STB_ORIENT</source>
+ <translation>印刷の向き</translation>
+ </message>
+ <message>
+ <source>STB_POLYGON</source>
+ <translation>多角形</translation>
+ </message>
+ <message>
+ <source>STB_POLYHEDRON</source>
+ <translation>多面体</translation>
+ </message>
+ <message>
+ <source>STB_PRECISION</source>
+ <translation>精度</translation>
+ </message>
+ <message>
+ <source>STB_QUAD</source>
+ <translation>四角形</translation>
+ </message>
+ <message>
+ <source>STB_QUADRATIC_EDGE</source>
+ <translation>2 次のエッジ</translation>
+ </message>
+ <message>
+ <source>STB_QUADRATIC_HEXAHEDRON</source>
+ <translation>二次六面体</translation>
+ </message>
+ <message>
+ <source>STB_QUADRATIC_PENTAHEDRON</source>
+ <translation>二次 5面体</translation>
+ </message>
+ <message>
+ <source>STB_QUADRATIC_PYRAMID</source>
+ <translation>二次ピラミッド</translation>
+ </message>
+ <message>
+ <source>STB_QUADRATIC_QUADRANGLE</source>
+ <translation>二次四角形</translation>
+ </message>
+ <message>
+ <source>STB_QUADRATIC_TETRAHEDRON</source>
+ <translation>二次四面体</translation>
+ </message>
+ <message>
+ <source>STB_QUADRATIC_TRIANGLE</source>
+ <translation>2 次三角形</translation>
+ </message>
+ <message>
+ <source>STB_REMOVE_ELEMENTS</source>
+ <translation>要素を削除します。</translation>
+ </message>
+ <message>
+ <source>STB_REMOVE_NODES</source>
+ <translation>ノードを削除します。</translation>
+ </message>
+ <message>
+ <source>STB_REMOVE_ORPHAN_NODES</source>
+ <translation>孤児ノードを削除します。</translation>
+ </message>
+ <message>
+ <source>STB_RENAME</source>
+ <translation>名前の変更</translation>
+ </message>
+ <message>
+ <source>STB_RENUM_ELEMENTS</source>
+ <translation>要素の番号を付け替える</translation>
+ </message>
+ <message>
+ <source>STB_RENUM_NODES</source>
+ <translation>ノード番号の再割り当てください。</translation>
+ </message>
+ <message>
+ <source>STB_RESET</source>
+ <translation>リセット</translation>
+ </message>
+ <message>
+ <source>STB_SAVE_DISTRIBUTION</source>
+ <translation>配布ファイルに保存します。</translation>
+ </message>
+ <message>
+ <source>STB_SHOW_DISTRIBUTION</source>
+ <translation>分布を表示します。</translation>
+ </message>
+ <message>
+ <source>STB_REVOLUTION</source>
+ <translation>革命</translation>
+ </message>
+ <message>
+ <source>STB_ROT</source>
+ <translation>回転</translation>
+ </message>
+ <message>
+ <source>STB_SCALAR_BAR</source>
+ <translation>スカラー バー</translation>
+ </message>
+ <message>
+ <source>STB_SCALAR_BAR_PROP</source>
+ <translation>スカラー プロパティ バー</translation>
+ </message>
+ <message>
+ <source>STB_SELECTION</source>
+ <translation>選択</translation>
+ </message>
+ <message>
+ <source>STB_SEL_FILTER_LIB</source>
+ <translation>選択フィルター ライブラリ</translation>
+ </message>
+ <message>
+ <source>STB_SEW</source>
+ <translation>縫製</translation>
+ </message>
+ <message>
+ <source>STB_SHADE</source>
+ <translation>網かけの設定</translation>
+ </message>
+ <message>
+ <source>STB_SHOW</source>
+ <translation>ショー</translation>
+ </message>
+ <message>
+ <source>STB_SHRINK</source>
+ <translation>縮小</translation>
+ </message>
+ <message>
+ <source>STB_SKEW</source>
+ <translation>傾斜</translation>
+ </message>
+ <message>
+ <source>STB_SMOOTH</source>
+ <translation>平滑化</translation>
+ </message>
+ <message>
+ <source>STB_STD_INFO</source>
+ <translation>標準的なメッシュ情報</translation>
+ </message>
+ <message>
+ <source>STB_SYM</source>
+ <translation>対称性</translation>
+ </message>
+ <message>
+ <source>STB_TAPER</source>
+ <translation>テーパ</translation>
+ </message>
+ <message>
+ <source>STB_TETRA</source>
+ <translation>四面体</translation>
+ </message>
+ <message>
+ <source>STB_TRANS</source>
+ <translation>翻訳</translation>
+ </message>
+ <message>
+ <source>STB_SCALE</source>
+ <translation>スケール変換</translation>
+ </message>
+ <message>
+ <source>STB_DUPLICATE_NODES</source>
+ <translation>重複したノード</translation>
+ </message>
+ <message>
+ <source>STB_TRANSP</source>
+ <translation>透明性</translation>
+ </message>
+ <message>
+ <source>STB_TRIANGLE</source>
+ <translation>三角形</translation>
+ </message>
+ <message>
+ <source>STB_UNASSIGN</source>
+ <translation>割り当てを解除します。</translation>
+ </message>
+ <message>
+ <source>STB_UNION</source>
+ <translation>三角形の和集合</translation>
+ </message>
+ <message>
+ <source>STB_UNION2</source>
+ <translation>2 つの三角形の和集合</translation>
+ </message>
+ <message>
+ <source>STB_IMPORT_UNV</source>
+ <translation>UNV ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>STB_UNV</source>
+ <translation>UNV ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>STB_UN_GROUP</source>
+ <translation>連合のグループ</translation>
+ </message>
+ <message>
+ <source>STB_UNDERLYING_ELEMS</source>
+ <translation>優れた寸法の既存のグループからのエンティティのグループを作成します。</translation>
+ </message>
+ <message>
+ <source>STB_UPDATE</source>
+ <translation>更新プログラム</translation>
+ </message>
+ <message>
+ <source>STB_VOLUMES</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>STB_VOLUME_3D</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>STB_WARP</source>
+ <translation>ワープ角度</translation>
+ </message>
+ <message>
+ <source>STB_WHAT_IS</source>
+ <translation>メッシュのノードまたはエレメントに関する情報を表示します。</translation>
+ </message>
+ <message>
+ <source>STB_WIRE</source>
+ <translation>ワイヤ フレーム</translation>
+ </message>
+ <message>
+ <source>TAPER_ELEMENTS</source>
+ <translation>テーパ</translation>
+ </message>
+ <message>
+ <source>TB_ADD_REMOVE</source>
+ <translation>ツールバーの追加と削除</translation>
+ </message>
+ <message>
+ <source>TB_CTRL</source>
+ <translation>コントロール ツールバー</translation>
+ </message>
+ <message>
+ <source>TB_DISP_MODE</source>
+ <translation>ツールバーを表示するモード</translation>
+ </message>
+ <message>
+ <source>TB_HYPO</source>
+ <translation>仮説ツールバー</translation>
+ </message>
+ <message>
+ <source>TB_MESH</source>
+ <translation>メッシュ ツールバー</translation>
+ </message>
+ <message>
+ <source>TB_MODIFY</source>
+ <translation>変更ツールバー</translation>
+ </message>
+ <message>
+ <source>TOP_ADV_INFO</source>
+ <translation>メッシュ情報</translation>
+ </message>
+ <message>
+ <source>TOP_ALL</source>
+ <translation>すべて</translation>
+ </message>
+ <message>
+ <source>TOP_AREA</source>
+ <translation>エリア</translation>
+ </message>
+ <message>
+ <source>TOP_ASPECT</source>
+ <translation>アスペクト比</translation>
+ </message>
+ <message>
+ <source>TOP_ASPECT_3D</source>
+ <translation>アスペクト比 3 D</translation>
+ </message>
+ <message>
+ <source>TOP_AUTO_COLOR</source>
+ <translation>自動カラー補正</translation>
+ </message>
+ <message>
+ <source>TOP_AUTO_UPD</source>
+ <translation>自動更新</translation>
+ </message>
+ <message>
+ <source>TOP_BUILD_COMPOUND</source>
+ <translation>複合メッシュを構築します。</translation>
+ </message>
+ <message>
+ <source>TOP_COPY_MESH</source>
+ <translation>メッシュをコピーします。</translation>
+ </message>
+ <message>
+ <source>TOP_CLIP</source>
+ <translation>クリッピング</translation>
+ </message>
+ <message>
+ <source>TOP_COLORS</source>
+ <translation>プロパティ</translation>
+ </message>
+ <message>
+ <source>TOP_COMPUTE</source>
+ <translation>計算</translation>
+ </message>
+ <message>
+ <source>TOP_PRECOMPUTE</source>
+ <translation>プレビュー</translation>
+ </message>
+ <message>
+ <source>TOP_EVALUATE</source>
+ <translation>評価</translation>
+ </message>
+ <message>
+ <source>TOP_CONNECTION</source>
+ <translation>複数の罫線</translation>
+ </message>
+ <message>
+ <source>TOP_CONNECTION_2D</source>
+ <translation>国境で多種の 2 D</translation>
+ </message>
+ <message>
+ <source>TOP_CONSTRUCT_GROUP</source>
+ <translation>構成グループ</translation>
+ </message>
+ <message>
+ <source>TOP_CONV_TO_QUAD</source>
+ <translation>2 次に/から変換します。</translation>
+ </message>
+ <message>
+ <source>TOP_2D_FROM_3D</source>
+ <translation>境界要素を作成します。</translation>
+ </message>
+ <message>
+ <source>TOP_MESH_ORDER</source>
+ <translation>サブメッシュ優先度の変更</translation>
+ </message>
+ <message>
+ <source>TOP_CREATE_GROUP</source>
+ <translation>グループを作成します。</translation>
+ </message>
+ <message>
+ <source>TOP_CREATE_GEO_GROUP</source>
+ <translation>ジオメトリ グループを作成します。</translation>
+ </message>
+ <message>
+ <source>TOP_CREATE_MESH</source>
+ <translation>メッシュを作成します。</translation>
+ </message>
+ <message>
+ <source>TOP_CREATE_SUBMESH</source>
+ <translation>サブメッシュを作成します。</translation>
+ </message>
+ <message>
+ <source>TOP_CUT</source>
+ <translation>四角形の切断</translation>
+ </message>
+ <message>
+ <source>TOP_CUT_GROUP</source>
+ <translation>グループをカットします。</translation>
+ </message>
+ <message>
+ <source>TOP_IMPORT_DAT</source>
+ <translation>DAT ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>TOP_DAT</source>
+ <translation>DAT ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_DELETE</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>TOP_DEL_GROUP</source>
+ <translation>グループの内容を削除します。</translation>
+ </message>
+ <message>
+ <source>TOP_FACE_ORIENTATION</source>
+ <translation>顔の向き</translation>
+ </message>
+ <message>
+ <source>TOP_DISABLE_AUTO_COLOR</source>
+ <translation>自動カラー補正を無効にします。</translation>
+ </message>
+ <message>
+ <source>TOP_DISPLAY_ONLY</source>
+ <translation>のみを表示します。</translation>
+ </message>
+ <message>
+ <source>TOP_DISP_ENT</source>
+ <translation>エンティティを表示します。</translation>
+ </message>
+ <message>
+ <source>TOP_0D_ON_ALL_NODES</source>
+ <translation>0 D 要素の要素ノードを</translation>
+ </message>
+ <message>
+ <source>TOP_ELEM0D</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>TOP_ELEMS0D</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>TOP_BALL</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>TOP_BALLS</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>TOP_EDGE</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>TOP_EDGES</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>TOP_EDIT_GROUP</source>
+ <translation>[グループの編集</translation>
+ </message>
+ <message>
+ <source>TOP_EDIT_GEOMGROUP_AS_GROUP</source>
+ <translation>スタンドアロンとしてグループの編集</translation>
+ </message>
+ <message>
+ <source>TOP_EDIT_HYPO</source>
+ <translation>仮説を編集します。</translation>
+ </message>
+ <message>
+ <source>TOP_EDIT_MESHSUBMESH</source>
+ <translation>メッシュ/サブ mesh を編集します。</translation>
+ </message>
+ <message>
+ <source>TOP_EXPORT_DAT</source>
+ <translation>DAT ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_EXPORT_MED</source>
+ <translation>医学ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_EXPORT_SAUV</source>
+ <translation>SAUV ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_EXPORT_STL</source>
+ <translation>STL ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_EXPORT_UNV</source>
+ <translation>UNV ファイルにエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_EXTRUSION</source>
+ <translation>押出</translation>
+ </message>
+ <message>
+ <source>TOP_EXTRUSION_ALONG</source>
+ <translation>押し出しパスに沿って</translation>
+ </message>
+ <message>
+ <source>TOP_FACES</source>
+ <translation>直面しています。</translation>
+ </message>
+ <message>
+ <source>TOP_BARE_BORDER_VOLUME</source>
+ <translation>ボリュームが裸の枠線</translation>
+ </message>
+ <message>
+ <source>TOP_BARE_BORDER_FACE</source>
+ <translation>顔が裸の枠線</translation>
+ </message>
+ <message>
+ <source>TOP_OVER_CONSTRAINED_VOLUME</source>
+ <translation>過剰のボリューム</translation>
+ </message>
+ <message>
+ <source>TOP_OVER_CONSTRAINED_FACE</source>
+ <translation>過剰拘束面</translation>
+ </message>
+ <message>
+ <source>TOP_FREE_BORDER</source>
+ <translation>無料の罫線</translation>
+ </message>
+ <message>
+ <source>TOP_FREE_EDGE</source>
+ <translation>自由辺</translation>
+ </message>
+ <message>
+ <source>TOP_FREE_NODE</source>
+ <translation>無料ノード</translation>
+ </message>
+ <message>
+ <source>TOP_FREE_FACES</source>
+ <translation>無料顔</translation>
+ </message>
+ <message>
+ <source>TOP_GLOBAL_HYPO</source>
+ <translation>グローバルな仮説</translation>
+ </message>
+ <message>
+ <source>TOP_HEXA</source>
+ <translation>直方体</translation>
+ </message>
+ <message>
+ <source>TOP_HIDE</source>
+ <translation>非表示</translation>
+ </message>
+ <message>
+ <source>TOP_INT_GROUP</source>
+ <translation>グループが交差します。</translation>
+ </message>
+ <message>
+ <source>TOP_INV</source>
+ <translation>斜めの反転</translation>
+ </message>
+ <message>
+ <source>TOP_LENGTH</source>
+ <translation>長さ</translation>
+ </message>
+ <message>
+ <source>TOP_LENGTH_2D</source>
+ <translation>長さ 2 D</translation>
+ </message>
+ <message>
+ <source>TOP_MAP</source>
+ <translation>パターンのマッピング</translation>
+ </message>
+ <message>
+ <source>TOP_MAX_ELEMENT_LENGTH_2D</source>
+ <translation>要素の直径 2 D</translation>
+ </message>
+ <message>
+ <source>TOP_MAX_ELEMENT_LENGTH_3D</source>
+ <translation>要素の直径 3 D</translation>
+ </message>
+ <message>
+ <source>TOP_IMPORT_MED</source>
+ <translation>音楽配信マック & ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>TOP_MED</source>
+ <translation>音楽配信マック & ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_IMPORT_STL</source>
+ <translation>STL ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>TOP_STL</source>
+ <translation>STL ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_IMPORT_CGNS</source>
+ <translation>CGNS ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>TOP_CGNS</source>
+ <translation>CGNS ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_IMPORT_GMF</source>
+ <translation>組み換えファイルのインポート</translation>
+ </message>
+ <message>
+ <source>TOP_GMF</source>
+ <translation>組み換えファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_IMPORT_SAUV</source>
+ <translation>SAUV ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>TOP_SAUV</source>
+ <translation>SAUV ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_MERGE</source>
+ <translation>節点はマージします。</translation>
+ </message>
+ <message>
+ <source>TOP_MERGE_ELEMENTS</source>
+ <translation>要素をマージします。</translation>
+ </message>
+ <message>
+ <source>TOP_MESH_THROU_POINT</source>
+ <translation>ノードの移動</translation>
+ </message>
+ <message>
+ <source>TOP_MIN_ANG</source>
+ <translation>最小角度</translation>
+ </message>
+ <message>
+ <source>TOP_MOVE</source>
+ <translation>ノードの移動</translation>
+ </message>
+ <message>
+ <source>TOP_NODE</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>TOP_NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>TOP_NUM_ELEMENTS</source>
+ <translation>要素を表示します。</translation>
+ </message>
+ <message>
+ <source>TOP_NUM_NODES</source>
+ <translation>ノードを表示します。</translation>
+ </message>
+ <message>
+ <source>TOP_ORIENT</source>
+ <translation>印刷の向き</translation>
+ </message>
+ <message>
+ <source>TOP_POLYGON</source>
+ <translation>多角形</translation>
+ </message>
+ <message>
+ <source>TOP_POLYHEDRON</source>
+ <translation>多面体</translation>
+ </message>
+ <message>
+ <source>TOP_PRECISION</source>
+ <translation>精度</translation>
+ </message>
+ <message>
+ <source>TOP_QUAD</source>
+ <translation>四角形</translation>
+ </message>
+ <message>
+ <source>TOP_QUADRATIC_EDGE</source>
+ <translation>2 次のエッジ</translation>
+ </message>
+ <message>
+ <source>TOP_QUADRATIC_HEXAHEDRON</source>
+ <translation>二次六面体</translation>
+ </message>
+ <message>
+ <source>TOP_QUADRATIC_PENTAHEDRON</source>
+ <translation>二次 5面体</translation>
+ </message>
+ <message>
+ <source>TOP_QUADRATIC_PYRAMID</source>
+ <translation>二次ピラミッド</translation>
+ </message>
+ <message>
+ <source>TOP_QUADRATIC_QUADRANGLE</source>
+ <translation>二次四角形</translation>
+ </message>
+ <message>
+ <source>TOP_QUADRATIC_TETRAHEDRON</source>
+ <translation>二次四面体</translation>
+ </message>
+ <message>
+ <source>TOP_QUADRATIC_TRIANGLE</source>
+ <translation>2 次三角形</translation>
+ </message>
+ <message>
+ <source>TOP_REMOVE_ELEMENTS</source>
+ <translation>要素を削除します。</translation>
+ </message>
+ <message>
+ <source>TOP_REMOVE_NODES</source>
+ <translation>ノードを削除します。</translation>
+ </message>
+ <message>
+ <source>TOP_REMOVE_ORPHAN_NODES</source>
+ <translation>孤児ノードを削除します。</translation>
+ </message>
+ <message>
+ <source>TOP_RENAME</source>
+ <translation>名前の変更</translation>
+ </message>
+ <message>
+ <source>TOP_RENUM_ELEMENTS</source>
+ <translation>要素の番号を付け替える</translation>
+ </message>
+ <message>
+ <source>TOP_RENUM_NODES</source>
+ <translation>ノード番号の再割り当てください。</translation>
+ </message>
+ <message>
+ <source>TOP_RESET</source>
+ <translation>リセット</translation>
+ </message>
+ <message>
+ <source>TOP_SAVE_DISTRIBUTION</source>
+ <translation>エクスポートの分布</translation>
+ </message>
+ <message>
+ <source>TOP_SHOW_DISTRIBUTION</source>
+ <translation>分布を表示します。</translation>
+ </message>
+ <message>
+ <source>TOP_REVOLUTION</source>
+ <translation>革命</translation>
+ </message>
+ <message>
+ <source>TOP_ROT</source>
+ <translation>回転</translation>
+ </message>
+ <message>
+ <source>TOP_SCALAR_BAR</source>
+ <translation>スカラー バー</translation>
+ </message>
+ <message>
+ <source>TOP_SCALAR_BAR_PROP</source>
+ <translation>スカラー プロパティ バー</translation>
+ </message>
+ <message>
+ <source>TOP_SELECTION</source>
+ <translation>選択</translation>
+ </message>
+ <message>
+ <source>TOP_SEL_FILTER_LIB</source>
+ <translation>選択フィルター ライブラリ</translation>
+ </message>
+ <message>
+ <source>TOP_SEW</source>
+ <translation>縫製</translation>
+ </message>
+ <message>
+ <source>TOP_SHADE</source>
+ <translation>網かけの設定</translation>
+ </message>
+ <message>
+ <source>TOP_SHOW</source>
+ <translation>ショー</translation>
+ </message>
+ <message>
+ <source>TOP_SHRINK</source>
+ <translation>縮小</translation>
+ </message>
+ <message>
+ <source>TOP_SKEW</source>
+ <translation>傾斜</translation>
+ </message>
+ <message>
+ <source>TOP_SMOOTH</source>
+ <translation>平滑化</translation>
+ </message>
+ <message>
+ <source>TOP_STD_INFO</source>
+ <translation>標準的なメッシュ情報</translation>
+ </message>
+ <message>
+ <source>TOP_SYM</source>
+ <translation>対称性</translation>
+ </message>
+ <message>
+ <source>TOP_TAPER</source>
+ <translation>テーパ</translation>
+ </message>
+ <message>
+ <source>TOP_TETRA</source>
+ <translation>四面体</translation>
+ </message>
+ <message>
+ <source>TOP_TRANS</source>
+ <translation>翻訳</translation>
+ </message>
+ <message>
+ <source>TOP_SCALE</source>
+ <translation>スケール変換</translation>
+ </message>
+ <message>
+ <source>TOP_DUPLICATE_NODES</source>
+ <translation>重複したノード</translation>
+ </message>
+ <message>
+ <source>TOP_TRANSP</source>
+ <translation>透明性</translation>
+ </message>
+ <message>
+ <source>TOP_TRIANGLE</source>
+ <translation>三角形</translation>
+ </message>
+ <message>
+ <source>TOP_UNASSIGN</source>
+ <translation>割り当てを解除します。</translation>
+ </message>
+ <message>
+ <source>TOP_UNION</source>
+ <translation>三角形の和集合</translation>
+ </message>
+ <message>
+ <source>TOP_UNION2</source>
+ <translation>2 つの三角形の和集合</translation>
+ </message>
+ <message>
+ <source>TOP_IMPORT_UNV</source>
+ <translation>UNV ファイルのインポート</translation>
+ </message>
+ <message>
+ <source>TOP_UNV</source>
+ <translation>UNV ファイルをエクスポートします。</translation>
+ </message>
+ <message>
+ <source>TOP_UN_GROUP</source>
+ <translation>連合のグループ</translation>
+ </message>
+ <message>
+ <source>TOP_UNDERLYING_ELEMS</source>
+ <translation>優れた寸法の既存のグループからのエンティティのグループを作成します。</translation>
+ </message>
+ <message>
+ <source>TOP_UPDATE</source>
+ <translation>更新プログラム</translation>
+ </message>
+ <message>
+ <source>TOP_VOLUMES</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>TOP_VOLUME_3D</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>TOP_WARP</source>
+ <translation>ワープ角度</translation>
+ </message>
+ <message>
+ <source>TOP_WHAT_IS</source>
+ <translation>メッシュ要素の情報</translation>
+ </message>
+ <message>
+ <source>TOP_WIRE</source>
+ <translation>ワイヤ フレーム</translation>
+ </message>
+ <message>
+ <source>UNKNOWN_CONTROL</source>
+ <translation>不明</translation>
+ </message>
+ <message>
+ <source>VOLUME_3D_ELEMENTS</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>WARP_ELEMENTS</source>
+ <translation>ワープ</translation>
+ </message>
+ <message>
+ <source>MEN_FILE_INFO</source>
+ <translation>医学ファイル情報</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_NO_APPROPRIATE_SELECTION</source>
+ <translation>適切なオブジェクトを選択せず</translation>
+ </message>
+ <message>
+ <source>MEN_CLEAR_MESH</source>
+ <translation>メッシュ データをクリアします。</translation>
+ </message>
+ <message>
+ <source>TOP_CLEAR_MESH</source>
+ <translation>メッシュ データをクリアします。</translation>
+ </message>
+ <message>
+ <source>STB_CLEAR_MESH</source>
+ <translation>メッシュ データをクリアします。</translation>
+ </message>
+ <message>
+ <source>SMESH_IMPORT_MESH</source>
+ <translation>ファイルからメッシュ データのインポート</translation>
+ </message>
+ <message>
+ <source>SMESH_ERR_NOT_SUPPORTED_FORMAT</source>
+ <translation>サポートされていないファイル形式です</translation>
+ </message>
+ <message>
+ <source>SMESH_ERR_UNKNOWN_IMPORT_ERROR</source>
+ <translation>不明なエラー</translation>
+ </message>
+ <message>
+ <source>SMESH_IMPORT_ERRORS</source>
+ <translation>インポート操作が完了しました。</translation>
+ </message>
+ <message>
+ <source>SMESH_DRS_SOME_EMPTY</source>
+ <translation>1 つまたは複数のメッシュ ファイルが空で、データが公開されていません。</translation>
+ </message>
+ <message>
+ <source>NO_MESH_SELECTED</source>
+ <translation>選択されていないメッシュ</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_def_precision</source>
+ <translation>既定の精度</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_length_precision</source>
+ <translation>長の有効桁数</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_angle_precision</source>
+ <translation>角度精度</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_len_tol_precision</source>
+ <translation>長さ公差の精度</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_parametric_precision</source>
+ <translation>パラメトリック精度</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_area_precision</source>
+ <translation>領域の精度</translation>
+ </message>
+ <message>
+ <source>FULL_RECOMPUTE_QUESTION</source>
+ <translation>メッシュは、成功の計算ができない場合があります、最後の合計マージング以来編集されています。完全に、変更を破棄するには、メッシュを再計算しますか?</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_vol_precision</source>
+ <translation>ボリュームの精度</translation>
+ </message>
+ <message>
+ <source>SMESH_PRECISION_HINT</source>
+ <translation>入力値の精度は、メッシュのモジュール設定に '%1' パラメーターを使用して調整できます。</translation>
+ </message>
+ <message>
+ <source>REMOVE_ORPHAN_NODES_QUESTION</source>
+ <translation>孤児のすべてのノードを削除するよろしいですか。</translation>
+ </message>
+ <message>
+ <source>NB_NODES_REMOVED</source>
+ <translation>%1 ノードを削除します。</translation>
+ </message>
+ <message>
+ <source>SMESH_SAVE_DISTRIBUTION</source>
+ <translation>エクスポートの分布</translation>
+ </message>
+ <message>
+ <source>SMESH_PLUGINS_OTHER</source>
+ <translation>SMESH プラグイン</translation>
+ </message>
+ <message>
+ <source>MESH_LOADING_MSG</source>
+ <translation>%0 中では、メッシュの読み込みお待ちください.</translation>
+ </message>
+ <message>
+ <source>MESH_LOADING_MSG_FINISHED</source>
+ <translation>メッシュ%0 の実行の読み込み</translation>
+ </message>
+ <message>
+ <source>BALL_DIAMETER</source>
+ <translation>直径</translation>
+ </message>
+ <message>
+ <source>BALL_ELEMENT</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>DEP_OBJECT</source>
+ <translation>選択したオブジェクトは、別の 1 つを作成する使用されています。削除できません。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_Dialog</name>
+ <message>
+ <source>DLG_MESH</source>
+ <translation>メッシュ</translation>
+ </message>
+ <message>
+ <source>DLG_HYPO</source>
+ <translation>仮説</translation>
+ </message>
+ <message>
+ <source>DLG_ALGO</source>
+ <translation>アルゴリズム</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI</name>
+ <message>
+ <source>NOT_A_VTK_VIEWER</source>
+ <translation>このコマンドは、してください。 VTK ビューアーでのみ利用可能です、VTK ビューアーを作成、もう一度やり直してください。</translation>
+ </message>
+ <message>
+ <source>PREF_AUTO_GROUPS</source>
+ <translation>自動的に MED の輸出のためのグループを作成します。</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_SEGMENT_LENGTH</source>
+ <translation>自動パラメーター</translation>
+ </message>
+ <message>
+ <source>PREF_SEGMENT_LENGTH</source>
+ <translation>境界ボックスの対角線/最大サイズ比</translation>
+ </message>
+ <message>
+ <source>PREF_NB_SEGMENTS</source>
+ <translation>デフォルトのセグメントの数</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_MESH_LOADING</source>
+ <translation>メッシュの読み込み</translation>
+ </message>
+ <message>
+ <source>PREF_FORGET_MESH_AT_HYP_MODIF</source>
+ <translation>研究仮説修正ファイルからの読み込みもメッシュ</translation>
+ </message>
+ <message>
+ <source>PREF_AUTO_UPDATE</source>
+ <translation>自動更新</translation>
+ </message>
+ <message>
+ <source>PREF_UPDATE_LIMIT</source>
+ <translation>サイズの制限値 (要素)</translation>
+ </message>
+ <message>
+ <source>PREF_UPDATE_LIMIT_NOLIMIT</source>
+ <translation>制限なし</translation>
+ </message>
+ <message>
+ <source>PREF_BACKFACE</source>
+ <translation>裏面の色</translation>
+ </message>
+ <message>
+ <source>PREF_VOLUME</source>
+ <translation>ボリューム ・ カラー</translation>
+ </message>
+ <message>
+ <source>PREF_REVERSEDVOLUME</source>
+ <translation>逆ボリューム ・ カラー</translation>
+ </message>
+ <message>
+ <source>PREF_WIREFRAME</source>
+ <translation>ワイヤ フレームの色</translation>
+ </message>
+ <message>
+ <source>PREF_SELECTION</source>
+ <translation>選択色</translation>
+ </message>
+ <message>
+ <source>PREF_PRE_SELECTION</source>
+ <translation>一次審査の色</translation>
+ </message>
+ <message>
+ <source>PREF_COLOR</source>
+ <translation>色</translation>
+ </message>
+ <message>
+ <source>PREF_ORIENTATION_COLOR</source>
+ <translation>色</translation>
+ </message>
+ <message>
+ <source>PREF_ORIENTATION_3D_VECTORS</source>
+ <translation>3D ベクトル</translation>
+ </message>
+ <message>
+ <source>PREF_ORIENTATION_SCALE</source>
+ <translation>スケール</translation>
+ </message>
+ <message>
+ <source>PREF_DISPLAY_ENTITY</source>
+ <translation>エンティティを表示します。</translation>
+ </message>
+ <message>
+ <source>QUADRATIC_REPRESENT_MODE</source>
+ <translation>2 D の 2 次要素の表現</translation>
+ </message>
+ <message>
+ <source>MAX_ARC_ANGLE</source>
+ <translation>最大角度</translation>
+ </message>
+ <message>
+ <source>PREF_DISPLAY_MODE</source>
+ <translation>表示モード</translation>
+ </message>
+ <message>
+ <source>PREF_ELEMENTS</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>PREF_ELEMENT_COLOR</source>
+ <translation>要素の色</translation>
+ </message>
+ <message>
+ <source>PREF_FILL</source>
+ <translation>表面の色</translation>
+ </message>
+ <message>
+ <source>PREF_NOTIFY_MODE</source>
+ <translation>計算結果の通知を表示します。</translation>
+ </message>
+ <message>
+ <source>PREF_NOTIFY_NEVER</source>
+ <translation>決して</translation>
+ </message>
+ <message>
+ <source>PREF_NOTIFY_ERROR</source>
+ <translation>エラーのみ</translation>
+ </message>
+ <message>
+ <source>PREF_NOTIFY_ALWAYS</source>
+ <translation>常に</translation>
+ </message>
+ <message>
+ <source>PREF_ELEM_INFO</source>
+ <translation>メッシュ要素の情報</translation>
+ </message>
+ <message>
+ <source>PREF_ELEM_INFO_SIMPLE</source>
+ <translation>単純です</translation>
+ </message>
+ <message>
+ <source>PREF_ELEM_INFO_TREE</source>
+ <translation>ツリー</translation>
+ </message>
+ <message>
+ <source>PREF_GPP_NODES_LIMIT</source>
+ <translation>自動ノード計算限界</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_GROUP_PRECISION</source>
+ <translation>入力フィールドの精度</translation>
+ </message>
+ <message>
+ <source>SMESH_PREF_GROUP_PREVIEW</source>
+ <translation>プレビュー</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_ELEMENTS</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_EXPORT</source>
+ <translation>メッシュのエクスポート</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_FACES_ORIENTATION</source>
+ <translation>顔の向き</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_COMPUTE</source>
+ <translation>計算をメッシュします。</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_GROUPS</source>
+ <translation>グループ</translation>
+ </message>
+ <message>
+ <source>PREF_GRP_NAMES</source>
+ <translation>名前色</translation>
+ </message>
+ <message>
+ <source>PREF_GRP_DEF_COLOR</source>
+ <translation>既定の色</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_PRECISION</source>
+ <translation>精度</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_PRESELECTION</source>
+ <translation>予選</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_QUALITY</source>
+ <translation>品質コントロール</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_SELECTION</source>
+ <translation>選択</translation>
+ </message>
+ <message>
+ <source>PREF_GROUP_INFO</source>
+ <translation>メッシュ情報</translation>
+ </message>
+ <message>
+ <source>PREF_HIGHLIGHT_COLOR</source>
+ <translation>強調表示色</translation>
+ </message>
+ <message>
+ <source>PREF_LABELS_COLOR</source>
+ <translation>ラベル色</translation>
+ </message>
+ <message>
+ <source>PREF_MARKER_SCALE</source>
+ <translation>スケール マーカーの</translation>
+ </message>
+ <message>
+ <source>PREF_NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>PREF_OBJECTS</source>
+ <translation>オブジェクト</translation>
+ </message>
+ <message>
+ <source>PREF_OBJECT_COLOR</source>
+ <translation>オブジェクトの色</translation>
+ </message>
+ <message>
+ <source>PREF_OUTLINE</source>
+ <translation>輪郭の色</translation>
+ </message>
+ <message>
+ <source>PREF_PRECISION_USE</source>
+ <translation>精度を使用します。</translation>
+ </message>
+ <message>
+ <source>PREF_PRECISION_VALUE</source>
+ <translation>ポイント後の桁数</translation>
+ </message>
+ <message>
+ <source>PREF_EQUAL_NODES_TOL</source>
+ <translation>二重ノード公差</translation>
+ </message>
+ <message>
+ <source>PREF_RENUMBER</source>
+ <translation>自動番号を付け替える</translation>
+ </message>
+ <message>
+ <source>PREF_SHRINK_COEFF</source>
+ <translation>縮小係数。</translation>
+ </message>
+ <message>
+ <source>PREF_PYTHON_DUMP</source>
+ <translation>Python をダンプします。</translation>
+ </message>
+ <message>
+ <source>PREF_HISTORICAL_PYTHON_DUMP</source>
+ <translation>歴史的な python のダンプ</translation>
+ </message>
+ <message>
+ <source>PREF_TAB_GENERAL</source>
+ <translation>一般的な</translation>
+ </message>
+ <message>
+ <source>PREF_TAB_MESH</source>
+ <translation>メッシュ</translation>
+ </message>
+ <message>
+ <source>PREF_TAB_SELECTION</source>
+ <translation>選択</translation>
+ </message>
+ <message>
+ <source>PREF_TITLE_COLOR</source>
+ <translation>タイトルの色</translation>
+ </message>
+ <message>
+ <source>PREF_TYPE_OF_MARKER</source>
+ <translation>マーカーの種類</translation>
+ </message>
+ <message>
+ <source>PREF_COLOR_0D</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>PREF_SIZE_0D</source>
+ <translation>0 D 要素のサイズ</translation>
+ </message>
+ <message>
+ <source>PREF_BALL_COLOR</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>PREF_BALL_SIZE</source>
+ <translation>ボールの要素のサイズ</translation>
+ </message>
+ <message>
+ <source>PREF_WIDTH</source>
+ <translation>線の幅</translation>
+ </message>
+ <message>
+ <source>PREF_OUTLINE_WIDTH</source>
+ <translation>アウトラインの幅</translation>
+ </message>
+ <message>
+ <source>PREF_PREVIEW_CHUNK_SIZE</source>
+ <translation>サブ図形の座標プレビュー チャンク ・ サイズ</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_GroupDlg</name>
+ <message>
+ <source>ALLOW_ELEM_LIST_MODIF</source>
+ <translation>マニュアル版を有効にします。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_Add0DElemsOnAllNodesDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>0 D 要素の要素ノードを</translation>
+ </message>
+ <message>
+ <source>OBJ_BTN</source>
+ <translation>メッシュ、サブメッシュ、グループ</translation>
+ </message>
+ <message>
+ <source>NB_NEW_0D</source>
+ <translation>%1 0 D 要素の作成</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_Add0DElemsOnAllNodesOp</name>
+ <message>
+ <source>NB_NEW_0D</source>
+ <translation>%1 0 D 要素の作成</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_AddQuadraticElementDlg</name>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_EDGE</source>
+ <translation>2 次のエッジを追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_HEXAHEDRON</source>
+ <translation>二次六面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_TRIQUADRATIC_HEXAHEDRON</source>
+ <translation>TriQuadratic 直方体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_PENTAHEDRON</source>
+ <translation>二次 5面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_PYRAMID</source>
+ <translation>二次ピラミッドを追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_QUADRANGLE</source>
+ <translation>2 次の四角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_BIQUADRATIC_QUADRANGLE</source>
+ <translation>バイカッド四角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_TETRAHEDRON</source>
+ <translation>二次四面体を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_ADD_QUADRATIC_TRIANGLE</source>
+ <translation>2 次三角形を追加します。</translation>
+ </message>
+ <message>
+ <source>SMESH_CORNER_NODES</source>
+ <translation>角の節:</translation>
+ </message>
+ <message>
+ <source>SMESH_MIDFACE_NODES</source>
+ <translation>今回のノード:</translation>
+ </message>
+ <message>
+ <source>SMESH_CENTER_NODE</source>
+ <translation>センター ノード:</translation>
+ </message>
+ <message>
+ <source>SMESH_FIRST</source>
+ <translation>最初</translation>
+ </message>
+ <message>
+ <source>SMESH_LAST</source>
+ <translation>最後</translation>
+ </message>
+ <message>
+ <source>SMESH_MIDDLE</source>
+ <translation>中間</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_BuildCompoundDlg</name>
+ <message>
+ <source>COMPOUND</source>
+ <translation>化合物</translation>
+ </message>
+ <message>
+ <source>COMPOUND_MESH</source>
+ <translation>Compound_Mesh</translation>
+ </message>
+ <message>
+ <source>CREATE_COMMON_GROUPS</source>
+ <translation>初期メッシュの一般的なグループを作成します。</translation>
+ </message>
+ <message>
+ <source>MERGE_NODES_AND_ELEMENTS</source>
+ <translation>一致する節点と要素をマージします。</translation>
+ </message>
+ <message>
+ <source>MESHES</source>
+ <translation>メッシュ</translation>
+ </message>
+ <message>
+ <source>PROCESSING_IDENTICAL_GROUPS</source>
+ <translation>同じグループの処理</translation>
+ </message>
+ <message>
+ <source>RENAME</source>
+ <translation>名前の変更</translation>
+ </message>
+ <message>
+ <source>RESULT_NAME</source>
+ <translation>結果名</translation>
+ </message>
+ <message>
+ <source>UNITE</source>
+ <translation>団結</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ChangeOrientationDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>向きの変更</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ComputeDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>計算メッシュに失敗しました</translation>
+ </message>
+ <message>
+ <source>CONSTRUCTOR</source>
+ <translation>メッシュを計算します。</translation>
+ </message>
+ <message>
+ <source>EVAL_DLG</source>
+ <translation>メッシュを評価します。</translation>
+ </message>
+ <message>
+ <source>ERRORS</source>
+ <translation>エラー</translation>
+ </message>
+ <message>
+ <source>MEMORY_LACK</source>
+ <translation>メモリ割り当ての問題</translation>
+ </message>
+ <message>
+ <source>COMPUTE_WARNING</source>
+ <translation>メッシュは OK のようですが、エラーが報告されます。</translation>
+ </message>
+ <message>
+ <source>PUBLISH_SHAPE</source>
+ <translation>サブを公開します。</translation>
+ </message>
+ <message>
+ <source>SHOW_SHAPE</source>
+ <translation>サブを表示します。</translation>
+ </message>
+ <message>
+ <source>SHOW_BAD_MESH</source>
+ <translation>悪いメッシュを表示します。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_PrecomputeDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>プレビューと計算メッシュ</translation>
+ </message>
+ <message>
+ <source>PREVIEW</source>
+ <translation>プレビュー</translation>
+ </message>
+ <message>
+ <source>PREVIEW_1</source>
+ <translation>1 D メッシュ</translation>
+ </message>
+ <message>
+ <source>PREVIEW_2</source>
+ <translation>2 D メッシュ</translation>
+ </message>
+ <message>
+ <source>COMPUTE</source>
+ <translation>計算</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_PrecomputeOp</name>
+ <message>
+ <source>CLEAR_SUBMESH_QUESTION</source>
+ <translation>選択したジオメトリに一時 submeshes プレビュー操作中に作成されました。これらのすべての submeshes を削除しますか。</translation>
+ </message>
+ <message>
+ <source>SMESH_WRN_NOTHING_PREVIEW</source>
+ <translation>メッシュ プレビューはありません。</translation>
+ </message>
+ <message>
+ <source>SMESH_REJECT_MESH_ORDER</source>
+ <translation>優先度のサブメッシュ プレビュー操作中に変更。元のサブメッシュの優先順位を復元しますか。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ConvToQuadDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>2 次に/から変換します。</translation>
+ </message>
+ <message>
+ <source>MEDIUMNDS</source>
+ <translation>ジオメトリ上の中のノード</translation>
+ </message>
+ <message>
+ <source>MESH</source>
+ <translation>メッシュまたはサブメッシュ</translation>
+ </message>
+ <message>
+ <source>RADIOBTN_1</source>
+ <translation>2 次に変換します。</translation>
+ </message>
+ <message>
+ <source>RADIOBTN_2</source>
+ <translation>二次から変換します。</translation>
+ </message>
+ <message>
+ <source>NON_CONFORM_WARNING</source>
+ <translation>警告: メッシュは非共形になることができます。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ConvToQuadOp</name>
+ <message>
+ <source>MESH_IS_NOT_SELECTED</source>
+ <translation>メッシュが選択されていないそれを指定して、再試行してください</translation>
+ </message>
+ <message>
+ <source>REF_IS_NULL</source>
+ <translation>有効なメッシュ オブジェクトが選択されていません。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_CreatePatternDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>パターンの作成</translation>
+ </message>
+ <message>
+ <source>DEFAULT_2D</source>
+ <translation>Pattern_2d</translation>
+ </message>
+ <message>
+ <source>DEFAULT_3D</source>
+ <translation>Pattern_3d</translation>
+ </message>
+ <message>
+ <source>ERROR_OF_CREATION</source>
+ <translation>内部エラーが発生中にパターン作成に入力した情報の有効性を確認してください</translation>
+ </message>
+ <message>
+ <source>ERROR_OF_SAVING</source>
+ <translation>内部エラーは、パターンの保存中に発生します。\Free ディスク容量と、このファイルへの書き込み権限を確認してください。</translation>
+ </message>
+ <message>
+ <source>ERR_LOADF_CANT_PROJECT</source>
+ <translation>ノードに顔の射影を実行することは不可能</translation>
+ </message>
+ <message>
+ <source>ERR_LOADF_CLOSED_FACE</source>
+ <translation>縫い目の刃を持つ顔からパターンを作成することはできません。</translation>
+ </message>
+ <message>
+ <source>ERR_LOADF_NARROW_FACE</source>
+ <translation>狭い顔からパターンを作成することはできません。</translation>
+ </message>
+ <message>
+ <source>ERR_LOADV_BAD_SHAPE</source>
+ <translation>パターンは、閉殻から作成された、または固体 6 面のみをすることができます。</translation>
+ </message>
+ <message>
+ <source>ERR_LOADV_COMPUTE_PARAMS</source>
+ <translation>ポイントのパラメーターを計算することはできません。</translation>
+ </message>
+ <message>
+ <source>ERR_LOAD_EMPTY_SUBMESH</source>
+ <translation>パターンを作成する要素はありません。</translation>
+ </message>
+ <message>
+ <source>MESH_OR_SUBMESH</source>
+ <translation>メッシュまたはサブメッシュ</translation>
+ </message>
+ <message>
+ <source>PATTERN</source>
+ <translation>パターン</translation>
+ </message>
+ <message>
+ <source>PATTERN_FILT</source>
+ <translation>パターン files(*.smp)</translation>
+ </message>
+ <message>
+ <source>PATTERN_NAME</source>
+ <translation>パターン名</translation>
+ </message>
+ <message>
+ <source>PATTERN_TYPE</source>
+ <translation>パターンの種類</translation>
+ </message>
+ <message>
+ <source>PROJECT</source>
+ <translation>プロジェクト ノードの顔</translation>
+ </message>
+ <message>
+ <source>SAVE</source>
+ <translation>保存.</translation>
+ </message>
+ <message>
+ <source>SAVE_PATTERN</source>
+ <translation>パターンを保存します。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_CreatePolyhedralVolumeDlg</name>
+ <message>
+ <source>FACES_BY_NODES</source>
+ <translation>顔のノードによって</translation>
+ </message>
+ <message>
+ <source>SMESH_POLYEDRE_CREATE_ERROR</source>
+ <translation>多面体の作成エラーです。</translation>
+ </message>
+ <message>
+ <source>SMESH_POLYEDRE_PREVIEW</source>
+ <translation>多面体のプレビュー</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_CuttingOfQuadsDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>四角形の切断</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_DeleteGroupDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>グループの内容を削除します。</translation>
+ </message>
+ <message>
+ <source>NO_SELECTED_GROUPS</source>
+ <translation>くださいグループを選択し、もう一度やり直してください選択したグループはありません。</translation>
+ </message>
+ <message>
+ <source>SELECTED_GROUPS</source>
+ <translation>選択したグループ</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MergeDlg</name>
+ <message>
+ <source>COINCIDENT_ELEMENTS</source>
+ <translation>一致する要素</translation>
+ </message>
+ <message>
+ <source>COINCIDENT_NODES</source>
+ <translation>一致するノード</translation>
+ </message>
+ <message>
+ <source>DETECT</source>
+ <translation>検出</translation>
+ </message>
+ <message>
+ <source>EDIT_SELECTED_GROUP</source>
+ <translation>選択したグループを編集します。</translation>
+ </message>
+ <message>
+ <source>SELECT_ALL</source>
+ <translation>すべてを選択します。</translation>
+ </message>
+ <message>
+ <source>EXCLUDE_GROUPS</source>
+ <translation>グループを除外します。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ExtrusionAlongPathDlg</name>
+ <message>
+ <source>BAD_SHAPE_TYPE</source>
+ <translation>図形のパスを選択して、エッジではないです。</translation>
+ </message>
+ <message>
+ <source>CANT_GET_TANGENT</source>
+ <translation>接線パス ノードの 1 つを得ることができません。</translation>
+ </message>
+ <message>
+ <source>EXTRUSION_0D</source>
+ <translation>0 D 要素の押出し</translation>
+ </message>
+ <message>
+ <source>EXTRUSION_1D</source>
+ <translation>1 次元要素の押出し</translation>
+ </message>
+ <message>
+ <source>EXTRUSION_2D</source>
+ <translation>2 D 要素の押出し</translation>
+ </message>
+ <message>
+ <source>EXTRUSION_ALONG_PATH</source>
+ <translation>押し出しパスに沿って</translation>
+ </message>
+ <message>
+ <source>EXTR_BAD_STARTING_NODE</source>
+ <translation>間違ったパス開始ノード</translation>
+ </message>
+ <message>
+ <source>LINEAR_ANGLES</source>
+ <translation>角度の一次の変化</translation>
+ </message>
+ <message>
+ <source>NO_ELEMENTS_SELECTED</source>
+ <translation>押し出しメッシュ要素が選択されていません</translation>
+ </message>
+ <message>
+ <source>SELECTED_PATH_IS_NOT_EDGE</source>
+ <translation>パス メッシュ エッジの種類する必要があります。</translation>
+ </message>
+ <message>
+ <source>SMESH_ANGLES</source>
+ <translation>回転角度</translation>
+ </message>
+ <message>
+ <source>SMESH_BASE_POINT</source>
+ <translation>基点</translation>
+ </message>
+ <message>
+ <source>SMESH_PATH</source>
+ <translation>パス</translation>
+ </message>
+ <message>
+ <source>SMESH_PATH_MESH</source>
+ <translation>メッシュまたはサブメッシュ</translation>
+ </message>
+ <message>
+ <source>SMESH_PATH_SHAPE</source>
+ <translation>形状 (エッジ)</translation>
+ </message>
+ <message>
+ <source>SMESH_PATH_START</source>
+ <translation>開始ノード</translation>
+ </message>
+ <message>
+ <source>SMESH_USE_ANGLES</source>
+ <translation>角度を使用します。</translation>
+ </message>
+ <message>
+ <source>SMESH_USE_BASE_POINT</source>
+ <translation>基点を使用</translation>
+ </message>
+ <message>
+ <source>WRONG_ANGLES_NUMBER</source>
+ <translation>角の数は、パスのノード数に対応する必要があります。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ExtrusionDlg</name>
+ <message>
+ <source>EXTRUSION_0D</source>
+ <translation>ノードの押出し</translation>
+ </message>
+ <message>
+ <source>EXTRUSION_1D</source>
+ <translation>1 次元要素の押出し</translation>
+ </message>
+ <message>
+ <source>EXTRUSION_2D</source>
+ <translation>2 D 要素の押出し</translation>
+ </message>
+ <message>
+ <source>EXTRUSION_ALONG_LINE</source>
+ <translation>押出ラインに沿って</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_FilterDlg</name>
+ <message>
+ <source>BAD_SHAPE_NAME</source>
+ <translation>「幾何学的オブジェクト現在研究に有効なオブジェクトを選択して再試行ください%1」はありません</translation>
+ </message>
+ <message>
+ <source>CURRENT_DIALOG</source>
+ <translation>現在のグループ</translation>
+ </message>
+ <message>
+ <source>EDGES_TLT</source>
+ <translation>フィルターの端</translation>
+ </message>
+ <message>
+ <source>FACES_TLT</source>
+ <translation>顔用のフィルター</translation>
+ </message>
+ <message>
+ <source>MESH</source>
+ <translation>メッシュ</translation>
+ </message>
+ <message>
+ <source>NODES_TLT</source>
+ <translation>ノード用のフィルター</translation>
+ </message>
+ <message>
+ <source>ELEM0D_TLT</source>
+ <translation>0 D 要素のフィルター</translation>
+ </message>
+ <message>
+ <source>BALL_TLT</source>
+ <translation>フィルターのボール</translation>
+ </message>
+ <message>
+ <source>SELECTION</source>
+ <translation>最初の選択</translation>
+ </message>
+ <message>
+ <source>SET_IN_VIEWER</source>
+ <translation>ビューアーでフィルターを挿入します。</translation>
+ </message>
+ <message>
+ <source>SHAPE_IS_NOT_A_CYLINDER</source>
+ <translation>「%1」してください円筒面を選択してやり直してください、円筒の顔ではないです。</translation>
+ </message>
+ <message>
+ <source>SHAPE_IS_NOT_A_FACE</source>
+ <translation>「%1」してください顔を選択してやり直してください、顔ではないです。</translation>
+ </message>
+ <message>
+ <source>SHAPE_IS_NOT_A_PLANE</source>
+ <translation>「%1」してください、平面を選択してもう一度やり直してください、飛行機ではありません。</translation>
+ </message>
+ <message>
+ <source>FACE_ID_NOT_SELECTED</source>
+ <translation>メッシュの面が選択されていないそれを指定して、再試行してください</translation>
+ </message>
+ <message>
+ <source>NOT_FACE_ID</source>
+ <translation>「%1」メッシュの面の ID ではありません。面を選択して再試行してください。</translation>
+ </message>
+ <message>
+ <source>SOURCE</source>
+ <translation>ソース</translation>
+ </message>
+ <message>
+ <source>TLT</source>
+ <translation>選択フィルター</translation>
+ </message>
+ <message>
+ <source>VOLUMES_TLT</source>
+ <translation>ボリューム フィルター</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_FilterLibraryDlg</name>
+ <message>
+ <source>ADD</source>
+ <translation>追加</translation>
+ </message>
+ <message>
+ <source>ADD_TO_TLT</source>
+ <translation>選択フィルターをライブラリに追加します。</translation>
+ </message>
+ <message>
+ <source>ALL_FILES_FILTER</source>
+ <translation>すべてのファイル (*. *)</translation>
+ </message>
+ <message>
+ <source>ASSIGN_NEW_NAME</source>
+ <translation>ライブラリに既にフィルターと新しい名前「%2」が追加されたフィルターに割り当てられている名前「%1」が含まれています</translation>
+ </message>
+ <message>
+ <source>COPY_FROM_TLT</source>
+ <translation>ライブラリからコピー選択フィルター</translation>
+ </message>
+ <message>
+ <source>DELETE</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>EDGE</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>EDIT_LIB_TLT</source>
+ <translation>選択フィルター ライブラリ</translation>
+ </message>
+ <message>
+ <source>ELEMENT</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>EMPTY_FILTER_NAME</source>
+ <translation>フィルターの名前が空に空白以外の名前を入力してください</translation>
+ </message>
+ <message>
+ <source>ERROR_FILTER_NAME</source>
+ <translation>フィルターの名前は一意ではない他の名前を入力してください</translation>
+ </message>
+ <message>
+ <source>ERROR_LOAD</source>
+ <translation>ライブラリしてくださいチェック ライブラリ ファイル名と属性をロードすることはできません。</translation>
+ </message>
+ <message>
+ <source>ERROR_OF_ADDING</source>
+ <translation>Adiing 新しいフィルター ライブラリの中に内部エラーを発生します。入力した情報の有効性を確認してください。</translation>
+ </message>
+ <message>
+ <source>ERROR_OF_COPYING</source>
+ <translation>ライブラリからのフィルターのコピー中に内部エラーが発生します。入力した情報の有効性を確認してください。</translation>
+ </message>
+ <message>
+ <source>ERROR_OF_DELETING</source>
+ <translation>ライブラリからフィルターを削除中に内部エラーが発生します。入力した情報の有効性を確認してください。</translation>
+ </message>
+ <message>
+ <source>ERROR_OF_EDITING</source>
+ <translation>フィルター ライブラリの編集中に内部エラーが発生します。入力した情報の有効性を確認してください。</translation>
+ </message>
+ <message>
+ <source>ERROR_OF_SAVING</source>
+ <translation>内部エラー フィルター ライブラリしてください。 チェック入力データの保存が発生、もう一度やり直してください。</translation>
+ </message>
+ <message>
+ <source>FACE</source>
+ <translation>顔</translation>
+ </message>
+ <message>
+ <source>FILTER</source>
+ <translation>フィルター</translation>
+ </message>
+ <message>
+ <source>FILTER_NAME</source>
+ <translation>フィルター名</translation>
+ </message>
+ <message>
+ <source>FILTER_NAMES</source>
+ <translation>フィルターの名前</translation>
+ </message>
+ <message>
+ <source>LIBRARY_FILE</source>
+ <translation>ライブラリのファイル名</translation>
+ </message>
+ <message>
+ <source>LIBRARY_IS_NOT_LOADED</source>
+ <translation>ライブラリが読み込まれていません。ライブラリをロードしてからやり直してください。</translation>
+ </message>
+ <message>
+ <source>LIB_NAME</source>
+ <translation>FilterLib.xml</translation>
+ </message>
+ <message>
+ <source>NODE</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>NO_PERMISSION</source>
+ <translation>このファイルに書き込み権限がありません。</translation>
+ </message>
+ <message>
+ <source>OPEN_LIBRARY</source>
+ <translation>ライブラリを開く</translation>
+ </message>
+ <message>
+ <source>SELECTION</source>
+ <translation>選択</translation>
+ </message>
+ <message>
+ <source>VOLUME</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>XML_FILT</source>
+ <translation>XML files(*.xml)</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_FilterTable</name>
+ <message>
+ <source>ADD</source>
+ <translation>追加</translation>
+ </message>
+ <message>
+ <source>ADDITIONAL_PARAMETERS</source>
+ <translation>追加のパラメーター</translation>
+ </message>
+ <message>
+ <source>ADD_TO</source>
+ <translation>追加する.</translation>
+ </message>
+ <message>
+ <source>AND</source>
+ <translation>と</translation>
+ </message>
+ <message>
+ <source>AREA</source>
+ <translation>エリア</translation>
+ </message>
+ <message>
+ <source>ASPECT_RATIO</source>
+ <translation>アスペクト比</translation>
+ </message>
+ <message>
+ <source>ASPECT_RATIO_3D</source>
+ <translation>アスペクト比 3 D</translation>
+ </message>
+ <message>
+ <source>BAD_ORIENTED_VOLUME</source>
+ <translation>不正な指向ボリューム</translation>
+ </message>
+ <message>
+ <source>BARE_BORDER_VOLUME</source>
+ <translation>ボリュームが裸の枠線</translation>
+ </message>
+ <message>
+ <source>BARE_BORDER_FACE</source>
+ <translation>顔が裸の枠線</translation>
+ </message>
+ <message>
+ <source>OVER_CONSTRAINED_VOLUME</source>
+ <translation>過剰のボリューム</translation>
+ </message>
+ <message>
+ <source>OVER_CONSTRAINED_FACE</source>
+ <translation>過剰拘束面</translation>
+ </message>
+ <message>
+ <source>BELONG_TO_CYLINDER</source>
+ <translation>シリンダーに属しています。</translation>
+ </message>
+ <message>
+ <source>BELONG_TO_GENSURFACE</source>
+ <translation>サーフェスに属する</translation>
+ </message>
+ <message>
+ <source>BELONG_TO_GEOM</source>
+ <translation>ジオメトリに属しています。</translation>
+ </message>
+ <message>
+ <source>BELONG_TO_PLANE</source>
+ <translation>平面に属する</translation>
+ </message>
+ <message>
+ <source>BINARY</source>
+ <translation>バイナリ</translation>
+ </message>
+ <message>
+ <source>CLEAR</source>
+ <translation>明確な</translation>
+ </message>
+ <message>
+ <source>COMPARE</source>
+ <translation>比較</translation>
+ </message>
+ <message>
+ <source>COPLANAR_FACES</source>
+ <translation>同一平面上の面</translation>
+ </message>
+ <message>
+ <source>COPY_FROM</source>
+ <translation>コピー.</translation>
+ </message>
+ <message>
+ <source>CRITERION</source>
+ <translation>基準</translation>
+ </message>
+ <message>
+ <source>BALLS</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>ELEM0D</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>EDGES</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>ENTITY_TYPE</source>
+ <translation>エンティティの種類</translation>
+ </message>
+ <message>
+ <source>EQUAL_TO</source>
+ <translation>等しい</translation>
+ </message>
+ <message>
+ <source>ERROR</source>
+ <translation>しきい値が正しく指定されていない正しい値を入力して、再試行してください</translation>
+ </message>
+ <message>
+ <source>FACES</source>
+ <translation>直面しています。</translation>
+ </message>
+ <message>
+ <source>FILTER</source>
+ <translation>フィルター</translation>
+ </message>
+ <message>
+ <source>FREE_BORDERS</source>
+ <translation>無料の罫線</translation>
+ </message>
+ <message>
+ <source>FREE_EDGES</source>
+ <translation>自由辺</translation>
+ </message>
+ <message>
+ <source>FREE_NODES</source>
+ <translation>無料ノード</translation>
+ </message>
+ <message>
+ <source>FREE_FACES</source>
+ <translation>無料顔</translation>
+ </message>
+ <message>
+ <source>ID</source>
+ <translation>ID</translation>
+ </message>
+ <message>
+ <source>INSERT</source>
+ <translation>挿入</translation>
+ </message>
+ <message>
+ <source>LENGTH</source>
+ <translation>長さ</translation>
+ </message>
+ <message>
+ <source>LENGTH2D</source>
+ <translation>長さ 2 D</translation>
+ </message>
+ <message>
+ <source>LESS_THAN</source>
+ <translation>小さい</translation>
+ </message>
+ <message>
+ <source>LYING_ON_GEOM</source>
+ <translation>Geom に横たわっています。</translation>
+ </message>
+ <message>
+ <source>MAX_ELEMENT_LENGTH_2D</source>
+ <translation>要素の直径 2 D</translation>
+ </message>
+ <message>
+ <source>MAX_ELEMENT_LENGTH_3D</source>
+ <translation>要素の直径 3 D</translation>
+ </message>
+ <message>
+ <source>MINIMUM_ANGLE</source>
+ <translation>最小角度</translation>
+ </message>
+ <message>
+ <source>MORE_THAN</source>
+ <translation>以上</translation>
+ </message>
+ <message>
+ <source>MULTIEDGES_ERROR</source>
+ <translation>国境 multi-connections でのしきい値値は同じにできません 1 正しい値を入力して、再試行してください</translation>
+ </message>
+ <message>
+ <source>GROUPCOLOR_ERROR</source>
+ <translation>グループの色を undefied できないことができる適切な値を入力して、再試行してください</translation>
+ </message>
+ <message>
+ <source>MULTI_BORDERS</source>
+ <translation>国境 multi-connections で</translation>
+ </message>
+ <message>
+ <source>NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>NOT</source>
+ <translation>ない</translation>
+ </message>
+ <message>
+ <source>OR</source>
+ <translation>または</translation>
+ </message>
+ <message>
+ <source>RANGE_OF_IDS</source>
+ <translation>Id の範囲</translation>
+ </message>
+ <message>
+ <source>REMOVE</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>SKEW</source>
+ <translation>傾斜</translation>
+ </message>
+ <message>
+ <source>TAPER</source>
+ <translation>テーパ</translation>
+ </message>
+ <message>
+ <source>THRESHOLD_VALUE</source>
+ <translation>しきい値</translation>
+ </message>
+ <message>
+ <source>UNARY</source>
+ <translation>単項</translation>
+ </message>
+ <message>
+ <source>VOLUMES</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>VOLUME_3D</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>WARPING</source>
+ <translation>ワープ</translation>
+ </message>
+ <message>
+ <source>LINEAR</source>
+ <translation>線形</translation>
+ </message>
+ <message>
+ <source>GROUP_COLOR</source>
+ <translation>グループの色</translation>
+ </message>
+ <message>
+ <source>ELEMENTS</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE</source>
+ <translation>ジオメトリ タイプ</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_0</source>
+ <translation>ポイント</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_1</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_2</source>
+ <translation>三角形</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_3</source>
+ <translation>四角形</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_4</source>
+ <translation>多角形</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_5</source>
+ <translation>四面体</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_6</source>
+ <translation>ピラミッド</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_7</source>
+ <translation>直方体</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_8</source>
+ <translation>表層五面体</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_9</source>
+ <translation>角柱</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_10</source>
+ <translation>多面体</translation>
+ </message>
+ <message>
+ <source>GEOM_TYPE_11</source>
+ <translation>ボール</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_GroupOpDlg</name>
+ <message>
+ <source>ARGUMENTS</source>
+ <translation>引数</translation>
+ </message>
+ <message>
+ <source>DIFF_MESHES</source>
+ <translation>グループしてください有効な引数を指定してください、異なるメッシュに対応を操作の引数が正しく指定されていません。</translation>
+ </message>
+ <message>
+ <source>DIFF_TYPES</source>
+ <translation>グループが含まれているしてください有効な引数を指定してくださいさまざまな種類の要素を操作の引数が正しく指定されていません。</translation>
+ </message>
+ <message>
+ <source>EMPTY_NAME</source>
+ <translation>作成するグループの名前は有効ではない空白以外の名前を指定して、再試行してください</translation>
+ </message>
+ <message>
+ <source>INCORRECT_ARGUMENTS</source>
+ <translation>操作の引数が指定されていないそれらを指定して、再試行してください</translation>
+ </message>
+ <message>
+ <source>NAME</source>
+ <translation>名前</translation>
+ </message>
+ <message>
+ <source>OBJECT_1</source>
+ <translation>オブジェクト 1</translation>
+ </message>
+ <message>
+ <source>OBJECT_2</source>
+ <translation>オブジェクト 2</translation>
+ </message>
+ <message>
+ <source>RESULT_NAME</source>
+ <translation>結果名</translation>
+ </message>
+ <message>
+ <source>TOOL_OBJECT</source>
+ <translation>ツール オブジェクト</translation>
+ </message>
+ <message>
+ <source>UNION_OF_TWO_GROUPS</source>
+ <translation>2 つのグループの連合</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_GroupDlg</name>
+ <message>
+ <source>SELECT_ALL</source>
+ <translation>すべてを選択します。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_UnionGroupsDlg</name>
+ <message>
+ <source>UNION_OF_GROUPS</source>
+ <translation>グループの連合</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_DimGroupDlg</name>
+ <message>
+ <source>CREATE_GROUP_OF_UNDERLYING_ELEMS</source>
+ <translation>基になるエンティティのグループを作成します。</translation>
+ </message>
+ <message>
+ <source>ELEMENTS_TYPE</source>
+ <translation>要素型</translation>
+ </message>
+ <message>
+ <source>NODE</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>EDGE</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>FACE</source>
+ <translation>顔</translation>
+ </message>
+ <message>
+ <source>VOLUME</source>
+ <translation>ボリューム</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_IntersectGroupsDlg</name>
+ <message>
+ <source>INTERSECTION_OF_GROUPS</source>
+ <translation>グループの交差部分</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_CutGroupsDlg</name>
+ <message>
+ <source>CUT_OF_GROUPS</source>
+ <translation>グループのカット</translation>
+ </message>
+ <message>
+ <source>MAIN_OBJECT</source>
+ <translation>メイン オブジェクト</translation>
+ </message>
+ <message>
+ <source>TOOL_OBJECT</source>
+ <translation>ツール オブジェクト</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MakeNodeAtPointDlg</name>
+ <message>
+ <source>AUTO_SEARCH</source>
+ <translation>目的地に最も近いを見つける</translation>
+ </message>
+ <message>
+ <source>CAPTION</source>
+ <translation>ノードの移動</translation>
+ </message>
+ <message>
+ <source>DESTINATION</source>
+ <translation>宛先</translation>
+ </message>
+ <message>
+ <source>MOVE_NODE</source>
+ <translation>ノードの移動</translation>
+ </message>
+ <message>
+ <source>METHOD</source>
+ <translation>メソッド</translation>
+ </message>
+ <message>
+ <source>NODE_2MOVE</source>
+ <translation>ノードを移動するには</translation>
+ </message>
+ <message>
+ <source>NODE_2MOVE_ID</source>
+ <translation>ID</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MakeNodeAtPointOp</name>
+ <message>
+ <source>INVALID_ID</source>
+ <translation>ノード ID が無効です。</translation>
+ </message>
+ <message>
+ <source>INVALID_MESH</source>
+ <translation>選択を変更しないようにメッシュします。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_FindElemByPointDlg</name>
+ <message>
+ <source>MESH_GROUP</source>
+ <translation>メッシュまたはグループ</translation>
+ </message>
+ <message>
+ <source>CAPTION</source>
+ <translation>要素のポイントを検索します。</translation>
+ </message>
+ <message>
+ <source>CREATE_NEW_METHOD</source>
+ <translation>ノードを作成します。</translation>
+ </message>
+ <message>
+ <source>MESH_PASS_THROUGH_POINT</source>
+ <translation>時点で、ノードを作る</translation>
+ </message>
+ <message>
+ <source>METHOD</source>
+ <translation>メソッド</translation>
+ </message>
+ <message>
+ <source>MOVE_EXISTING_METHOD</source>
+ <translation>ノードを移動します。</translation>
+ </message>
+ <message>
+ <source>NODE_2MOVE</source>
+ <translation>ノードを移動するには</translation>
+ </message>
+ <message>
+ <source>NODE_2MOVE_ID</source>
+ <translation>ID</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MeshDlg</name>
+ <message>
+ <source>CREATE_MESH</source>
+ <translation>メッシュを作成します。</translation>
+ </message>
+ <message>
+ <source>CREATE_SUBMESH</source>
+ <translation>サブメッシュを作成します。</translation>
+ </message>
+ <message>
+ <source>DIM_0D</source>
+ <translation>0 D</translation>
+ </message>
+ <message>
+ <source>DIM_1D</source>
+ <translation>1 D</translation>
+ </message>
+ <message>
+ <source>DIM_2D</source>
+ <translation>2 D</translation>
+ </message>
+ <message>
+ <source>DIM_3D</source>
+ <translation>3 D</translation>
+ </message>
+ <message>
+ <source>EDIT_MESH_SUBMESH</source>
+ <translation>メッシュ/サブ mesh を編集します。</translation>
+ </message>
+ <message>
+ <source>GEOMETRY</source>
+ <translation>ジオメトリ</translation>
+ </message>
+ <message>
+ <source>HYPOTHESES_SETS</source>
+ <translation>仮説のセットを割り当てる</translation>
+ </message>
+ <message>
+ <source>MESH</source>
+ <translation>メッシュ</translation>
+ </message>
+ <message>
+ <source>NAME</source>
+ <translation>名前</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MeshOp</name>
+ <message>
+ <source>ALGORITHM_WITHOUT_HYPOTHESIS</source>
+ <translation>アルゴリズム%1 ディメンションに定義されてですが、仮説が定義されていません</translation>
+ </message>
+ <message>
+ <source>EDIT_SUBMESH_QUESTION</source>
+ <translation>選択したジオメトリのサブメッシュは既に存在します。このサブメッシュを編集しますか。</translation>
+ </message>
+ <message>
+ <source>SUBMESH_NOT_ALLOWED</source>
+ <translation>グローバルのアルゴリズム「%1」は無視サブメッシュを作成するセンスがないです。</translation>
+ </message>
+ <message>
+ <source>GEOMETRY_OBJECT_IS_NOT_DEFINED</source>
+ <translation>ジオメトリ オブジェクトが定義されていないそれを指定して、再試行してください</translation>
+ </message>
+ <message>
+ <source>GEOMETRY_OBJECT_IS_NULL</source>
+ <translation>ジオメトリ オブジェクトが null です。</translation>
+ </message>
+ <message>
+ <source>HYPOTHESES_AND_ALGORITHMS_ARE_NOT_DEFINED</source>
+ <translation>仮説とアルゴリズムが定義されていません。</translation>
+ </message>
+ <message>
+ <source>HYPOTHESIS_WITHOUT_ALGORITHM</source>
+ <translation>仮説%1 ディメンションに定義されていますが、アルゴリズムが定義されていません</translation>
+ </message>
+ <message>
+ <source>IMPORTED_MESH</source>
+ <translation>メッシュのジオメトリには組み込まれていません</translation>
+ </message>
+ <message>
+ <source>INVALID_SUBSHAPE</source>
+ <translation>ジオメトリ オブジェクトは、メッシュ図形のサブ図形ではありません。</translation>
+ </message>
+ <message>
+ <source>MESH_IS_NOT_DEFINED</source>
+ <translation>メッシュが定義されていないそれを指定して、再試行してください</translation>
+ </message>
+ <message>
+ <source>MESH_IS_NULL</source>
+ <translation>メッシュが null です。</translation>
+ </message>
+ <message>
+ <source>NAME_OF_MESH_IS_EMPTY</source>
+ <translation>メッシュの名前が空です有効な名前を入力して、再試行してください</translation>
+ </message>
+ <message>
+ <source>NAME_OF_SUBMESH_IS_EMPTY</source>
+ <translation>サブメッシュの名前が空です有効な名前を入力して、再試行してください</translation>
+ </message>
+ <message>
+ <source>THERE_IS_NO_OBJECT_FOR_EDITING</source>
+ <translation>編集オブジェクトはありません。メッシュを選択または sub-mesh、再試行してください。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MeshPatternDlg</name>
+ <message>
+ <source>3D_BLOCK</source>
+ <translation>3 D ブロック</translation>
+ </message>
+ <message>
+ <source>CAPTION</source>
+ <translation>パターンのマッピング</translation>
+ </message>
+ <message>
+ <source>CREATE_POLYEDRS_NEAR_BOUNDARY</source>
+ <translation>多面体の境界付近を作成します。</translation>
+ </message>
+ <message>
+ <source>CREATE_POLYGONS_NEAR_BOUNDARY</source>
+ <translation>ポリゴン境界を作成します。</translation>
+ </message>
+ <message>
+ <source>ERROR_OF_LOADING</source>
+ <translation>ファイルからパターンを読み込んでいます。おそらくファイルが破損しているまたはその他の種類のパターンが含まれています</translation>
+ </message>
+ <message>
+ <source>ERROR_OF_OPENING</source>
+ <translation>ファイルを開くことはできません。ファイルが存在するかどうかと、このファイルにアクセス許可を確認してください。</translation>
+ </message>
+ <message>
+ <source>ERROR_OF_READING</source>
+ <translation>それは可能ではないしてくださいのパターンをロードするファイルの内容を確認してください</translation>
+ </message>
+ <message>
+ <source>ERR_READ_3D_COORD</source>
+ <translation>3 D の点が [0, 1] の範囲外のパターン座標をロードすることはできません。</translation>
+ </message>
+ <message>
+ <source>ERR_READ_BAD_INDEX</source>
+ <translation>パターン検出ポイントの無効なインデックスをロードすることはできません。</translation>
+ </message>
+ <message>
+ <source>ERR_READ_BAD_KEY_POINT</source>
+ <translation>パターン キー ポイントは、境界ではなくロードすることはできません。</translation>
+ </message>
+ <message>
+ <source>ERR_READ_ELEM_POINTS</source>
+ <translation>パターン要素内のポイント数が無効ですをロードすることはできません。</translation>
+ </message>
+ <message>
+ <source>ERR_READ_NB_POINTS</source>
+ <translation>それは読むことは不可能ではないロード パターンに可能ではないファイルからのポイント数</translation>
+ </message>
+ <message>
+ <source>ERR_READ_NO_ELEMS</source>
+ <translation>それはロード パターンが可能ではないそれに要素がないです。</translation>
+ </message>
+ <message>
+ <source>ERR_READ_NO_KEYPOINT</source>
+ <translation>それはロード パターンが可能ですない 2 D 1 つの要点</translation>
+ </message>
+ <message>
+ <source>ERR_READ_POINT_COORDS</source>
+ <translation>ファイルからポイントの座標を読むことは不可能ではないパターンを読み込むことができるではないです。</translation>
+ </message>
+ <message>
+ <source>ERR_READ_TOO_FEW_POINTS</source>
+ <translation>パターンをロードすることが可能です。ファイル パターンをロードするためにあまりにもいくつかのポイントがあります。</translation>
+ </message>
+ <message>
+ <source>FACE</source>
+ <translation>顔</translation>
+ </message>
+ <message>
+ <source>LOAD_PATTERN</source>
+ <translation>ロード パターン</translation>
+ </message>
+ <message>
+ <source>MESH_FACES</source>
+ <translation>メッシュの面</translation>
+ </message>
+ <message>
+ <source>MESH_VOLUMES</source>
+ <translation>ボリュームをメッシュします。</translation>
+ </message>
+ <message>
+ <source>NEW</source>
+ <translation>新機能。。。</translation>
+ </message>
+ <message>
+ <source>NODE_1</source>
+ <translation>ノード 1</translation>
+ </message>
+ <message>
+ <source>NODE_2</source>
+ <translation>ノード 2</translation>
+ </message>
+ <message>
+ <source>PATTERN</source>
+ <translation>パターン</translation>
+ </message>
+ <message>
+ <source>PATTERN_FILT</source>
+ <translation>パターン files(*.smp)</translation>
+ </message>
+ <message>
+ <source>PATTERN_TYPE</source>
+ <translation>パターンの種類</translation>
+ </message>
+ <message>
+ <source>PREVIEW</source>
+ <translation>プレビュー</translation>
+ </message>
+ <message>
+ <source>REFINE</source>
+ <translation>選択したメッシュ要素を絞り込む</translation>
+ </message>
+ <message>
+ <source>REVERSE</source>
+ <translation>キー点の逆の順序</translation>
+ </message>
+ <message>
+ <source>VERTEX</source>
+ <translation>頂点</translation>
+ </message>
+ <message>
+ <source>VERTEX1</source>
+ <translation>頂点 1</translation>
+ </message>
+ <message>
+ <source>VERTEX2</source>
+ <translation>頂点 2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MeshTab</name>
+ <message>
+ <source>ADD_HYPOTHESIS</source>
+ <translation>追加します。仮説</translation>
+ </message>
+ <message>
+ <source>ALGORITHM</source>
+ <translation>アルゴリズム</translation>
+ </message>
+ <message>
+ <source>HYPOTHESIS</source>
+ <translation>仮説</translation>
+ </message>
+ <message>
+ <source>NONE</source>
+ <translation><None></translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MultiEditDlg</name>
+ <message>
+ <source>ADD</source>
+ <translation>追加</translation>
+ </message>
+ <message>
+ <source>FILTER</source>
+ <translation>フィルター</translation>
+ </message>
+ <message>
+ <source>REMOVE</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>SELECT_FROM</source>
+ <translation>選択します</translation>
+ </message>
+ <message>
+ <source>SORT_LIST</source>
+ <translation>並べ替えリスト</translation>
+ </message>
+ <message>
+ <source>SPLIT_JOIN_CRITERION</source>
+ <translation>基準</translation>
+ </message>
+ <message>
+ <source>TO_ALL</source>
+ <translation>すべてに適用されます。</translation>
+ </message>
+ <message>
+ <source>USE_DIAGONAL_1_3</source>
+ <translation>対角 1-3 を使用します。</translation>
+ </message>
+ <message>
+ <source>USE_DIAGONAL_2_4</source>
+ <translation>使用して、斜めの 2-4</translation>
+ </message>
+ <message>
+ <source>USE_NUMERIC_FUNC</source>
+ <translation>数値関数を使用します。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_CuttingIntoTetraDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>ボリュームに四面体分割</translation>
+ </message>
+ <message>
+ <source>SPLIT_METHOD</source>
+ <translation>直方体を分割します。</translation>
+ </message>
+ <message>
+ <source>SPLIT_HEX_TO_5_TETRA</source>
+ <translation>5 四面体に</translation>
+ </message>
+ <message>
+ <source>SPLIT_HEX_TO_6_TETRA</source>
+ <translation>6 四面体に</translation>
+ </message>
+ <message>
+ <source>SPLIT_HEX_TO_24_TETRA</source>
+ <translation>24 四面体に</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_PrecisionDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>メッシュ品質制御の精度</translation>
+ </message>
+ <message>
+ <source>NOT_USE</source>
+ <translation>使用しないでください。</translation>
+ </message>
+ <message>
+ <source>PRECISION</source>
+ <translation>ポイント後の桁数</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_RevolutionDlg</name>
+ <message>
+ <source>ANGLE_BY_STEP</source>
+ <translation>ステップ角度</translation>
+ </message>
+ <message>
+ <source>PREVIEW</source>
+ <translation>プレビュー</translation>
+ </message>
+ <message>
+ <source>REVOLUTION_1D</source>
+ <translation>1 次元要素の革命</translation>
+ </message>
+ <message>
+ <source>REVOLUTION_2D</source>
+ <translation>2 D 要素の革命</translation>
+ </message>
+ <message>
+ <source>REVOLUTION_AROUND_AXIS</source>
+ <translation>軸の周りを公転</translation>
+ </message>
+ <message>
+ <source>TOTAL_ANGLE</source>
+ <translation>合計角度</translation>
+ </message>
+ <message>
+ <source>MEN_POINT_SELECT</source>
+ <translation>選択したポイントからの起源</translation>
+ </message>
+ <message>
+ <source>MEN_FACE_SELECT</source>
+ <translation>選択した面に通常</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_SewingDlg</name>
+ <message>
+ <source>BORDER</source>
+ <translation>枠線</translation>
+ </message>
+ <message>
+ <source>BORDER_1</source>
+ <translation>ボーダー 1</translation>
+ </message>
+ <message>
+ <source>BORDER_2</source>
+ <translation>枠線 2</translation>
+ </message>
+ <message>
+ <source>CREATE_POLYEDRS_NEAR_BOUNDARY</source>
+ <translation>Polyedres によって影響を受けるボリュームを置き換える</translation>
+ </message>
+ <message>
+ <source>CREATE_POLYGONS_INSTEAD_SPLITTING</source>
+ <translation>分割するのではなくポリゴンを作成します。</translation>
+ </message>
+ <message>
+ <source>ERROR_1</source>
+ <translation>無料 Border1 によって選択されたノードが見つかりません</translation>
+ </message>
+ <message>
+ <source>ERROR_2</source>
+ <translation>無料 Border2 によって選択されたノードが見つかりません</translation>
+ </message>
+ <message>
+ <source>ERROR_3</source>
+ <translation>無料の Border1 と Border2 によって選択されたノードが見つかりません</translation>
+ </message>
+ <message>
+ <source>ERROR_4</source>
+ <translation>側の最初のノードから最後の側のノードへのパスが発見されてないです。</translation>
+ </message>
+ <message>
+ <source>ERROR_5</source>
+ <translation>におけるスプリット ボリューム側にすることはできません !</translation>
+ </message>
+ <message>
+ <source>ERROR_6</source>
+ <translation>両側に選択された要素の数が異なる</translation>
+ </message>
+ <message>
+ <source>ERROR_7</source>
+ <translation>要素セットがトポロジ的に異なるか、与えられたノードが便利です。</translation>
+ </message>
+ <message>
+ <source>ERROR_8</source>
+ <translation>ノード 1 の側にもリンクされていない、または要素に敷設ではないの境界設定</translation>
+ </message>
+ <message>
+ <source>ERROR_9</source>
+ <translation>ノード 2 の面にもリンクされていないまたは要素に敷設ではないの境界設定</translation>
+ </message>
+ <message>
+ <source>FIRST_NODE_ID</source>
+ <translation>最初のノード ID</translation>
+ </message>
+ <message>
+ <source>LAST_NODE_ID</source>
+ <translation>最後のノード ID</translation>
+ </message>
+ <message>
+ <source>MERGE_EQUAL_ELEMENTS</source>
+ <translation>等値要素をマージします。</translation>
+ </message>
+ <message>
+ <source>NODE1_TO_MERGE</source>
+ <translation>ノード 1 をマージ</translation>
+ </message>
+ <message>
+ <source>NODE2_TO_MERGE</source>
+ <translation>ノード 2 に結合する</translation>
+ </message>
+ <message>
+ <source>SECOND_NODE_ID</source>
+ <translation>2 番目のノード ID</translation>
+ </message>
+ <message>
+ <source>SEW_BORDER_TO_SIDE</source>
+ <translation>国境側を縫う</translation>
+ </message>
+ <message>
+ <source>SEW_CONFORM_FREE_BORDERS</source>
+ <translation>縫う無料国境に適合</translation>
+ </message>
+ <message>
+ <source>SEW_FREE_BORDERS</source>
+ <translation>無料国境を縫う</translation>
+ </message>
+ <message>
+ <source>SEW_SIDE_ELEMENTS</source>
+ <translation>側の要素を縫う</translation>
+ </message>
+ <message>
+ <source>SIDE</source>
+ <translation>側</translation>
+ </message>
+ <message>
+ <source>SIDE_1</source>
+ <translation>サイド 1</translation>
+ </message>
+ <message>
+ <source>SIDE_2</source>
+ <translation>サイド 2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ShapeByMeshDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>ジオメトリをメッシュ要素を検索します。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_SingleEditDlg</name>
+ <message>
+ <source>EDGE_BETWEEN</source>
+ <translation>隣接する三角形の間のエッジ</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_SmoothingDlg</name>
+ <message>
+ <source>CENTROIDAL</source>
+ <translation>中心</translation>
+ </message>
+ <message>
+ <source>FIXED_NODES_IDS</source>
+ <translation>固定ノード id</translation>
+ </message>
+ <message>
+ <source>IS_PARAMETRIC</source>
+ <translation>パラメーター空間で</translation>
+ </message>
+ <message>
+ <source>ITERATION_LIMIT</source>
+ <translation>反復の制限</translation>
+ </message>
+ <message>
+ <source>LAPLACIAN</source>
+ <translation>ラプラシアン</translation>
+ </message>
+ <message>
+ <source>MAX_ASPECT_RATIO</source>
+ <translation>最大。アスペクト比</translation>
+ </message>
+ <message>
+ <source>METHOD</source>
+ <translation>メソッド</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_TrianglesInversionDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>斜めの反転</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_UnionOfTrianglesDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>三角形の和集合</translation>
+ </message>
+ <message>
+ <source>MAXIMUM_ANGLE</source>
+ <translation>最大ベンド角度</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_UnionOfTwoTrianglesDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>2 つの三角形の和集合</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_FileInfoDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>ファイル情報</translation>
+ </message>
+ <message>
+ <source>FILE_NAME</source>
+ <translation>ファイル名</translation>
+ </message>
+ <message>
+ <source>FILE_SIZE</source>
+ <translation>ファイル サイズ (バイト)</translation>
+ </message>
+ <message>
+ <source>MED_VERSION</source>
+ <translation>音楽配信マック & バージョン</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_GroupOnShapeDlg</name>
+ <message>
+ <source>SMESH_CREATE_GROUP_FROM_GEOM</source>
+ <translation>ジオメトリ グループを作成します。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MeshOrderDlg</name>
+ <message>
+ <source>SMESH_MESHORDER_TITLE</source>
+ <translation>プロセスをメッシュのサブメッシュの順序</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MeshOrderOp</name>
+ <message>
+ <source>SMESH_NO_CONCURENT_MESH</source>
+ <translation>検出されたない同時 submeshes</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ClippingDlg</name>
+ <message>
+ <source>CLIP_PLANES</source>
+ <translation>クリップ面</translation>
+ </message>
+ <message>
+ <source>MESHES_SUBMESHES_GROUPS</source>
+ <translation>メッシュ、サブメッシュおよびグループ</translation>
+ </message>
+ <message>
+ <source>SELECT_ALL</source>
+ <translation>すべてを選択します。</translation>
+ </message>
+ <message>
+ <source>ROTATION_AROUND_X_Y2Z</source>
+ <translation>回転 X (Z に Y):</translation>
+ </message>
+ <message>
+ <source>ROTATION_AROUND_Y_X2Z</source>
+ <translation>Y (X Z) を回転:</translation>
+ </message>
+ <message>
+ <source>ROTATION_AROUND_Z_Y2X</source>
+ <translation>Z (Y へ) の回転:</translation>
+ </message>
+ <message>
+ <source>ROTATION_AROUND_X_Z2Y</source>
+ <translation>回転軸 (Y に Z) X:</translation>
+ </message>
+ <message>
+ <source>ROTATION_AROUND_Y_Z2X</source>
+ <translation>Y (x Z) を回転:</translation>
+ </message>
+ <message>
+ <source>ROTATION_AROUND_Z_X2Y</source>
+ <translation>回転 Z (X Y):</translation>
+ </message>
+ <message>
+ <source>SHOW_PREVIEW</source>
+ <translation>プレビューを表示します。</translation>
+ </message>
+ <message>
+ <source>AUTO_APPLY</source>
+ <translation>自動適用します。</translation>
+ </message>
+ <message>
+ <source>ALONG_XY</source>
+ <translation>||X と Y</translation>
+ </message>
+ <message>
+ <source>ALONG_YZ</source>
+ <translation>||Y Z</translation>
+ </message>
+ <message>
+ <source>ALONG_ZX</source>
+ <translation>||Z X</translation>
+ </message>
+ <message>
+ <source>PLANE_NUM</source>
+ <translation>平面 #%1</translation>
+ </message>
+ <message>
+ <source>NO_PLANES</source>
+ <translation>ないプレーン</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_DuplicateNodesDlg</name>
+ <message>
+ <source>DUPLICATION_MODE</source>
+ <translation>複製モード</translation>
+ </message>
+ <message>
+ <source>DUPLICATION_WITHOUT_ELEMS</source>
+ <translation>境界要素の重複なし</translation>
+ </message>
+ <message>
+ <source>GROUP_NODES_TO_DUPLICATE</source>
+ <translation>重複したノードのグループ</translation>
+ </message>
+ <message>
+ <source>GROUP_NODES_TO_REPLACE</source>
+ <translation>ノードを新しいものに交換する要素のグループ</translation>
+ </message>
+ <message>
+ <source>DUPLICATION_WITH_ELEMS</source>
+ <translation>境界要素の重複</translation>
+ </message>
+ <message>
+ <source>GROUP_ELEMS_TO_DUPLICATE</source>
+ <translation>重複した要素のグループ</translation>
+ </message>
+ <message>
+ <source>GROUP_NODES_NOT_DUPLICATE</source>
+ <translation>重複ノードのグループ</translation>
+ </message>
+ <message>
+ <source>GROUP_ELEMS_TO_REPLACE</source>
+ <translation>ノードを新しいものに交換する要素のグループ</translation>
+ </message>
+ <message>
+ <source>CONSTRUCT_NEW_GROUP_NODES</source>
+ <translation>新しく作成したノードにグループを作成します。</translation>
+ </message>
+ <message>
+ <source>CONSTRUCT_NEW_GROUP_ELEMENTS</source>
+ <translation>新しく作成された要素を持つグループを作成します。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_Make2DFrom3DDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>境界要素を作成します。</translation>
+ </message>
+ <message>
+ <source>Groups</source>
+ <translation>メッシュまたはグループ</translation>
+ </message>
+ <message>
+ <source>MODE</source>
+ <translation>モード</translation>
+ </message>
+ <message>
+ <source>2D_FROM_3D</source>
+ <translation>2 D 3 D から</translation>
+ </message>
+ <message>
+ <source>1D_FROM_3D</source>
+ <translation>1 D 2 D グループから</translation>
+ </message>
+ <message>
+ <source>1D_FROM_2D</source>
+ <translation>1 D 2 D から</translation>
+ </message>
+ <message>
+ <source>TARGET</source>
+ <translation>ターゲット</translation>
+ </message>
+ <message>
+ <source>THIS_MESH</source>
+ <translation>このメッシュ</translation>
+ </message>
+ <message>
+ <source>NEW_MESH</source>
+ <translation>新しいメッシュ</translation>
+ </message>
+ <message>
+ <source>COPY_SRC</source>
+ <translation>ソース メッシュをコピーします。</translation>
+ </message>
+ <message>
+ <source>MISSING_ONLY</source>
+ <translation>不足している要素のみをコピーします。</translation>
+ </message>
+ <message>
+ <source>CREATE_GROUP</source>
+ <translation>グループを作成します。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_Make2DFrom3DOp</name>
+ <message>
+ <source>NB_ADDED</source>
+ <translation>%1 境界要素追加されています。</translation>
+ </message>
+ <message>
+ <source>WRONG_GROUPS</source>
+ <translation>不適切な種類は、次のグループが処理されていない:%1</translation>
+ </message>
+ <message>
+ <source>SMESH_ERR_NO_INPUT_MESH</source>
+ <translation>ソース メッシュが指定されていません。</translation>
+ </message>
+ <message>
+ <source>SMESH_TOO_MANY_MESHES</source>
+ <translation>のみ 1 つのメッシュを一度に処理することができます。</translation>
+ </message>
+ <message>
+ <source>SMESH_NOT_ONLY_GROUPS</source>
+ <translation>メッシュとグループを一度に処理することはできません。</translation>
+ </message>
+ <message>
+ <source>SMESH_ERR_NO_3D_ELEMENTS</source>
+ <translation>ソース オブジェクトが 3 D の要素を含まない</translation>
+ </message>
+ <message>
+ <source>SMESH_ERR_NO_2D_ELEMENTS</source>
+ <translation>ソース オブジェクトが 2D 要素を含まない</translation>
+ </message>
+ <message>
+ <source>SMESH_ERR_MESH_NAME_NOT_SPECIFIED</source>
+ <translation>新しいメッシュ名が指定されていません。</translation>
+ </message>
+ <message>
+ <source>SMESH_ERR_GRP_NAME_NOT_SPECIFIED</source>
+ <translation>グループ名が指定されていません。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MeshInfo</name>
+ <message>
+ <source>NAME_LAB</source>
+ <translation>名前:</translation>
+ </message>
+ <message>
+ <source>OBJECT_LAB</source>
+ <translation>オブジェクト:</translation>
+ </message>
+ <message>
+ <source>NODES_LAB</source>
+ <translation>ノード:</translation>
+ </message>
+ <message>
+ <source>ELEMENTS_LAB</source>
+ <translation>要素:</translation>
+ </message>
+ <message>
+ <source>TOTAL_LAB</source>
+ <translation>合計</translation>
+ </message>
+ <message>
+ <source>LINEAR_LAB</source>
+ <translation>線形</translation>
+ </message>
+ <message>
+ <source>QUADRATIC_LAB</source>
+ <translation>2 次</translation>
+ </message>
+ <message>
+ <source>0D_LAB</source>
+ <translation>0 D:</translation>
+ </message>
+ <message>
+ <source>BALL_LAB</source>
+ <translation>ボールは:</translation>
+ </message>
+ <message>
+ <source>1D_LAB</source>
+ <translation>1 D (エッジ):</translation>
+ </message>
+ <message>
+ <source>2D_LAB</source>
+ <translation>2 D (面):</translation>
+ </message>
+ <message>
+ <source>TRIANGLES_LAB</source>
+ <translation>三角形:</translation>
+ </message>
+ <message>
+ <source>QUADRANGLES_LAB</source>
+ <translation>四角形:</translation>
+ </message>
+ <message>
+ <source>POLYGONS_LAB</source>
+ <translation>ポリゴン:</translation>
+ </message>
+ <message>
+ <source>3D_LAB</source>
+ <translation>3 D (ボリューム):</translation>
+ </message>
+ <message>
+ <source>TETRAHEDRONS_LAB</source>
+ <translation>四面体:</translation>
+ </message>
+ <message>
+ <source>HEXAHEDONRS_LAB</source>
+ <translation>Hexahedrons:</translation>
+ </message>
+ <message>
+ <source>PYRAMIDS_LAB</source>
+ <translation>ピラミッド:</translation>
+ </message>
+ <message>
+ <source>PRISMS_LAB</source>
+ <translation>プリズム:</translation>
+ </message>
+ <message>
+ <source>HEX_PRISMS_LAB</source>
+ <translation>六角形プリズム:</translation>
+ </message>
+ <message>
+ <source>POLYHEDRONS_LAB</source>
+ <translation>多面体:</translation>
+ </message>
+ <message>
+ <source>OBJECT_MESH</source>
+ <translation>メッシュ</translation>
+ </message>
+ <message>
+ <source>OBJECT_SUBMESH</source>
+ <translation>サブメッシュ</translation>
+ </message>
+ <message>
+ <source>OBJECT_GROUP</source>
+ <translation>グループ</translation>
+ </message>
+ <message>
+ <source>OBJECT_GROUP_NODES</source>
+ <translation>ノードのグループ</translation>
+ </message>
+ <message>
+ <source>OBJECT_GROUP_EDGES</source>
+ <translation>エッジのグループ</translation>
+ </message>
+ <message>
+ <source>OBJECT_GROUP_FACES</source>
+ <translation>面のグループ</translation>
+ </message>
+ <message>
+ <source>OBJECT_GROUP_VOLUMES</source>
+ <translation>ボリューム ・ グループ</translation>
+ </message>
+ <message>
+ <source>OBJECT_GROUP_0DELEMS</source>
+ <translation>0 D 要素のグループ</translation>
+ </message>
+ <message>
+ <source>OBJECT_GROUP_BALLS</source>
+ <translation>ボールのグループ</translation>
+ </message>
+ <message>
+ <source>BUT_LOAD_MESH</source>
+ <translation>サーバーからメッシュをロードします。</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MeshInfoDlg</name>
+ <message>
+ <source>MESH_INFO</source>
+ <translation>メッシュ情報</translation>
+ </message>
+ <message>
+ <source>BASE_INFO</source>
+ <translation>基本情報</translation>
+ </message>
+ <message>
+ <source>ELEM_INFO</source>
+ <translation>要素情報</translation>
+ </message>
+ <message>
+ <source>ADDITIONAL_INFO</source>
+ <translation>追加情報</translation>
+ </message>
+ <message>
+ <source>NODE_MODE</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>ELEM_MODE</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>X_FROM_Y_ITEMS_SHOWN</source>
+ <translation>%1%2%3 の項目の表示から</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ElemInfo</name>
+ <message>
+ <source>COORDINATES</source>
+ <translation>座標</translation>
+ </message>
+ <message>
+ <source>CONNECTIVITY</source>
+ <translation>接続</translation>
+ </message>
+ <message>
+ <source>GRAVITY_CENTER</source>
+ <translation>重心</translation>
+ </message>
+ <message>
+ <source>NODE</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>0D_ELEMENT</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>0D_ELEMENTS</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>BALL_ELEMENT</source>
+ <translation>ボールの要素</translation>
+ </message>
+ <message>
+ <source>BALL_ELEMENTS</source>
+ <translation>ボールの要素</translation>
+ </message>
+ <message>
+ <source>EDGE</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>EDGES</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>FACE</source>
+ <translation>顔</translation>
+ </message>
+ <message>
+ <source>FACES</source>
+ <translation>直面しています。</translation>
+ </message>
+ <message>
+ <source>VOLUME</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>VOLUMES</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>FREE_NODE</source>
+ <translation>無料ノード (接続なし)</translation>
+ </message>
+ <message>
+ <source>TYPE</source>
+ <translation>タイプ</translation>
+ </message>
+ <message>
+ <source>TRIANGLE</source>
+ <translation>三角形</translation>
+ </message>
+ <message>
+ <source>QUADRANGLE</source>
+ <translation>四角形</translation>
+ </message>
+ <message>
+ <source>POLYGON</source>
+ <translation>多角形</translation>
+ </message>
+ <message>
+ <source>TETRAHEDRON</source>
+ <translation>四面体</translation>
+ </message>
+ <message>
+ <source>HEXAHEDRON</source>
+ <translation>直方体</translation>
+ </message>
+ <message>
+ <source>PYRAMID</source>
+ <translation>ピラミッド</translation>
+ </message>
+ <message>
+ <source>PRISM</source>
+ <translation>プリズム</translation>
+ </message>
+ <message>
+ <source>HEX_PRISM</source>
+ <translation>角柱</translation>
+ </message>
+ <message>
+ <source>POLYHEDRON</source>
+ <translation>多面体</translation>
+ </message>
+ <message>
+ <source>QUADRATIC</source>
+ <translation>2 次</translation>
+ </message>
+ <message>
+ <source>YES</source>
+ <translation>はい</translation>
+ </message>
+ <message>
+ <source>NO</source>
+ <translation>いいえ</translation>
+ </message>
+ <message>
+ <source>PROPERTY</source>
+ <translation>プロパティ</translation>
+ </message>
+ <message>
+ <source>VALUE</source>
+ <translation>値</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_AddInfo</name>
+ <message>
+ <source>NAME</source>
+ <translation>名前</translation>
+ </message>
+ <message>
+ <source>GROUPS</source>
+ <translation>グループ</translation>
+ </message>
+ <message>
+ <source>GROUPS_1</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>GROUPS_2</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>GROUPS_3</source>
+ <translation>直面しています。</translation>
+ </message>
+ <message>
+ <source>GROUPS_4</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>GROUPS_5</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>GROUPS_6</source>
+ <translation>ボールの要素</translation>
+ </message>
+ <message>
+ <source>PARENT_MESH</source>
+ <translation>親メッシュ</translation>
+ </message>
+ <message>
+ <source>TYPE</source>
+ <translation>タイプ</translation>
+ </message>
+ <message>
+ <source>STANDALONE_GROUP</source>
+ <translation>スタンドアロン グループ</translation>
+ </message>
+ <message>
+ <source>GROUP_ON_GEOMETRY</source>
+ <translation>ジオメトリ グループします。</translation>
+ </message>
+ <message>
+ <source>GROUP_ON_FILTER</source>
+ <translation>フィルターをグループ化します。</translation>
+ </message>
+ <message>
+ <source>GEOM_OBJECT</source>
+ <translation>図形</translation>
+ </message>
+ <message>
+ <source>NODE</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>EDGE</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>FACE</source>
+ <translation>顔</translation>
+ </message>
+ <message>
+ <source>VOLUME</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>0DELEM</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>BALL_ELEMENT</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>UNKNOWN</source>
+ <translation>不明</translation>
+ </message>
+ <message>
+ <source>ENTITY_TYPE</source>
+ <translation>エンティティの種類</translation>
+ </message>
+ <message>
+ <source>SIZE</source>
+ <translation>サイズ</translation>
+ </message>
+ <message>
+ <source>COLOR</source>
+ <translation>色</translation>
+ </message>
+ <message>
+ <source>NB_NODES</source>
+ <translation>基になるノード</translation>
+ </message>
+ <message>
+ <source>COMPUTE</source>
+ <translation>計算</translation>
+ </message>
+ <message>
+ <source>LOAD</source>
+ <translation>負荷</translation>
+ </message>
+ <message>
+ <source>MESH_ON_GEOMETRY</source>
+ <translation>幾何学に基づく</translation>
+ </message>
+ <message>
+ <source>MESH_FROM_FILE</source>
+ <translation>インポート</translation>
+ </message>
+ <message>
+ <source>FILE_NAME</source>
+ <translation>ファイル名</translation>
+ </message>
+ <message>
+ <source>STANDALONE_MESH</source>
+ <translation>スタンドアロン</translation>
+ </message>
+ <message>
+ <source>SUBMESHES</source>
+ <translation>サブメッシュ</translation>
+ </message>
+ <message>
+ <source>SUBMESHES_0</source>
+ <translation>化合物</translation>
+ </message>
+ <message>
+ <source>SUBMESHES_2</source>
+ <translation>固体</translation>
+ </message>
+ <message>
+ <source>SUBMESHES_3</source>
+ <translation>シェル</translation>
+ </message>
+ <message>
+ <source>SUBMESHES_4</source>
+ <translation>顔</translation>
+ </message>
+ <message>
+ <source>SUBMESHES_5</source>
+ <translation>ワイヤー</translation>
+ </message>
+ <message>
+ <source>SUBMESHES_6</source>
+ <translation>エッジ</translation>
+ </message>
+ <message>
+ <source>SUBMESHES_7</source>
+ <translation>頂点</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MinDistance</name>
+ <message>
+ <source>FIRST_TARGET</source>
+ <translation>最初のターゲット</translation>
+ </message>
+ <message>
+ <source>SECOND_TARGET</source>
+ <translation>2 番目のターゲット</translation>
+ </message>
+ <message>
+ <source>NODE</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>ELEMENT</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>OBJECT</source>
+ <translation>オブジェクト</translation>
+ </message>
+ <message>
+ <source>ORIGIN</source>
+ <translation>起源</translation>
+ </message>
+ <message>
+ <source>COMPUTE</source>
+ <translation>計算</translation>
+ </message>
+ <message>
+ <source>RESULT</source>
+ <translation>ターゲット間の距離</translation>
+ </message>
+ <message>
+ <source>DISTANCE</source>
+ <translation>距離</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_CopyMeshDlg</name>
+ <message>
+ <source>OBJECT_NAME</source>
+ <translation>ソース オブジェクト</translation>
+ </message>
+ <message>
+ <source>ELEM_IDS</source>
+ <translation>ソース要素 Id</translation>
+ </message>
+ <message>
+ <source>NEW_NAME</source>
+ <translation>新しいメッシュ名</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MeasureDlg</name>
+ <message>
+ <source>MEASUREMENTS</source>
+ <translation>測定</translation>
+ </message>
+ <message>
+ <source>MIN_DIST</source>
+ <translation>最小距離</translation>
+ </message>
+ <message>
+ <source>BND_BOX</source>
+ <translation>境界ボックス</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_BoundingBox</name>
+ <message>
+ <source>SOURCE</source>
+ <translation>ソース</translation>
+ </message>
+ <message>
+ <source>OBJECTS</source>
+ <translation>オブジェクト</translation>
+ </message>
+ <message>
+ <source>NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>ELEMENTS</source>
+ <translation>要素</translation>
+ </message>
+ <message>
+ <source>COMPUTE</source>
+ <translation>計算</translation>
+ </message>
+ <message>
+ <source>RESULT</source>
+ <translation>境界ボックス</translation>
+ </message>
+ <message>
+ <source>SELECTED_NB_OBJ</source>
+ <translation>%選択した 1%2</translation>
+ </message>
+ <message>
+ <source>NB_NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>NB_ELEMENTS</source>
+ <translation>要素</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_MeshLoadingProgress</name>
+ <message>
+ <source>MESH_LOAD_PROGRESS_TITLE</source>
+ <translation>メッシュの読み込み</translation>
+ </message>
+ </context>
+ <context>
+ <name>StdMeshersGUI_SubShapeSelectorWdg</name>
+ <message>
+ <source>X_FROM_Y_ITEMS_SHOWN</source>
+ <translation>%1%2%3 の項目の表示から</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ReorientFacesDlg</name>
+ <message>
+ <source>CAPTION</source>
+ <translation>ベクトルによって顔の向きを変更します。</translation>
+ </message>
+ <message>
+ <source>REORIENT_FACES</source>
+ <translation>向きを変える</translation>
+ </message>
+ <message>
+ <source>DIRECTION</source>
+ <translation>方向</translation>
+ </message>
+ <message>
+ <source>OBJECT</source>
+ <translation>オブジェクト</translation>
+ </message>
+ <message>
+ <source>POINT</source>
+ <translation>ポイント</translation>
+ </message>
+ <message>
+ <source>FACE</source>
+ <translation>顔</translation>
+ </message>
+ <message>
+ <source>FACES</source>
+ <translation>顔のソース</translation>
+ </message>
+ <message>
+ <source>ORIENTATION</source>
+ <translation>印刷の向き</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_ReorientFacesOp</name>
+ <message>
+ <source>NO_OBJECT_SELECTED</source>
+ <translation>選択したオブジェクトがありません。</translation>
+ </message>
+ <message>
+ <source>NO_FACES</source>
+ <translation>オブジェクトに顔が含まれていません</translation>
+ </message>
+ <message>
+ <source>ZERO_SIZE_VECTOR</source>
+ <translation>サイズ ベクトルは 0 します。</translation>
+ </message>
+ <message>
+ <source>INVALID_FACE</source>
+ <translation>有効でない顔</translation>
+ </message>
+ <message>
+ <source>NB_REORIENTED</source>
+ <translation>%逆に 1 面</translation>
+ </message>
+ </context>
+ <context>
+ <name>SMESHGUI_PropertiesDlg</name>
+ <message>
+ <source>TITLE</source>
+ <translation>プロパティ</translation>
+ </message>
+ <message>
+ <source>NODES</source>
+ <translation>ノード</translation>
+ </message>
+ <message>
+ <source>EDGES</source>
+ <translation>エッジ/ワイヤ フレーム</translation>
+ </message>
+ <message>
+ <source>FACES</source>
+ <translation>直面しています。</translation>
+ </message>
+ <message>
+ <source>VOLUMES</source>
+ <translation>ボリューム</translation>
+ </message>
+ <message>
+ <source>OUTLINES</source>
+ <translation>概要</translation>
+ </message>
+ <message>
+ <source>0D_ELEMENTS</source>
+ <translation>0 D 要素</translation>
+ </message>
+ <message>
+ <source>BALLS</source>
+ <translation>ボール</translation>
+ </message>
+ <message>
+ <source>ORIENTATIONS</source>
+ <translation>方向ベクトル</translation>
+ </message>
+ <message>
+ <source>COLOR</source>
+ <translation>色:</translation>
+ </message>
+ <message>
+ <source>WIDTH</source>
+ <translation>幅:</translation>
+ </message>
+ <message>
+ <source>FACE_FRONT</source>
+ <translation>フロント:</translation>
+ </message>
+ <message>
+ <source>FACE_BACK</source>
+ <translation>戻る:</translation>
+ </message>
+ <message>
+ <source>VOLUME_NORMAL</source>
+ <translation>標準:</translation>
+ </message>
+ <message>
+ <source>VOLUME_REVERSED</source>
+ <translation>元に戻します。</translation>
+ </message>
+ <message>
+ <source>SIZE</source>
+ <translation>サイズ:</translation>
+ </message>
+ <message>
+ <source>ORIENTATION_SCALE</source>
+ <translation>スケール:</translation>
+ </message>
+ <message>
+ <source>ORIENTATION_3D</source>
+ <translation>3D ベクトル</translation>
+ </message>
+ <message>
+ <source>SHRINK</source>
+ <translation>縮小係数:</translation>
+ </message>
+ </context>
+</TS>
void getElementsInSphere ( const gp_XYZ& center,
const double radius, TIDSortedElemSet& foundElems);
size_t getSize() { return std::max( _size, _elements.size() ); }
- ~ElementBndBoxTree();
+ virtual ~ElementBndBoxTree();
protected:
ElementBndBoxTree():_size(0) {}
*/
//=======================================================================
+SMESH_ElementSearcher::~SMESH_ElementSearcher()
+{
+}
+
struct SMESH_ElementSearcherImpl: public SMESH_ElementSearcher
{
SMDS_Mesh* _mesh;
SMESH_ElementSearcherImpl( SMDS_Mesh& mesh, SMDS_ElemIteratorPtr elemIt=SMDS_ElemIteratorPtr())
: _mesh(&mesh),_meshPartIt(elemIt),_ebbTree(0),_nodeSearcher(0),_tolerance(-1),_outerFacesFound(false) {}
- ~SMESH_ElementSearcherImpl()
+ virtual ~SMESH_ElementSearcherImpl()
{
if ( _ebbTree ) delete _ebbTree; _ebbTree = 0;
if ( _nodeSearcher ) delete _nodeSearcher; _nodeSearcher = 0;
* \brief Find out if the given point is out of closed 2D mesh.
*/
virtual TopAbs_State GetPointState(const gp_Pnt& point) = 0;
+ virtual ~SMESH_ElementSearcher();
};
namespace SMESH_MeshAlgos
// Constructor. limit must be provided at tree root construction.
// limit will be deleted by SMESH_Octree
SMESH_Octree (SMESH_TreeLimit* limit=0);
+ virtual ~SMESH_Octree() {};
// Compute the bigger dimension of my box
double maxSize() const;
* \param precision - Precision used
*/
//======================================================================================
-void SMESH_OctreeNode::FindCoincidentNodes (const SMDS_MeshNode * Node,
- TIDSortedNodeSet* SetOfNodes,
+void SMESH_OctreeNode::FindCoincidentNodes (const SMDS_MeshNode * Node,
+ TIDSortedNodeSet* SetOfNodes,
list<const SMDS_MeshNode*>* Result,
- const double precision)
+ const double precision)
{
- gp_XYZ p(Node->X(), Node->Y(), Node->Z());
- bool isInsideBool = isInside(p, precision);
+ gp_Pnt p1 (Node->X(), Node->Y(), Node->Z());
+ bool isInsideBool = isInside( p1.XYZ(), precision );
if (isInsideBool)
{
// I'm only looking in the leaves, since all the nodes are stored there.
if (isLeaf())
{
- gp_Pnt p1 (Node->X(), Node->Y(), Node->Z());
-
- TIDSortedNodeSet myNodesCopy = myNodes;
- TIDSortedNodeSet::iterator it = myNodesCopy.begin();
- double tol2 = precision * precision;
+ TIDSortedNodeSet::iterator it = myNodes.begin();
+ const double tol2 = precision * precision;
bool squareBool;
- while (it != myNodesCopy.end())
+ while (it != myNodes.end())
{
const SMDS_MeshNode* n2 = *it;
+ squareBool = false;
// We're only looking at nodes with a superior Id.
// JFA: Why?
//if (Node->GetID() < n2->GetID())
{
Result->insert(Result->begin(), n2);
SetOfNodes->erase( n2 );
- myNodes.erase( n2 );
+ myNodes.erase( *it++ ); // it++ goes forward and returns it's previous position
}
}
- //myNodesCopy.erase( it );
- //it = myNodesCopy.begin();
- it++;
+ if ( !squareBool )
+ it++;
}
- if (Result->size() > 0)
+ if ( !Result->empty() )
myNodes.erase(Node); // JFA: for bug 0020185
}
else
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-\r
-// SMESH SMESH_Tree : tree implementation\r
-// File : SMESH_Tree.hxx\r
-// Created : Tue Jan 16 16:00:00 2007\r
-// Author : Nicolas Geimer & Aurélien Motteux (OCC)\r
-// Module : SMESH\r
-//\r
-#ifndef _SMESH_Tree_HXX_\r
-#define _SMESH_Tree_HXX_\r
-\r
-#include "SMESH_Utils.hxx"\r
-\r
-//================================================================================\r
-// Data limiting the tree height\r
-struct SMESH_TreeLimit {\r
- // MaxLevel of the Tree\r
- int myMaxLevel;\r
- // Minimal size of the Box\r
- double myMinBoxSize;\r
-\r
- // Default:\r
- // maxLevel-> 8^8 = 16777216 terminal trees at most\r
- // minSize -> box size not checked\r
- SMESH_TreeLimit(int maxLevel=8, double minSize=0.):myMaxLevel(maxLevel),myMinBoxSize(minSize) {}\r
- virtual ~SMESH_TreeLimit() {} // it can be inherited\r
-};\r
-\r
-//================================================================================\r
-/*!\r
- * \brief Base class for 2D and 3D trees\r
- */\r
-//================================================================================\r
-\r
-template< class BND_BOX,\r
- int NB_CHILDREN>\r
-class SMESH_Tree\r
-{\r
- public:\r
-\r
- typedef BND_BOX box_type;\r
-\r
- // Constructor. limit must be provided at tree root construction.\r
- // limit will be deleted by SMESH_Tree\r
- SMESH_Tree (SMESH_TreeLimit* limit=0);\r
-\r
- // Destructor\r
- virtual ~SMESH_Tree ();\r
-\r
- // Compute the Tree. Must be called by constructor of inheriting class\r
- void compute();\r
-\r
- // Tell if Tree is a leaf or not.\r
- // An inheriting class can influence it via myIsLeaf protected field\r
- bool isLeaf() const;\r
-\r
- // Return its level\r
- int level() const { return myLevel; }\r
-\r
- // Return Bounding Box of the Tree\r
- const box_type* getBox() const { return myBox; }\r
-\r
- // Return height of the tree, full or from this level to topest leaf\r
- int getHeight(const bool full=true) const;\r
-\r
- static int nbChildren() { return NB_CHILDREN; }\r
-\r
- // Compute the bigger dimension of my box\r
- virtual double maxSize() const = 0;\r
-\r
-protected:\r
- // Return box of the whole tree\r
- virtual box_type* buildRootBox() = 0;\r
-\r
- // Allocate a child\r
- virtual SMESH_Tree* newChild() const = 0;\r
-\r
- // Allocate a bndbox according to childIndex. childIndex is zero based\r
- virtual box_type* newChildBox(int childIndex) const = 0;\r
-\r
- // Fill in data of the children\r
- virtual void buildChildrenData() = 0;\r
-\r
- // members\r
-\r
- // Array of children\r
- SMESH_Tree** myChildren;\r
-\r
- // Point the father, NULL for the level 0\r
- SMESH_Tree* myFather;\r
-\r
- // Tell us if the Tree is a leaf or not\r
- bool myIsLeaf;\r
-\r
- // Tree limit\r
- const SMESH_TreeLimit* myLimit;\r
-\r
-private:\r
- // Build the children recursively\r
- void buildChildren();\r
-\r
- // Level of the Tree\r
- int myLevel;\r
-\r
- box_type* myBox;\r
-};\r
-\r
-//===========================================================================\r
-/*!\r
- * Constructor. limit must be provided at tree root construction.\r
- * limit will be deleted by SMESH_Tree.\r
- */\r
-//===========================================================================\r
-\r
-template< class BND_BOX, int NB_CHILDREN>\r
-SMESH_Tree<BND_BOX,NB_CHILDREN>::SMESH_Tree (SMESH_TreeLimit* limit):\r
- myChildren(0),\r
- myFather(0),\r
- myIsLeaf( false ),\r
- myLimit( limit ),\r
- myLevel(0),\r
- myBox(0)\r
-{\r
- if ( !myLimit ) myLimit = new SMESH_TreeLimit();\r
-}\r
-\r
-//================================================================================\r
-/*!\r
- * \brief Compute the Tree\r
- */\r
-//================================================================================\r
-\r
-template< class BND_BOX, int NB_CHILDREN>\r
-void SMESH_Tree<BND_BOX,NB_CHILDREN>::compute()\r
-{\r
- if ( myLevel==0 )\r
- {\r
- myBox = buildRootBox();\r
- if ( myLimit->myMinBoxSize > 0. && maxSize() <= myLimit->myMinBoxSize )\r
- myIsLeaf = true;\r
- else\r
- buildChildren();\r
- }\r
-}\r
-\r
-//======================================\r
-/*!\r
- * \brief SMESH_Tree Destructor\r
- */\r
-//======================================\r
-\r
-template< class BND_BOX, int NB_CHILDREN>\r
-SMESH_Tree<BND_BOX,NB_CHILDREN>::~SMESH_Tree ()\r
-{\r
- if ( myChildren )\r
- {\r
- if ( !isLeaf() )\r
- {\r
- for(int i = 0; i<NB_CHILDREN; i++)\r
- delete myChildren[i];\r
- delete[] myChildren;\r
- myChildren = 0;\r
- }\r
- }\r
- if ( myBox )\r
- delete myBox;\r
- myBox = 0;\r
- if ( level() == 0 )\r
- delete myLimit;\r
- myLimit = 0;\r
-}\r
-\r
-//=================================================================\r
-/*!\r
- * \brief Build the children boxes and call buildChildrenData()\r
- */\r
-//=================================================================\r
-\r
-template< class BND_BOX, int NB_CHILDREN>\r
-void SMESH_Tree<BND_BOX,NB_CHILDREN>::buildChildren()\r
-{\r
- if ( isLeaf() ) return;\r
-\r
- myChildren = new SMESH_Tree*[NB_CHILDREN];\r
-\r
- // get the whole model size\r
- double rootSize = 0;\r
- {\r
- SMESH_Tree* root = this;\r
- while ( root->myLevel > 0 )\r
- root = root->myFather;\r
- rootSize = root->maxSize();\r
- }\r
- for (int i = 0; i < NB_CHILDREN; i++)\r
- {\r
- // The child is of the same type than its father (For instance, a SMESH_OctreeNode)\r
- // We allocate the memory we need for the child\r
- myChildren[i] = newChild();\r
- // and we assign to him its box.\r
- myChildren[i]->myFather = this;\r
- myChildren[i]->myLimit = myLimit;\r
- myChildren[i]->myLevel = myLevel + 1;\r
- myChildren[i]->myBox = newChildBox( i );\r
- myChildren[i]->myBox->Enlarge( rootSize * 1e-10 );\r
- if ( myLimit->myMinBoxSize > 0. && myChildren[i]->maxSize() <= myLimit->myMinBoxSize )\r
- myChildren[i]->myIsLeaf = true;\r
- }\r
-\r
- // After building the NB_CHILDREN boxes, we put the data into the children.\r
- buildChildrenData();\r
-\r
- //After we pass to the next level of the Tree\r
- for (int i = 0; i<NB_CHILDREN; i++)\r
- myChildren[i]->buildChildren();\r
-}\r
-\r
-//================================================================================\r
-/*!\r
- * \brief Tell if Tree is a leaf or not\r
- * An inheriting class can influence it via myIsLeaf protected field\r
- */\r
-//================================================================================\r
-\r
-template< class BND_BOX, int NB_CHILDREN>\r
-bool SMESH_Tree<BND_BOX,NB_CHILDREN>::isLeaf() const\r
-{\r
- return myIsLeaf || ((myLimit->myMaxLevel > 0) ? (level() >= myLimit->myMaxLevel) : false );\r
-}\r
-\r
-//================================================================================\r
-/*!\r
- * \brief Return height of the tree, full or from this level to topest leaf\r
- */\r
-//================================================================================\r
-\r
-template< class BND_BOX, int NB_CHILDREN>\r
-int SMESH_Tree<BND_BOX,NB_CHILDREN>::getHeight(const bool full) const\r
-{\r
- if ( full && myFather )\r
- return myFather->getHeight( true );\r
-\r
- if ( isLeaf() )\r
- return 1;\r
-\r
- int heigth = 0;\r
- for (int i = 0; i<NB_CHILDREN; i++)\r
- {\r
- int h = myChildren[i]->getHeight( false );\r
- if ( h > heigth )\r
- heigth = h;\r
- }\r
- return heigth + 1;\r
-}\r
-\r
-#endif\r
+
+// SMESH SMESH_Tree : tree implementation
+// File : SMESH_Tree.hxx
+// Created : Tue Jan 16 16:00:00 2007
+// Author : Nicolas Geimer & Aurélien Motteux (OCC)
+// Module : SMESH
+//
+#ifndef _SMESH_Tree_HXX_
+#define _SMESH_Tree_HXX_
+
+#include "SMESH_Utils.hxx"
+
+//================================================================================
+// Data limiting the tree height
+struct SMESH_TreeLimit {
+ // MaxLevel of the Tree
+ int myMaxLevel;
+ // Minimal size of the Box
+ double myMinBoxSize;
+
+ // Default:
+ // maxLevel-> 8^8 = 16777216 terminal trees at most
+ // minSize -> box size not checked
+ SMESH_TreeLimit(int maxLevel=8, double minSize=0.):myMaxLevel(maxLevel),myMinBoxSize(minSize) {}
+ virtual ~SMESH_TreeLimit() {} // it can be inherited
+};
+
+//================================================================================
+/*!
+ * \brief Base class for 2D and 3D trees
+ */
+//================================================================================
+
+template< class BND_BOX,
+ int NB_CHILDREN>
+class SMESH_Tree
+{
+ public:
+
+ typedef BND_BOX box_type;
+
+ // Constructor. limit must be provided at tree root construction.
+ // limit will be deleted by SMESH_Tree
+ SMESH_Tree (SMESH_TreeLimit* limit=0);
+
+ // Destructor
+ virtual ~SMESH_Tree ();
+
+ // Compute the Tree. Must be called by constructor of inheriting class
+ void compute();
+
+ // Tell if Tree is a leaf or not.
+ // An inheriting class can influence it via myIsLeaf protected field
+ bool isLeaf() const;
+
+ // Return its level
+ int level() const { return myLevel; }
+
+ // Return Bounding Box of the Tree
+ const box_type* getBox() const { return myBox; }
+
+ // Return height of the tree, full or from this level to topest leaf
+ int getHeight(const bool full=true) const;
+
+ static int nbChildren() { return NB_CHILDREN; }
+
+ // Compute the biggest dimension of my box
+ virtual double maxSize() const = 0;
+
+protected:
+ // Return box of the whole tree
+ virtual box_type* buildRootBox() = 0;
+
+ // Allocate a child
+ virtual SMESH_Tree* newChild() const = 0;
+
+ // Allocate a bndbox according to childIndex. childIndex is zero based
+ virtual box_type* newChildBox(int childIndex) const = 0;
+
+ // Fill in data of the children
+ virtual void buildChildrenData() = 0;
+
+ // members
+
+ // Array of children
+ SMESH_Tree** myChildren;
+
+ // Point the father, NULL for the level 0
+ SMESH_Tree* myFather;
+
+ // Tell us if the Tree is a leaf or not
+ bool myIsLeaf;
+
+ // Tree limit
+ const SMESH_TreeLimit* myLimit;
+
+private:
+ // Build the children recursively
+ void buildChildren();
+
+ // Level of the Tree
+ int myLevel;
+
+ box_type* myBox;
+};
+
+//===========================================================================
+/*!
+ * Constructor. limit must be provided at tree root construction.
+ * limit will be deleted by SMESH_Tree.
+ */
+//===========================================================================
+
+template< class BND_BOX, int NB_CHILDREN>
+SMESH_Tree<BND_BOX,NB_CHILDREN>::SMESH_Tree (SMESH_TreeLimit* limit):
+ myChildren(0),
+ myFather(0),
+ myIsLeaf( false ),
+ myLimit( limit ),
+ myLevel(0),
+ myBox(0)
+{
+ //if ( !myLimit ) myLimit = new SMESH_TreeLimit();
+}
+
+//================================================================================
+/*!
+ * \brief Compute the Tree
+ */
+//================================================================================
+
+template< class BND_BOX, int NB_CHILDREN>
+void SMESH_Tree<BND_BOX,NB_CHILDREN>::compute()
+{
+ if ( myLevel==0 )
+ {
+ if ( !myLimit ) myLimit = new SMESH_TreeLimit();
+ myBox = buildRootBox();
+ if ( myLimit->myMinBoxSize > 0. && maxSize() <= myLimit->myMinBoxSize )
+ myIsLeaf = true;
+ else
+ buildChildren();
+ }
+}
+
+//======================================
+/*!
+ * \brief SMESH_Tree Destructor
+ */
+//======================================
+
+template< class BND_BOX, int NB_CHILDREN>
+SMESH_Tree<BND_BOX,NB_CHILDREN>::~SMESH_Tree ()
+{
+ if ( myChildren )
+ {
+ if ( !isLeaf() )
+ {
+ for(int i = 0; i<NB_CHILDREN; i++)
+ delete myChildren[i];
+ delete[] myChildren;
+ myChildren = 0;
+ }
+ }
+ if ( myBox )
+ delete myBox;
+ myBox = 0;
+ if ( level() == 0 )
+ delete myLimit;
+ myLimit = 0;
+}
+
+//=================================================================
+/*!
+ * \brief Build the children boxes and call buildChildrenData()
+ */
+//=================================================================
+
+template< class BND_BOX, int NB_CHILDREN>
+void SMESH_Tree<BND_BOX,NB_CHILDREN>::buildChildren()
+{
+ if ( isLeaf() ) return;
+
+ myChildren = new SMESH_Tree*[NB_CHILDREN];
+
+ // get the whole model size
+ double rootSize = 0;
+ {
+ SMESH_Tree* root = this;
+ while ( root->myLevel > 0 )
+ root = root->myFather;
+ rootSize = root->maxSize();
+ }
+ for (int i = 0; i < NB_CHILDREN; i++)
+ {
+ // The child is of the same type than its father (For instance, a SMESH_OctreeNode)
+ // We allocate the memory we need for the child
+ myChildren[i] = newChild();
+ // and we assign to him its box.
+ myChildren[i]->myFather = this;
+ if (myChildren[i]->myLimit)
+ delete myChildren[i]->myLimit;
+ myChildren[i]->myLimit = myLimit;
+ myChildren[i]->myLevel = myLevel + 1;
+ myChildren[i]->myBox = newChildBox( i );
+ myChildren[i]->myBox->Enlarge( rootSize * 1e-10 );
+ if ( myLimit->myMinBoxSize > 0. && myChildren[i]->maxSize() <= myLimit->myMinBoxSize )
+ myChildren[i]->myIsLeaf = true;
+ }
+
+ // After building the NB_CHILDREN boxes, we put the data into the children.
+ buildChildrenData();
+
+ //After we pass to the next level of the Tree
+ for (int i = 0; i<NB_CHILDREN; i++)
+ myChildren[i]->buildChildren();
+}
+
+//================================================================================
+/*!
+ * \brief Tell if Tree is a leaf or not
+ * An inheriting class can influence it via myIsLeaf protected field
+ */
+//================================================================================
+
+template< class BND_BOX, int NB_CHILDREN>
+bool SMESH_Tree<BND_BOX,NB_CHILDREN>::isLeaf() const
+{
+ return myIsLeaf || ((myLimit->myMaxLevel > 0) ? (level() >= myLimit->myMaxLevel) : false );
+}
+
+//================================================================================
+/*!
+ * \brief Return height of the tree, full or from this level to topest leaf
+ */
+//================================================================================
+
+template< class BND_BOX, int NB_CHILDREN>
+int SMESH_Tree<BND_BOX,NB_CHILDREN>::getHeight(const bool full) const
+{
+ if ( full && myFather )
+ return myFather->getHeight( true );
+
+ if ( isLeaf() )
+ return 1;
+
+ int heigth = 0;
+ for (int i = 0; i<NB_CHILDREN; i++)
+ {
+ int h = myChildren[i]->getHeight( false );
+ if ( h > heigth )
+ heigth = h;
+ }
+ return heigth + 1;
+}
+
+#endif
../SMESHDS/libSMESHDS.la \
../Controls/libSMESHControls.la \
$(KERNEL_LDFLAGS) \
+ -lOpUtil \
+ -lSalomeNotification \
+ -lResourcesManager \
+ -lSalomeResourcesManager \
+ -lSALOMEBasics \
-lSalomeContainer \
-lSalomeNS \
-lRegistry \
"ExtrusionSweepObject1D","ExtrusionSweepObject1DMakeGroups",
"ExtrusionSweepObject2D","ExtrusionSweepObject2DMakeGroups",
"Translate","TranslateMakeGroups","TranslateMakeMesh",
- "TranslateObject","TranslateObjectMakeGroups", "TranslateObjectMakeMesh"
+ "TranslateObject","TranslateObjectMakeGroups", "TranslateObjectMakeMesh",
+ "ExtrusionAlongPathX","ExtrusionAlongPathObjX"
,"" }; // <- mark of the end
methodsAcceptingList.Insert( methodNames );
}
// Prevent moving a command creating a sub-mesh to the end of the script
// if the sub-mesh is used in theCommand as argument
- if ( _pySubMesh::CanBeArgOfMethod( aCommand->GetMethod() ))
- {
- PlaceSubmeshAfterItsCreation( aCommand );
- }
+ // if ( _pySubMesh::CanBeArgOfMethod( aCommand->GetMethod() ))
+ // {
+ // PlaceSubmeshAfterItsCreation( aCommand );
+ // }
- // Method( SMESH.PointStruct(x,y,z) -> Method( [x,y,z]
+ // Method( SMESH.PointStruct(x,y,z)... -> Method( [x,y,z]...
StructToList( aCommand );
+ // not to erase _pySelfEraser's etc. used as args in some commands
+ std::list< _pyID >::const_iterator id = myKeepAgrCmdsIDs.begin();
+ for ( ; id != myKeepAgrCmdsIDs.end(); ++id )
+ if ( *id != objID && theCommand.Search( *id ) > id->Length() )
+ {
+ Handle(_pyObject) obj = FindObject( *id );
+ if ( !obj.IsNull() )
+ obj->AddArgCmd( aCommand );
+ }
+
// Find an object to process theCommand
// SMESH_Gen method?
if ( objID == this->GetID() || objID == SMESH_2smeshpy::GenName())
{
this->Process( aCommand );
- addFilterUser( aCommand, theGen ); // protect filters from clearing
+ //addFilterUser( aCommand, theGen ); // protect filters from clearing
return aCommand;
}
else if ( aCommand->GetMethod() == "GetSubMesh" ) { // SubMesh creation
_pyID subMeshID = aCommand->GetResultValue();
Handle(_pySubMesh) subMesh = new _pySubMesh( aCommand );
+ CheckObjectIsReCreated( subMesh );
myObjects.insert( make_pair( subMeshID, subMesh ));
}
// Method( mesh.GetIDSource([id1,id2]) -> Method( [id1,id2]
GetIDSourceToList( aCommand );
- addFilterUser( aCommand, theGen ); // protect filters from clearing
+ //addFilterUser( aCommand, theGen ); // protect filters from clearing
id_mesh->second->Process( aCommand );
id_mesh->second->AddProcessedCmd( aCommand );
// Method( mesh.GetIDSource([id1,id2]) -> Method( [id1,id2]
GetIDSourceToList( aCommand );
- addFilterUser( aCommand, theGen ); // protect filters from clearing
+ //addFilterUser( aCommand, theGen ); // protect filters from clearing
const TCollection_AsciiString& method = aCommand->GetMethod();
!myMeshes.count( meshID ) &&
aCommand->IsStudyEntry( meshID ))
{
- TCollection_AsciiString processedCommand = aCommand->GetString();
+ _AString processedCommand = aCommand->GetString();
Handle(_pyMesh) mesh = new _pyMesh( aCommand, meshID );
+ CheckObjectIsReCreated( mesh );
myMeshes.insert( make_pair( meshID, mesh ));
aCommand->Clear();
aCommand->GetString() = processedCommand; // discard changes made by _pyMesh
} // SMESH_MeshEditor methods
// SMESH_Hypothesis method?
- list< Handle(_pyHypothesis) >::iterator hyp = myHypos.begin();
- for ( ; hyp != myHypos.end(); ++hyp )
- if ( !(*hyp)->IsAlgo() && objID == (*hyp)->GetID() ) {
- (*hyp)->Process( aCommand );
- (*hyp)->AddProcessedCmd( aCommand );
- return aCommand;
- }
+ Handle(_pyHypothesis) hyp = FindHyp( objID );
+ if ( !hyp.IsNull() && !hyp->IsAlgo() )
+ {
+ hyp->Process( aCommand );
+ hyp->AddProcessedCmd( aCommand );
+ return aCommand;
+ }
// aFilterManager.CreateFilter() ?
if ( aCommand->GetMethod() == "CreateFilter" )
Handle(_pyObject) filter( new _pyFilter( aCommand, newID ));
AddObject( filter );
}
+ // aFreeNodes0x5011f80 = aFilterManager.CreateFreeNodes() ## issue 0020976
+ else if ( theCommand.Search( "aFilterManager.Create" ) > 0 )
+ {
+ // create _pySelfEraser for functors
+ Handle(_pySelfEraser) functor = new _pySelfEraser( aCommand );
+ functor->IgnoreOwnCalls(); // to erase if not used as an argument
+ AddObject( functor );
+ }
// other object method?
map< _pyID, Handle(_pyObject) >::iterator id_obj = myObjects.find( objID );
if ( method == "CreateMesh" || method == "CreateEmptyMesh")
{
Handle(_pyMesh) mesh = new _pyMesh( theCommand );
- myMeshes.insert( make_pair( mesh->GetID(), mesh ));
+ AddObject( mesh );
return;
}
if ( method == "CreateMeshesFromUNV" ||
method == "CopyMesh" ) // command result is a mesh
{
Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue() );
- myMeshes.insert( make_pair( mesh->GetID(), mesh ));
+ AddObject( mesh );
return;
}
if( method == "CreateMeshesFromMED" ||
_pyID meshID = theCommand->GetResultValue(ind+1);
if ( !theCommand->IsStudyEntry( meshID ) ) continue;
Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue(ind+1));
- myMeshes.insert( make_pair( mesh->GetID(), mesh ));
+ AddObject( mesh );
}
if ( method == "CreateMeshesFromGMF" )
{
// issue 199929, remove standard library name (default parameter)
const TCollection_AsciiString & aLibName = theCommand->GetArg( 2 );
if ( aLibName.Search( "StdMeshersEngine" ) != -1 ) {
- // keep first argument
+ // keep the first argument
TCollection_AsciiString arg = theCommand->GetArg( 1 );
theCommand->RemoveArgs();
theCommand->SetArg( 1, arg );
}
- myHypos.push_back( _pyHypothesis::NewHypothesis( theCommand ));
+ Handle(_pyHypothesis) hyp = _pyHypothesis::NewHypothesis( theCommand );
+ CheckObjectIsReCreated( hyp );
+ myHypos.insert( make_pair( hyp->GetID(), hyp ));
+
return;
}
// SMESH_Pattern, FilterManager
if ( method == "GetPattern" ||
method == "CreateFilterManager" ||
- method == "CreateMeasurements" ) {
+ method == "CreateMeasurements" )
+ {
Handle(_pyObject) obj = new _pySelfEraser( theCommand );
if ( !myObjects.insert( make_pair( obj->GetID(), obj )).second )
theCommand->Clear(); // already created
theCommand->SetArg( theCommand->GetNbArgs() + 1, "True" );
}
Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue() );
- myMeshes.insert( make_pair( mesh->GetID(), mesh ));
+ AddObject( mesh );
AddMeshAccessorMethod( theCommand );
}
else if ( method == "SetName" ) // SetName(obj,name)
map< _pyID, Handle(_pyMesh) >::iterator id_mesh;
map< _pyID, Handle(_pyObject) >::iterator id_obj;
- list< Handle(_pyHypothesis) >::iterator hyp;
+ map< _pyID, Handle(_pyHypothesis) >::iterator id_hyp;
if ( IsToKeepAllCommands() ) // historical dump
{
// set myIsPublished = true to all objects
for ( id_mesh = myMeshes.begin(); id_mesh != myMeshes.end(); ++id_mesh )
id_mesh->second->SetRemovedFromStudy( false );
- for ( hyp = myHypos.begin(); hyp != myHypos.end(); ++hyp )
- (*hyp)->SetRemovedFromStudy( false );
+ for ( id_hyp = myHypos.begin(); id_hyp != myHypos.end(); ++id_hyp )
+ id_hyp->second->SetRemovedFromStudy( false );
for ( id_obj = myObjects.begin(); id_obj != myObjects.end(); ++id_obj )
id_obj->second->SetRemovedFromStudy( false );
}
// let hypotheses find referred objects in order to prevent clearing
// not published referred hyps (it's needed for hyps like "LayerDistribution")
list< Handle(_pyMesh) > fatherMeshes;
- for ( hyp = myHypos.begin(); hyp != myHypos.end(); ++hyp )
- if ( !hyp->IsNull() )
- (*hyp)->GetReferredMeshesAndGeom( fatherMeshes );
+ for ( id_hyp = myHypos.begin(); id_hyp != myHypos.end(); ++id_hyp )
+ if ( !id_hyp->second.IsNull() )
+ id_hyp->second->GetReferredMeshesAndGeom( fatherMeshes );
}
// set myIsPublished = false to all objects depending on
// meshes built on a removed geometry
id_mesh->second->Flush();
// Flush hyps
- for ( hyp = myHypos.begin(); hyp != myHypos.end(); ++hyp )
- if ( !hyp->IsNull() ) {
- (*hyp)->Flush();
+ for ( id_hyp = myHypos.begin(); id_hyp != myHypos.end(); ++id_hyp )
+ if ( !id_hyp->second.IsNull() ) {
+ id_hyp->second->Flush();
// smeshgen.CreateHypothesis() --> smesh.CreateHypothesis()
- if ( !(*hyp)->IsWrapped() )
- (*hyp)->GetCreationCmd()->SetObject( SMESH_2smeshpy::GenName() );
+ if ( !id_hyp->second->IsWrapped() )
+ id_hyp->second->GetCreationCmd()->SetObject( SMESH_2smeshpy::GenName() );
}
// Flush other objects
for ( ; id_mesh != myMeshes.end(); ++id_mesh )
id_mesh->second->ClearCommands();
- list< Handle(_pyHypothesis) >::iterator hyp = myHypos.begin();
- for ( ; hyp != myHypos.end(); ++hyp )
- if ( !hyp->IsNull() )
- (*hyp)->ClearCommands();
+ map< _pyID, Handle(_pyHypothesis) >::iterator id_hyp = myHypos.begin();
+ for ( ; id_hyp != myHypos.end(); ++id_hyp )
+ if ( !id_hyp->second.IsNull() )
+ id_hyp->second->ClearCommands();
map< _pyID, Handle(_pyObject) >::iterator id_obj = myObjects.begin();
for ( ; id_obj != myObjects.end(); ++id_obj )
id_obj->second->Free();
myObjects.clear();
- list< Handle(_pyHypothesis) >::iterator hyp = myHypos.begin();
- for ( ; hyp != myHypos.end(); ++hyp )
- if ( !hyp->IsNull() )
- (*hyp)->Free();
+ map< _pyID, Handle(_pyHypothesis) >::iterator id_hyp = myHypos.begin();
+ for ( ; id_hyp != myHypos.end(); ++id_hyp )
+ if ( !id_hyp->second.IsNull() )
+ id_hyp->second->Free();
myHypos.clear();
myFile2ExportedMesh.clear();
bool _pyGen::AddAlgoAccessorMethod( Handle(_pyCommand) theCmd ) const
{
bool added = false;
- list< Handle(_pyHypothesis) >::const_iterator hyp = myHypos.begin();
- for ( ; hyp != myHypos.end(); ++hyp ) {
- if ( (*hyp)->IsAlgo() && /*(*hyp)->IsWrapped() &&*/
- theCmd->AddAccessorMethod( (*hyp)->GetID(), (*hyp)->AccessorMethod() ))
+ map< _pyID, Handle(_pyHypothesis) >::const_iterator id_hyp = myHypos.begin();
+ for ( ; id_hyp != myHypos.end(); ++id_hyp )
+ if ( !id_hyp->second.IsNull() &&
+ id_hyp->second->IsAlgo() && /*(*hyp)->IsWrapped() &&*/
+ theCmd->AddAccessorMethod( id_hyp->second->GetID(),
+ id_hyp->second->AccessorMethod() ))
added = true;
- }
+
return added;
}
Handle(_pyHypothesis) _pyGen::FindHyp( const _pyID& theHypID )
{
- list< Handle(_pyHypothesis) >::iterator hyp = myHypos.begin();
- for ( ; hyp != myHypos.end(); ++hyp )
- if ( !hyp->IsNull() && theHypID == (*hyp)->GetID() )
- return *hyp;
+ map< _pyID, Handle(_pyHypothesis) >::iterator id_hyp = myHypos.find( theHypID );
+ if ( id_hyp != myHypos.end() &&
+ !id_hyp->second.IsNull() &&
+ theHypID == id_hyp->second->GetID() )
+ return id_hyp->second;
return Handle(_pyHypothesis)();
}
//================================================================================
/*!
- * \brief Find algorithm the created algorithm
+ * \brief Find algorithm able to create a hypothesis
* \param theGeom - The shape ID the algorithm was created on
* \param theMesh - The mesh ID that created the algorithm
- * \param dim - The algo dimension
+ * \param theHypothesis - The hypothesis the algorithm sould be able to create
* \retval Handle(_pyHypothesis) - The found algo
*/
//================================================================================
Handle(_pyHypothesis) _pyGen::FindAlgo( const _pyID& theGeom, const _pyID& theMesh,
const Handle(_pyHypothesis)& theHypothesis )
{
- list< Handle(_pyHypothesis) >::iterator hyp = myHypos.begin();
- for ( ; hyp != myHypos.end(); ++hyp )
- if ( !hyp->IsNull() &&
- (*hyp)->IsAlgo() &&
- theHypothesis->CanBeCreatedBy( (*hyp)->GetAlgoType() ) &&
- (*hyp)->GetGeom() == theGeom &&
- (*hyp)->GetMesh() == theMesh )
- return *hyp;
- return 0;
+ map< _pyID, Handle(_pyHypothesis) >::iterator id_hyp = myHypos.begin();
+ for ( ; id_hyp != myHypos.end(); ++id_hyp )
+ if ( !id_hyp->second.IsNull() &&
+ id_hyp->second->IsAlgo() &&
+ theHypothesis->CanBeCreatedBy( id_hyp->second->GetAlgoType() ) &&
+ id_hyp->second->GetGeom() == theGeom &&
+ id_hyp->second->GetMesh() == theMesh )
+ return id_hyp->second;
+ return Handle(_pyHypothesis)();
}
//================================================================================
*/
//================================================================================
-void _pyGen::addFilterUser( Handle(_pyCommand)& theCommand, const Handle(_pyObject)& user )
-{
- const char filterPrefix[] = "aFilter0x";
- if ( theCommand->GetString().Search( filterPrefix ) < 1 )
- return;
+// void _pyGen::addFilterUser( Handle(_pyCommand)& theCommand, const Handle(_pyObject)& user )
+// {
+ // No more needed after adding _pyObject::myArgCommands
- for ( int i = theCommand->GetNbArgs(); i > 0; --i )
- {
- const _AString & arg = theCommand->GetArg( i );
- // NOT TREATED CASE: arg == "[something, aFilter0x36a2f60]"
- if ( arg.Search( filterPrefix ) != 1 )
- continue;
+// const char filterPrefix[] = "aFilter0x";
+// if ( theCommand->GetString().Search( filterPrefix ) < 1 )
+// return;
- Handle(_pyFilter) filter = Handle(_pyFilter)::DownCast( FindObject( arg ));
- if ( !filter.IsNull() )
- {
- filter->AddUser( user );
- if ( !filter->GetNewID().IsEmpty() )
- theCommand->SetArg( i, filter->GetNewID() );
- }
- }
-}
+// for ( int i = theCommand->GetNbArgs(); i > 0; --i )
+// {
+// const _AString & arg = theCommand->GetArg( i );
+// // NOT TREATED CASE: arg == "[something, aFilter0x36a2f60]"
+// if ( arg.Search( filterPrefix ) != 1 )
+// continue;
+
+// Handle(_pyFilter) filter = Handle(_pyFilter)::DownCast( FindObject( arg ));
+// if ( !filter.IsNull() )
+// {
+// filter->AddUser( user );
+// if ( !filter->GetNewID().IsEmpty() )
+// theCommand->SetArg( i, filter->GetNewID() );
+// }
+// }
+//}
//================================================================================
/*!
{
if ( theObj.IsNull() ) return;
+ CheckObjectIsReCreated( theObj );
+
if ( theObj->IsKind( STANDARD_TYPE( _pyMesh )))
myMeshes.insert( make_pair( theObj->GetID(), Handle(_pyMesh)::DownCast( theObj )));
myObjects.insert( make_pair( theObj->GetID(), theObj ));
}
+//================================================================================
+/*!
+ * \brief Erases an existing object with the same ID. This method should be called
+ * before storing theObj in _pyGen
+ */
+//================================================================================
+
+void _pyGen::CheckObjectIsReCreated( Handle(_pyObject)& theObj )
+{
+ if ( theObj.IsNull() || !_pyCommand::IsStudyEntry( theObj->GetID() ))
+ return;
+
+ const bool isHyp = theObj->IsKind( STANDARD_TYPE( _pyHypothesis ));
+ Handle(_pyObject) existing =
+ isHyp ? FindHyp( theObj->GetID() ) : FindObject( theObj->GetID() );
+ if ( !existing.IsNull() && existing != theObj )
+ {
+ existing->SetRemovedFromStudy( true );
+ existing->ClearCommands();
+ if ( isHyp )
+ {
+ if ( myHypos.count( theObj->GetID() ))
+ myHypos.erase( theObj->GetID() );
+ }
+ else if ( myMeshes.count( theObj->GetID() ))
+ {
+ myMeshes.erase( theObj->GetID() );
+ }
+ else if ( myObjects.count( theObj->GetID() ))
+ {
+ myObjects.erase( theObj->GetID() );
+ }
+ }
+}
+
//================================================================================
/*!
* \brief Re-register an object with other ID to make it Process() commands of
if ( GetBegPos( OBJECT_IND ) == UNKNOWN )
{
// beginning
- int begPos = GetBegPos( RESULT_IND ) + myRes.Length();
+ int begPos = GetBegPos( RESULT_IND );
if ( begPos < 1 ) {
begPos = myString.Location( "=", 1, Length() ) + 1;
// is '=' in the string argument (for example, name) or not
if ( nb1 % 2 != 0 || nb2 % 2 != 0 )
begPos = 1;
}
+ else {
+ begPos += myRes.Length();
+ }
myObj = GetWord( myString, begPos, true );
if ( begPos != EMPTY )
{
*/
//================================================================================
+_pySelfEraser::_pySelfEraser(const Handle(_pyCommand)& theCreationCmd)
+ :_pyObject(theCreationCmd), myIgnoreOwnCalls(false)
+{
+ myIsPublished = true; // prevent clearing as a not published
+ theGen->KeepAgrCmds( GetID() ); // ask to fill myArgCmds
+}
+
+//================================================================================
+/*!
+ * \brief SelfEraser erases creation command if no more it's commands invoked
+ */
+//================================================================================
+
void _pySelfEraser::Flush()
{
- int nbCalls = GetNbCalls();
- if ( nbCalls > 0 )
+ bool toErase = false;
+ if ( myIgnoreOwnCalls ) // check if this obj is used as argument
{
- // ignore cleared commands
- std::list< Handle(_pyCommand) >& cmds = GetProcessedCmds();
- std::list< Handle(_pyCommand) >::const_iterator cmd = cmds.begin();
- for ( ; cmd != cmds.end(); ++cmd )
- nbCalls -= (*cmd)->IsEmpty();
+ int nbArgUses = 0;
+ list< Handle(_pyCommand) >::iterator cmd = myArgCmds.begin();
+ for ( ; cmd != myArgCmds.end(); ++cmd )
+ nbArgUses += !(*cmd)->IsEmpty();
+ toErase = ( nbArgUses < 1 );
+ }
+ else
+ {
+ int nbCalls = GetNbCalls();
+ if ( nbCalls > 0 )
+ {
+ // ignore cleared commands
+ std::list< Handle(_pyCommand) >& cmds = GetProcessedCmds();
+ std::list< Handle(_pyCommand) >::const_iterator cmd = cmds.begin();
+ for ( ; cmd != cmds.end(); ++cmd )
+ nbCalls -= (*cmd)->IsEmpty();
+ }
+ toErase = ( nbCalls < 1 );
+ }
+ if ( toErase )
+ {
+ myIsPublished = false;
+ _pyObject::ClearCommands();
}
- if ( nbCalls < 1 )
- GetCreationCmd()->Clear();
}
//================================================================================
_pyObject(theCreationCmd)
{
myMesh = ObjectToMesh( theGen->FindObject( theCreationCmd->GetObject() ));
+ theGen->KeepAgrCmds( GetID() ); // ask to fill myArgCmds
}
//================================================================================
bool _pySubMesh::CanBeArgOfMethod(const _AString& theMethodName)
{
- // names of all methods where a sub-mesh can be used as argument
- static TStringSet methods;
- if ( methods.empty() ) {
- const char * names[] = {
- // methods of SMESH_Gen
- "CopyMesh",
- // methods of SMESH_Group
- "AddFrom",
- // methods of SMESH_Measurements
- "MinDistance",
- // methods of SMESH_Mesh
- "ExportPartToMED","ExportCGNS","ExportPartToDAT","ExportPartToUNV","ExportPartToSTL",
- "RemoveSubMesh",
- // methods of SMESH_MeshEditor
- "ReorientObject","Reorient2D","TriToQuadObject","QuadToTriObject","SplitQuadObject",
- "SplitVolumesIntoTetra","SmoothObject","SmoothParametricObject","ConvertFromQuadraticObject",
- "RotationSweepObject","RotationSweepObjectMakeGroups","RotationSweepObject1D",
- "RotationSweepObject1DMakeGroups","RotationSweepObject2D","RotationSweepObject2DMakeGroups",
- "ExtrusionSweepObject","ExtrusionSweepObjectMakeGroups","ExtrusionSweepObject0D",
- "ExtrusionSweepObject0DMakeGroups","ExtrusionSweepObject1D","ExtrusionSweepObject2D",
- "ExtrusionSweepObject1DMakeGroups","ExtrusionSweepObject2DMakeGroups",
- "ExtrusionAlongPathObjX","ExtrusionAlongPathObject","ExtrusionAlongPathObjectMakeGroups",
- "ExtrusionAlongPathObject1D","ExtrusionAlongPathObject1DMakeGroups",
- "ExtrusionAlongPathObject2D","ExtrusionAlongPathObject2DMakeGroups","MirrorObject",
- "MirrorObjectMakeGroups","MirrorObjectMakeMesh","TranslateObject","Scale",
- "TranslateObjectMakeGroups","TranslateObjectMakeMesh","ScaleMakeGroups","ScaleMakeMesh",
- "RotateObject","RotateObjectMakeGroups","RotateObjectMakeMesh","FindCoincidentNodesOnPart",
- "FindCoincidentNodesOnPartBut","FindEqualElements","FindAmongElementsByPoint",
- "MakeBoundaryMesh","Create0DElementsOnAllNodes",
- "" }; // <- mark of end
- methods.Insert( names );
- }
- return methods.Contains( theMethodName );
+ return false;
+// // names of all methods where a sub-mesh can be used as argument
+// static TStringSet methods;
+// if ( methods.empty() ) {
+// const char * names[] = {
+// // methods of SMESH_Gen
+// "CopyMesh",
+// // methods of SMESH_Group
+// "AddFrom",
+// // methods of SMESH_Measurements
+// "MinDistance",
+// // methods of SMESH_Mesh
+// "ExportPartToMED","ExportCGNS","ExportPartToDAT","ExportPartToUNV","ExportPartToSTL",
+// "RemoveSubMesh",
+// // methods of SMESH_MeshEditor
+// "ReorientObject","Reorient2D","TriToQuadObject","QuadToTriObject","SplitQuadObject",
+// "SplitVolumesIntoTetra","SmoothObject","SmoothParametricObject","ConvertFromQuadraticObject",
+// "RotationSweepObject","RotationSweepObjectMakeGroups","RotationSweepObject1D",
+// "RotationSweepObject1DMakeGroups","RotationSweepObject2D","RotationSweepObject2DMakeGroups",
+// "ExtrusionSweepObject","ExtrusionSweepObjectMakeGroups","ExtrusionSweepObject0D",
+// "ExtrusionSweepObject0DMakeGroups","ExtrusionSweepObject1D","ExtrusionSweepObject2D",
+// "ExtrusionSweepObject1DMakeGroups","ExtrusionSweepObject2DMakeGroups",
+// "ExtrusionAlongPathObjX","ExtrusionAlongPathObject","ExtrusionAlongPathObjectMakeGroups",
+// "ExtrusionAlongPathObject1D","ExtrusionAlongPathObject1DMakeGroups",
+// "ExtrusionAlongPathObject2D","ExtrusionAlongPathObject2DMakeGroups","MirrorObject",
+// "MirrorObjectMakeGroups","MirrorObjectMakeMesh","TranslateObject","Scale",
+// "TranslateObjectMakeGroups","TranslateObjectMakeMesh","ScaleMakeGroups","ScaleMakeMesh",
+// "RotateObject","RotateObjectMakeGroups","RotateObjectMakeMesh","FindCoincidentNodesOnPart",
+// "FindCoincidentNodesOnPartBut","FindEqualElements","FindAmongElementsByPoint",
+// "MakeBoundaryMesh","Create0DElementsOnAllNodes",
+// "" }; // <- mark of end
+// methods.Insert( names );
+// }
+// return methods.Contains( theMethodName );
}
//================================================================================
void _pySubMesh::Process( const Handle(_pyCommand)& theCommand )
{
_pyObject::Process(theCommand); // count calls of Process()
- GetCreationCmd()->AddDependantCmd( theCommand );
}
//================================================================================
void _pySubMesh::Flush()
{
- if ( GetNbCalls() == 0 ) // move to the end of all commands
+ if ( GetNbCalls() == 0 && myArgCmds.empty() ) // move to the end of all commands
theGen->GetLastCommand()->AddDependantCmd( GetCreationCmd() );
else if ( !myCreator.IsNull() )
// move to be just after creator
myCreator->GetCreationCmd()->AddDependantCmd( GetCreationCmd() );
+
+ // move sub-mesh usage after creation cmd
+ list< Handle(_pyCommand) >::iterator cmd = myArgCmds.begin();
+ for ( ; cmd != myArgCmds.end(); ++cmd )
+ if ( !(*cmd)->IsEmpty() )
+ GetCreationCmd()->AddDependantCmd( *cmd );
}
//================================================================================
{
if ( !filter->GetNewID().IsEmpty() )
theCreationCmd->SetArg( 3, filter->GetNewID() );
- filter->AddUser( this );
+ //filter->AddUser( this );
}
myFilter = filter;
}
if ( IsInStudy() )
return false;
- if ( !myCanClearCreationCmd && myCreationCmd->GetMethod() == "GetGroups" )
+ if ( !myCanClearCreationCmd &&
+ !myCreationCmd.IsNull() &&
+ myCreationCmd->GetMethod() == "GetGroups" )
{
TCollection_AsciiString grIDs = myCreationCmd->GetResultValue();
list< _pyID > idList = myCreationCmd->GetStudyEntries( grIDs );
makeGroupCmd->SetMethod( "MakeGroupByFilter" );
makeGroupCmd->SetArg( 1, name );
makeGroupCmd->SetArg( 2, idSource );
+ filter->AddArgCmd( makeGroupCmd );
}
}
else if ( theCommand->GetMethod() == "SetFilter" )
}
}
- if ( !filter.IsNull() )
- filter->AddUser( this );
+ // if ( !filter.IsNull() )
+ // filter->AddUser( this );
theGen->AddMeshAccessorMethod( theCommand );
}
void _pyGroup::Flush()
{
if ( !theGen->IsToKeepAllCommands() &&
- myCreationCmd && !myCanClearCreationCmd )
+ !myCreationCmd.IsNull() && !myCanClearCreationCmd )
{
myCreationCmd.Nullify(); // this way myCreationCmd won't be cleared
}
_pyFilter::_pyFilter(const Handle(_pyCommand)& theCreationCmd, const _pyID& newID/*=""*/)
:_pyObject(theCreationCmd), myNewID( newID )
{
+ //myIsPublished = true; // prevent clearing as a not published
+ theGen->KeepAgrCmds( GetID() ); // ask to fill myArgCmds
}
//================================================================================
theCommand->SetObject( SMESH_2smeshpy::GenName() );
theCommand->SetMethod( "GetFilterFromCriteria" );
- // Clear aFilterManager.CreateFilter()
+ // Swap "aFilterManager.CreateFilter()" and "smesh.GetFilterFromCriteria(criteria)"
GetCreationCmd()->Clear();
+ GetCreationCmd()->GetString() = theCommand->GetString();
+ theCommand->Clear();
+ theCommand->AddDependantCmd( GetCreationCmd() );
}
else if ( theCommand->GetMethod() == "SetMesh" )
{
//================================================================================
/*!
- * \brief Set new filter name to the creation command
+ * \brief Set new filter name to the creation command and to myArgCmds
*/
//================================================================================
void _pyFilter::Flush()
{
- if ( !myNewID.IsEmpty() && !GetCreationCmd()->IsEmpty() )
+ if ( myNewID.IsEmpty() ) return;
+
+ list< Handle(_pyCommand) >::iterator cmd = myArgCmds.begin();
+ for ( ; cmd != myArgCmds.end(); ++cmd )
+ if ( !(*cmd)->IsEmpty() )
+ {
+ _AString cmdStr = (*cmd)->GetString();
+ _AString id = GetID();
+ int pos = cmdStr.Search( id );
+ if ( pos > 0 )
+ {
+ cmdStr.Remove( pos, id.Length() );
+ cmdStr.Insert( pos, myNewID );
+ }
+ (*cmd)->Clear();
+ (*cmd)->GetString() = cmdStr;
+ }
+
+ if ( !GetCreationCmd()->IsEmpty() )
GetCreationCmd()->SetResultValue( myNewID );
}
*/
//================================================================================
-bool _pyFilter::CanClear()
+bool _pyObject::CanClear()
{
- list< Handle(_pyObject) >::iterator obj = myUsers.begin();
- for ( ; obj != myUsers.end(); ++obj )
- if ( !(*obj)->CanClear() )
- return false;
-
- return true;
+ list< Handle(_pyCommand) >::iterator cmd = myArgCmds.begin();
+ for ( ; cmd != myArgCmds.end(); ++cmd )
+ if ( !(*cmd)->IsEmpty() )
+ {
+ Handle(_pyObject) obj = theGen->FindObject( (*cmd)->GetObject() );
+ if ( !obj.IsNull() && !obj->CanClear() )
+ return false;
+ }
+ return ( !myIsPublished );
}
//================================================================================
_pyID myID;
Handle(_pyCommand) myCreationCmd;
std::list< Handle(_pyCommand) > myProcessedCmds;
+ std::list< Handle(_pyCommand) > myArgCmds; // where this obj is used as an argument
bool myIsPublished;
void setID(const _pyID& theID);
void AddProcessedCmd( const Handle(_pyCommand) & cmd )
{ if (myProcessedCmds.empty() || myProcessedCmds.back()!=cmd) myProcessedCmds.push_back( cmd );}
std::list< Handle(_pyCommand) >& GetProcessedCmds() { return myProcessedCmds; }
+ void AddArgCmd( const Handle(_pyCommand) & cmd ) { myArgCmds.push_back( cmd ); }
virtual void Process(const Handle(_pyCommand) & cmd) { AddProcessedCmd(cmd); }
virtual void Flush() = 0;
virtual const char* AccessorMethod() const;
- virtual bool CanClear() { return !myIsPublished; }
+ virtual bool CanClear();
virtual void ClearCommands();
virtual void Free() {}
const bool theToKeepAllCommands);
Handle(_pyCommand) AddCommand( const _AString& theCommand );
void ExchangeCommands( Handle(_pyCommand) theCmd1, Handle(_pyCommand) theCmd2 );
- void SetCommandAfter( Handle(_pyCommand) theCmd, Handle(_pyCommand) theAfterCmd );
- void SetCommandBefore( Handle(_pyCommand) theCmd, Handle(_pyCommand) theBeforeCmd );
+ void SetCommandAfter ( Handle(_pyCommand) theCmd, Handle(_pyCommand) theAfterCmd );
+ void SetCommandBefore( Handle(_pyCommand) theCmd, Handle(_pyCommand) theBeforeCmd );
Handle(_pyCommand)& GetLastCommand();
std::list< Handle(_pyCommand) >& GetCommands() { return myCommands; }
void PlaceSubmeshAfterItsCreation( Handle(_pyCommand) theCmdUsingSubmesh ) const;
_pyID GenerateNewID( const _pyID& theID );
void AddObject( Handle(_pyObject)& theObj );
+ void CheckObjectIsReCreated( Handle(_pyObject)& theObj );
void SetProxyObject( const _pyID& theID, Handle(_pyObject)& theObj );
Handle(_pyObject) FindObject( const _pyID& theObjID ) const;
Handle(_pySubMesh) FindSubMesh( const _pyID& theSubMeshID );
bool IsGeomObject(const _pyID& theObjID) const;
bool IsNotPublished(const _pyID& theObjID) const;
void ObjectCreationRemoved(const _pyID& theObjID);
+ void KeepAgrCmds(const _pyID& theObjID) { myKeepAgrCmdsIDs.push_back( theObjID ); }
bool IsToKeepAllCommands() const { return myToKeepAllCommands; }
void AddExportedMesh(const _AString& file, const ExportedMeshData& mesh )
{ myFile2ExportedMesh[ file ] = mesh; }
void setNeighbourCommand( Handle(_pyCommand)& theCmd,
Handle(_pyCommand)& theOtherCmd,
const bool theIsAfter );
- void addFilterUser( Handle(_pyCommand)& theCmd, const Handle(_pyObject)& user );
+ //void addFilterUser( Handle(_pyCommand)& theCmd, const Handle(_pyObject)& user );
private:
std::map< _pyID, Handle(_pyMesh) > myMeshes;
std::map< _pyID, Handle(_pyMeshEditor) > myMeshEditors;
std::map< _pyID, Handle(_pyObject) > myObjects;
- std::list< Handle(_pyHypothesis) > myHypos;
+ std::map< _pyID, Handle(_pyHypothesis) > myHypos;
+ std::list< _pyID > myKeepAgrCmdsIDs;
std::list< Handle(_pyCommand) > myCommands;
int myNbCommands;
Resource_DataMapOfAsciiStringAsciiString& myID2AccessorMethod;
// -------------------------------------------------------------------------------------
class _pySelfEraser: public _pyObject
{
+ bool myIgnoreOwnCalls; // not to erase only if this obj is used as argument
public:
- _pySelfEraser(const Handle(_pyCommand)& theCreationCmd)
- :_pyObject(theCreationCmd) { myIsPublished = true; }
+ _pySelfEraser(const Handle(_pyCommand)& theCreationCmd);
+ void IgnoreOwnCalls() { myIgnoreOwnCalls = true; }
virtual void Flush();
DEFINE_STANDARD_RTTI (_pySelfEraser)
class _pyFilter: public _pyObject
{
_pyID myNewID, myMesh;
- std::list< Handle(_pyObject) > myUsers;
+ //std::list< Handle(_pyObject) > myUsers;
public:
_pyFilter(const Handle(_pyCommand)& theCreationCmd, const _pyID& newID="");
- void AddUser( const Handle(_pyObject)& user) { myUsers.push_back( user ); }
+ //void AddUser( const Handle(_pyObject)& user) { myUsers.push_back( user ); }
virtual void Process( const Handle(_pyCommand)& theCommand);
virtual void Flush();
- virtual bool CanClear();
- virtual void Free() { myUsers.clear(); }
+ //virtual bool CanClear();
+ //virtual void Free() { myUsers.clear(); }
const _pyID& GetNewID() const { return myNewID; }
DEFINE_STANDARD_RTTI (_pyFilter)
#include <TColStd_HSequenceOfInteger.hxx>
#include <TCollection_AsciiString.hxx>
+#include <LDOMParser.hxx>
#ifdef _DEBUG_
static int MYDEBUG = 0;
}
return isValidName;
}
+
+ //================================================================================
+ /*!
+ * \brief Return Python module names of available plug-ins.
+ */
+ //================================================================================
+
+ std::vector<std::string> getPluginNames()
+ {
+ std::vector<std::string> pluginNames;
+ std::vector< std::string > xmlPaths = SMESH_Gen::GetPluginXMLPaths();
+ LDOMParser xmlParser;
+ for ( size_t i = 0; i < xmlPaths.size(); ++i )
+ {
+ bool error = xmlParser.parse( xmlPaths[i].c_str() );
+ if ( error )
+ {
+ TCollection_AsciiString data;
+ INFOS( xmlParser.GetError(data) );
+ continue;
+ }
+ // <meshers-group name="Standard Meshers"
+ // resources="StdMeshers"
+ // idl-module="StdMeshers"
+ // server-lib="StdMeshersEngine"
+ // gui-lib="StdMeshersGUI">
+ LDOM_Document xmlDoc = xmlParser.getDocument();
+ LDOM_NodeList nodeList = xmlDoc.getElementsByTagName( "meshers-group" );
+ for ( int i = 0; i < nodeList.getLength(); ++i )
+ {
+ LDOM_Node node = nodeList.item( i );
+ LDOM_Element& elem = (LDOM_Element&) node;
+ LDOMString idlModule = elem.getAttribute( "idl-module" );
+ if ( strlen( idlModule.GetString() ) > 0 )
+ pluginNames.push_back( idlModule.GetString() );
+ }
+ }
+ return pluginNames;
+ }
}
//=============================================================================
TCollection_AsciiString aScript;
if( isMultiFile )
aScript += "def RebuildData(theStudy):";
+
aScript += "\n\t";
if ( isPublished )
aScript += aSMESHGen + " = smeshBuilder.New(theStudy)\n\t";
aScript += helper + "aFilterManager = " + aSMESHGen + ".CreateFilterManager()\n\t";
aScript += helper + "aMeasurements = " + aSMESHGen + ".CreateMeasurements()\n\t";
- // This is not needed since entering a plug-in system to smesh.py
- // import python files corresponding to plugins
- // set<string> moduleNameSet;
- // map<string, GenericHypothesisCreator_i*>::iterator hyp_creator = myHypCreatorMap.begin();
- // for ( ; hyp_creator != myHypCreatorMap.end(); ++hyp_creator ) {
- // string moduleName = hyp_creator->second->GetModuleName();
- // bool newModule = moduleNameSet.insert( moduleName ).second;
- // if ( newModule )
- // aScript += helper + "\n\t" + "from salome." + (char*) moduleName.c_str() + " import " + (char*) moduleName.c_str() +"Builder";
- // }
-
// Dump trace of restored study
if (theSavedTrace.Length() > 0) {
// For the convertion of IDL API calls -> smeshBuilder.py API, "smesh" standing for SMESH_Gen
aScript += helper + "\n" + aNewLines;
}
+ // import python files corresponding to plugins if they are used in aScript
+ {
+ TCollection_AsciiString importStr;
+ std::vector<std::string> pluginNames = getPluginNames();
+ for ( size_t i = 0; i < pluginNames.size(); ++i )
+ {
+ // Convert access to plugin members:
+ // e.g. StdMeshers.QUAD_REDUCED -> StdMeshersBuilder.QUAD_REDUCED
+ TCollection_AsciiString pluginAccess = (pluginNames[i] + ".").c_str() ;
+ int iFrom = 1, iPos;
+ while (( iPos = aScript.Location( pluginAccess, iFrom, aScript.Length() )))
+ {
+ aScript.Insert( iPos + pluginNames[i].size(), "Builder" );
+ iFrom = iPos + pluginNames[i].size() + 8;
+ }
+ // if any plugin member is used, import the plugin
+ if ( iFrom > 1 )
+ importStr += ( helper + "\n\t" + "from salome." + (char*) pluginNames[i].c_str() +
+ " import " + (char*) pluginNames[i].c_str() +"Builder" );
+ }
+ if ( !importStr.IsEmpty() )
+ aScript.Insert( 1, importStr + "\n\t" );
+ }
+
// Convert IDL API calls into smeshBuilder.py API.
// Some objects are wrapped with python classes and
// Resource_DataMapOfAsciiStringAsciiString holds methods returning wrapped objects
//=======================================================================
CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria )
{
- if ( myPredicate != 0 )
- myPredicate->UnRegister();
+ SetPredicate( SMESH::Predicate::_nil() );
SMESH::FilterManager_i* aFilter = new SMESH::FilterManager_i();
FilterManager_ptr aFilterMgr = aFilter->_this();
SetPredicate( aResPredicate );
+ aResPredicate->UnRegister();
+
return !aResPredicate->_is_nil();
}
#include "SMESH_Mesh_i.hxx"
#include "SMESH_PreMeshInfo.hxx"
#include "SMESH_PythonDump.hxx"
-#include "memoire.h"
+//#include "memoire.h"
#include CORBA_SERVER_HEADER(SMESH_Group)
#include CORBA_SERVER_HEADER(SMESH_Filter)
//=============================================================================
SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName,
const char* theLibName)
- throw (SALOME::SALOME_Exception)
+ throw (SALOME::SALOME_Exception)
{
/* It's Need to tranlate lib name for WIN32 or X platform */
- char* aPlatformLibName = 0;
+ std::string aPlatformLibName;
if ( theLibName && theLibName[0] != '\0' )
{
int libNameLen = strlen(theLibName);
{
//the old format
#ifdef WNT
- aPlatformLibName = new char[libNameLen - 1];
- aPlatformLibName[0] = '\0';
- aPlatformLibName = strncat( aPlatformLibName, theLibName+3, libNameLen-6 );
- aPlatformLibName = strcat( aPlatformLibName, ".dll" );
- aPlatformLibName[libNameLen - 2] = '\0';
+ aPlatformLibName = std::string( theLibName+3, libNameLen-6 ) + ".dll";
#else
- aPlatformLibName = new char[ libNameLen + 1];
- aPlatformLibName[0] = '\0';
- aPlatformLibName = strcat( aPlatformLibName, theLibName );
- aPlatformLibName[libNameLen] = '\0';
+ aPlatformLibName = theLibName;
#endif
}
else
{
//try to use new format
#ifdef WNT
- aPlatformLibName = new char[ libNameLen + 5 ];
- aPlatformLibName[0] = '\0';
- aPlatformLibName = strcat( aPlatformLibName, theLibName );
- aPlatformLibName = strcat( aPlatformLibName, ".dll" );
+ aPlatformLibName = theLibName + ".dll";
#else
- aPlatformLibName = new char[ libNameLen + 7 ];
- aPlatformLibName[0] = '\0';
- aPlatformLibName = strcat( aPlatformLibName, "lib" );
- aPlatformLibName = strcat( aPlatformLibName, theLibName );
- aPlatformLibName = strcat( aPlatformLibName, ".so" );
+ aPlatformLibName = "lib" + std::string( theLibName ) + ".so";
#endif
}
}
-
Unexpect aCatch(SALOME_SalomeException);
- if(MYDEBUG) MESSAGE( "Create Hypothesis <" << theHypName << "> from " << aPlatformLibName/*theLibName*/);
+ if(MYDEBUG) MESSAGE( "Create Hypothesis <" << theHypName << "> from " << aPlatformLibName);
// create a new hypothesis object servant
SMESH_Hypothesis_i* myHypothesis_i = 0;
{
// load plugin library
if(MYDEBUG) MESSAGE("Loading server meshers plugin library ...");
- LibHandle libHandle = LoadLib( aPlatformLibName/*theLibName*/ );
+ LibHandle libHandle = LoadLib( aPlatformLibName.c_str() );
if (!libHandle)
{
// report any error, if occured
if(MYDEBUG) MESSAGE("Create Hypothesis " << theHypName);
myHypothesis_i =
myHypCreatorMap[string(theHypName)]->Create(myPoa, GetCurrentStudyID(), &myGen);
- myHypothesis_i->SetLibName(aPlatformLibName/*theLibName*/); // for persistency assurance
+ myHypothesis_i->SetLibName(aPlatformLibName.c_str()); // for persistency assurance
}
catch (SALOME_Exception& S_ex)
{
THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
}
- if ( aPlatformLibName )
- delete[] aPlatformLibName;
-
if (!myHypothesis_i)
return hypothesis_i._retn();
// activate the CORBA servant of hypothesis
- hypothesis_i = SMESH::SMESH_Hypothesis::_narrow( myHypothesis_i->_this() );
+ hypothesis_i = myHypothesis_i->_this();
int nextId = RegisterObject( hypothesis_i );
if(MYDEBUG) { MESSAGE( "Add hypo to map with id = "<< nextId ); }
else { nextId = 0; } // avoid "unused variable" warning in release mode
GEOM::GEOM_Object_ptr theShapeObject )
throw ( SALOME::SALOME_Exception )
{
- MEMOSTAT;
+ //MEMOSTAT;
Unexpect aCatch(SALOME_SalomeException);
if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Compute" );
// Get temporary files location
TCollection_AsciiString tmpDir =
- isMultiFile ? TCollection_AsciiString( ( char* )theURL ) : ( char* )SALOMEDS_Tool::GetTmpDir().c_str();
+ ( char* )( isMultiFile ? theURL : SALOMEDS_Tool::GetTmpDir().c_str() );
INFOS( "THE URL++++++++++++++" );
INFOS( theURL );
tmpDir.ToCString(),
isMultiFile );
TCollection_AsciiString aStudyName( "" );
- if ( isMultiFile )
- aStudyName = ( (char*)SALOMEDS_Tool::GetNameFromPath( myCurrentStudy->URL() ).c_str() );
-
+ if ( isMultiFile ) {
+ CORBA::String_var url = myCurrentStudy->URL();
+ aStudyName = (char*)SALOMEDS_Tool::GetNameFromPath( url.in() ).c_str();
+ }
// Set names of temporary files
- TCollection_AsciiString filename = tmpDir + aStudyName + TCollection_AsciiString( "_SMESH.hdf" );
- TCollection_AsciiString meshfile = tmpDir + aStudyName + TCollection_AsciiString( "_SMESH_Mesh.med" );
+ TCollection_AsciiString filename = tmpDir + aStudyName + "_SMESH.hdf";
+ TCollection_AsciiString meshfile = tmpDir + aStudyName + "_SMESH_Mesh.med";
int size;
HDFfile* aFile;
// --> try to find SUB-MESHES containers for each type of submesh
for ( int j = GetSubMeshOnVertexTag(); j <= GetSubMeshOnCompoundTag(); j++ ) {
- char name_meshgroup[ 30 ];
+ const char* name_meshgroup;
if ( j == GetSubMeshOnVertexTag() )
- strcpy( name_meshgroup, "SubMeshes On Vertex" );
+ name_meshgroup = "SubMeshes On Vertex";
else if ( j == GetSubMeshOnEdgeTag() )
- strcpy( name_meshgroup, "SubMeshes On Edge" );
+ name_meshgroup = "SubMeshes On Edge";
else if ( j == GetSubMeshOnWireTag() )
- strcpy( name_meshgroup, "SubMeshes On Wire" );
+ name_meshgroup = "SubMeshes On Wire";
else if ( j == GetSubMeshOnFaceTag() )
- strcpy( name_meshgroup, "SubMeshes On Face" );
+ name_meshgroup = "SubMeshes On Face";
else if ( j == GetSubMeshOnShellTag() )
- strcpy( name_meshgroup, "SubMeshes On Shell" );
+ name_meshgroup = "SubMeshes On Shell";
else if ( j == GetSubMeshOnSolidTag() )
- strcpy( name_meshgroup, "SubMeshes On Solid" );
+ name_meshgroup = "SubMeshes On Solid";
else if ( j == GetSubMeshOnCompoundTag() )
- strcpy( name_meshgroup, "SubMeshes On Compound" );
+ name_meshgroup = "SubMeshes On Compound";
// try to get submeshes container HDF group
if ( aTopGroup->ExistInternalObject( name_meshgroup ) ) {
// identify submesh
char name_submeshgroup[ HDF_NAME_MAX_LEN+1 ];
aGroup->InternalObjectIndentify( k, name_submeshgroup );
- if ( string( name_submeshgroup ).substr( 0, 7 ) == string( "SubMesh" ) ) {
+ if ( strncmp( name_submeshgroup, "SubMesh", 7 ) == 0 ) {
// --> get submesh id
- int subid = atoi( string( name_submeshgroup ).substr( 7 ).c_str() );
+ int subid = atoi( name_submeshgroup + 7 );
if ( subid <= 0 )
continue;
// open submesh HDF group
char name_dataset[ HDF_NAME_MAX_LEN+1 ];
aSubSubGroup->InternalObjectIndentify( l, name_dataset );
// check if it is an algorithm
- if ( string( name_dataset ).substr( 0, 4 ) == string( "Algo" ) ) {
+ if ( strncmp( name_dataset, "Algo", 4 ) == 0 ) {
aDataset = new HDFdataset( name_dataset, aSubSubGroup );
aDataset->OpenOnDisk();
size = aDataset->GetSize();
if ( SMESH_GroupOnFilter_i* aFilterGroup =
dynamic_cast< SMESH_GroupOnFilter_i*>( aGroupImpl ))
+ {
aFilterGroup->SetFilter( filter );
-
+ filter->UnRegister();
+ }
SMESHDS_GroupBase* aGroupBaseDS = aGroupImpl->GetGroupDS();
if ( !aGroupBaseDS )
continue;
// creation of tree nodes for all data objects in the study
// to support tree representation customization and drag-n-drop:
- SALOMEDS::UseCaseBuilder_var useCaseBuilder = theComponent->GetStudy()->GetUseCaseBuilder();
+ SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theComponent->GetStudy()->GetUseCaseBuilder();
if ( !useCaseBuilder->IsUseCaseNode( theComponent ) ) {
useCaseBuilder->SetRootCurrent();
useCaseBuilder->Append( theComponent ); // component object is added as the top level item
- SALOMEDS::ChildIterator_var it = theComponent->GetStudy()->NewChildIterator( theComponent );
+ SALOMEDS::ChildIterator_wrap it = theComponent->GetStudy()->NewChildIterator( theComponent );
for (it->InitEx(true); it->More(); it->Next()) {
useCaseBuilder->AppendTo( it->Value()->GetFather(), it->Value() );
}
// Is used in the drag-n-drop functionality.
//=================================================================================
void SMESH_Gen_i::Move( const SMESH::sobject_list& what,
- SALOMEDS::SObject_ptr where,
- CORBA::Long row )
+ SALOMEDS::SObject_ptr where,
+ CORBA::Long row )
{
if ( CORBA::is_nil( where ) ) return;
// Move objects to the specified position
void Move( const SMESH::sobject_list& what,
- SALOMEDS::SObject_ptr where,
- CORBA::Long row );
+ SALOMEDS::SObject_ptr where,
+ CORBA::Long row );
private:
// Create hypothesis of given type
const bool theSelectable = true)
{
SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theStudy, theIOR );
- SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
+ SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
SALOMEDS::UseCaseBuilder_var useCaseBuilder = theStudy->GetUseCaseBuilder();
+ SALOMEDS::SObject_wrap objAfter;
if ( SO->_is_nil() ) {
- if ( theTag == 0 )
+ if ( theTag == 0 ) {
SO = aStudyBuilder->NewObject( theFatherObject );
- else if ( !theFatherObject->FindSubObject( theTag, SO.inout() ))
+ } else if ( !theFatherObject->FindSubObject( theTag, SO.inout() )) {
SO = aStudyBuilder->NewObjectToTag( theFatherObject, theTag );
+
+ // define the next tag after given one in the data tree to insert SOobject
+ std::string anEntry;
+ int last2Pnt_pos = -1;
+ int tagAfter = -1;
+ CORBA::String_var entry;
+ SALOMEDS::SObject_wrap curObj;
+ SALOMEDS::UseCaseIterator_var anUseCaseIter = useCaseBuilder->GetUseCaseIterator(theFatherObject);
+ for ( ; anUseCaseIter->More(); anUseCaseIter->Next() ) {
+ curObj = anUseCaseIter->Value();
+ entry = curObj->GetID();
+ anEntry = entry.in();
+ last2Pnt_pos = anEntry.rfind( ":" );
+ tagAfter = atoi( anEntry.substr( last2Pnt_pos+1 ).c_str() );
+ if ( tagAfter > theTag ) {
+ objAfter = curObj;
+ break;
+ }
+ }
+ }
}
SALOMEDS::GenericAttribute_wrap anAttr;
CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theIOR );
SALOMEDS::AttributeIOR_wrap iorAttr = anAttr;
iorAttr->SetValue( objStr.in() );
+ // UnRegister() !!!
+ SALOME::GenericObj_var genObj = SALOME::GenericObj::_narrow( theIOR );
+ if ( !genObj->_is_nil() )
+ genObj->UnRegister();
}
if ( thePixMap ) {
anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributePixMap" );
// add object to the use case tree
// (to support tree representation customization and drag-n-drop)
- useCaseBuilder->AppendTo( SO->GetFather(), SO );
+ if ( !CORBA::is_nil( objAfter ) ) {
+ useCaseBuilder->InsertBefore( SO, objAfter ); // insert at given tag
+ } else if ( !useCaseBuilder->IsUseCaseNode( SO ) ) {
+ useCaseBuilder->AppendTo( theFatherObject, SO ); // append to the end of list
+ }
return SO._retn();
}
{
CORBA::String_var aResult("");
- SALOMEDS::SObject_wrap aSObj = ObjectToSObject( myCurrentStudy,theObject);
+ SALOMEDS::SObject_wrap aSObj = ObjectToSObject( myCurrentStudy, theObject );
if ( !aSObj->_is_nil() )
{
SALOMEDS::GenericAttribute_wrap attr;
aResult = strAttr->Value();
}
}
-
- return CORBA::string_dup( aResult.in() );
+ return aResult._retn();
}
SMESH_GroupBase_i::~SMESH_GroupBase_i()
{
- MESSAGE("~SMESH_GroupBase_i; this = "<<this );
- if ( myMeshServant )
- myMeshServant->removeGroup(myLocalID);
-
if ( myPreMeshInfo ) delete myPreMeshInfo; myPreMeshInfo = NULL;
}
aGroup->SetName(theName);
// Update group name in a study
- SMESH_Gen_i* aGen = myMeshServant->GetGen();
- SALOMEDS::Study_var aStudy = aGen->GetCurrentStudy();
- SALOMEDS::SObject_var anSO = aGen->ObjectToSObject( aStudy, _this() );
+ SMESH_Gen_i* aGen = myMeshServant->GetGen();
+ SALOMEDS::Study_var aStudy = aGen->GetCurrentStudy();
+ SMESH::SMESH_GroupBase_var aGrp = _this();
+ SALOMEDS::SObject_var anSO = aGen->ObjectToSObject( aStudy, aGrp );
if ( !anSO->_is_nil() )
{
aGen->SetName( anSO, theName );
// Update Python script
- TPythonDump() << _this() << ".SetName( '" << theName << "' )";
+ TPythonDump() << anSO << ".SetName( '" << theName << "' )";
}
}
myPreMeshInfo->FullLoadFromFile();
// Update Python script
- TPythonDump() << _this() << ".Clear()";
+ TPythonDump() << SMESH::SMESH_Group_var(_this()) << ".Clear()";
// Clear the group
SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
myPreMeshInfo->FullLoadFromFile();
// Update Python script
- TPythonDump() << "nbAdd = " << _this() << ".Add( " << theIDs << " )";
+ TPythonDump() << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".Add( " << theIDs << " )";
// Add elements to the group
SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
myPreMeshInfo->FullLoadFromFile();
// Update Python script
- TPythonDump() << "nbDel = " << _this() << ".Remove( " << theIDs << " )";
+ TPythonDump() << "nbDel = " << SMESH::SMESH_Group_var(_this())
+ << ".Remove( " << theIDs << " )";
// Remove elements from the group
SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
myPreMeshInfo->FullLoadFromFile();
if(SMESH::Predicate_i* aPredicate = SMESH::GetPredicate(thePredicate)){
- TPythonDump()<<_this()<<".AddByPredicate("<<aPredicate<<")";
- return ChangeByPredicate(aPredicate,GetGroupDS(),&SMESHDS_Group::Add);
+ TPythonDump() << SMESH::SMESH_Group_var(_this())
+ << ".AddByPredicate( " << aPredicate << " )";
+ return ChangeByPredicate( aPredicate, GetGroupDS(), &SMESHDS_Group::Add );
}
return 0;
}
myPreMeshInfo->FullLoadFromFile();
if(SMESH::Predicate_i* aPredicate = SMESH::GetPredicate(thePredicate)){
- TPythonDump()<<_this()<<".RemoveByPredicate("<<aPredicate<<")";
+ TPythonDump() << SMESH::SMESH_Group_var(_this())
+ << ".RemoveByPredicate( " << aPredicate << " )";
return ChangeByPredicate(aPredicate,GetGroupDS(),&SMESHDS_Group::Remove);
}
return 0;
myPreMeshInfo->FullLoadFromFile();
TPythonDump pd;
- long nbAdd = 0;
+ long prevNb = Size();
SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
if (aGroupDS) {
- SMESH::long_array_var anIds;
- SMESH::SMESH_GroupBase_var group = SMESH::SMESH_GroupBase::_narrow(theSource);
- SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow(theSource);
- SMESH::SMESH_subMesh_var submesh = SMESH::SMESH_subMesh::_narrow(theSource);
- SMESH::Filter_var filter = SMESH::Filter::_narrow(theSource);
- if ( !group->_is_nil())
- anIds = group->GetType()==GetType() ? theSource->GetIDs() : new SMESH::long_array();
- else if ( !mesh->_is_nil() )
- anIds = mesh->GetElementsByType( GetType() );
- else if ( !submesh->_is_nil())
- anIds = submesh->GetElementsByType( GetType() );
- else if ( !filter->_is_nil() ) {
- filter->SetMesh( GetMeshServant()->_this() );
- anIds = filter->GetElementType()==GetType() ? theSource->GetIDs() : new SMESH::long_array();
- }
- else
- anIds = theSource->GetIDs();
- for ( int i = 0, total = anIds->length(); i < total; i++ ) {
- if ( aGroupDS->Add((int)anIds[i]) ) nbAdd++;
- }
+ SMDS_ElemIteratorPtr elemIt = SMESH_Mesh_i::GetElements( theSource, GetType() );
+ while ( elemIt->more() )
+ aGroupDS->SMDSGroup().Add( elemIt->next() );
}
// Update Python script
- pd << "nbAdd = " << _this() << ".AddFrom( " << theSource << " )";
+ pd << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".AddFrom( " << theSource << " )";
- return nbAdd;
+ return prevNb - Size();
}
//=============================================================================
{
SMESH::SMESH_Mesh_var aMesh;
if ( myMeshServant )
- aMesh = SMESH::SMESH_Mesh::_narrow( myMeshServant->_this() );
+ aMesh = myMeshServant->_this();
return aMesh._retn();
}
if ( oldColor != aQColor )
{
aGroupDS->SetColor(aQColor);
- TPythonDump()<<_this()<<".SetColor( SALOMEDS.Color( "<<color.R<<", "<<color.G<<", "<<color.B<<" ))";
+ TPythonDump()<< SMESH::SMESH_GroupBase_var(_this())
+ << ".SetColor( SALOMEDS.Color( "
+ <<color.R<<", "<<color.G<<", "<<color.B<<" ))";
}
}
}
if (aGroupDS)
{
aGroupDS->SetColorGroup(color);
- TPythonDump()<<_this()<<".SetColorNumber( "<<color<<" )";
+ TPythonDump()<<SMESH::SMESH_GroupBase_var(_this())<<".SetColorNumber( "<<color<<" )";
}
MESSAGE("set color number of a group");
return ;
if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() ))
grDS->SetPredicate( GetPredicate( myFilter ));
- TPythonDump()<< _this() <<".SetFilter( "<<theFilter<<" )";
+ TPythonDump()<< SMESH::SMESH_GroupOnFilter_var(_this()) <<".SetFilter( "<<theFilter<<" )";
if ( myFilter )
{
SMESH::Filter_ptr SMESH_GroupOnFilter_i::GetFilter()
{
SMESH::Filter_var f = myFilter;
- TPythonDump() << f << " = " << _this() << ".GetFilter()";
+ TPythonDump() << f << " = " << SMESH::SMESH_GroupOnFilter_var(_this()) << ".GetFilter()";
return f._retn();
}
#include "SMESH_Measurements_i.hxx"
#include "SMESH_Gen_i.hxx"
+#include "SMESH_Filter_i.hxx"
#include "SMESH_PythonDump.hxx"
#include "SMDS_Mesh.hxx"
return theTypes->length() > 0 && theTypes[0] == SMESH::NODE;
}
+static double getNumericalValue(SMESH::SMESH_IDSource_ptr theSource, SMESH::Controls::NumericalFunctorPtr theFunctor)
+{
+ double value = 0;
+
+ if ( !CORBA::is_nil( theSource ) ) {
+ const SMESHDS_Mesh* aMesh = getMesh( theSource );
+ if ( aMesh ) {
+ theFunctor->SetMesh( aMesh );
+
+ SMESH::long_array_var anElementsId = theSource->GetIDs();
+ for (int i = 0; i < anElementsId->length(); i++) {
+ value += theFunctor->GetValue( anElementsId[i] );
+ }
+ }
+ }
+ return value;
+}
+
//=======================================================================
// name : MinDistance
// Purpose : minimal distance between two given entities
return aMeasure;
}
+
+//=======================================================================
+// name : Length
+// Purpose : sum of length of 1D elements of the source
+//=======================================================================
+double Measurements_i::Length(SMESH::SMESH_IDSource_ptr theSource)
+{
+ return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Length()) );
+}
+
+//=======================================================================
+// name : Area
+// Purpose : sum of area of 2D elements of the source
+//=======================================================================
+double Measurements_i::Area(SMESH::SMESH_IDSource_ptr theSource)
+{
+ return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Area()) );
+}
+
+//=======================================================================
+// name : Volume
+// Purpose : sum of volume of 3D elements of the source
+//=======================================================================
+double Measurements_i::Volume(SMESH::SMESH_IDSource_ptr theSource)
+{
+ return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Volume()) );
+}
* common bounding box of entities
*/
SMESH::Measure BoundingBox(const SMESH::ListOfIDSources& theSources);
+
+
+ /*!
+ * sum of length of 1D elements of the source
+ */
+ double Length(SMESH::SMESH_IDSource_ptr theSource);
+
+ /*!
+ * sum of area of 2D elements of the source
+ */
+ double Area(SMESH::SMESH_IDSource_ptr);
+
+ /*!
+ * sum of volume of 3D elements of the source
+ */
+ double Volume(SMESH::SMESH_IDSource_ptr);
};
}
#include <Utils_ExceptHandlers.hxx>
#include <Utils_CorbaException.hxx>
#include <SALOMEDS_wrap.hxx>
+#include <SALOME_GenericObj_i.hh>
#include <BRepAdaptor_Surface.hxx>
#include <BRep_Tool.hxx>
SMESH_MeshEditor_i::~SMESH_MeshEditor_i()
{
- deleteAuxIDSources();
+ //deleteAuxIDSources();
delete myPreviewMesh; myPreviewMesh = 0;
delete myPreviewEditor; myPreviewEditor = 0;
}
//=======================================================================
//function : MakeIDSource
-//purpose : Wrap a sequence of ids in a SMESH_IDSource
+//purpose : Wrap a sequence of ids in a SMESH_IDSource.
+// Call UnRegister() as you fininsh using it!!
//=======================================================================
-struct SMESH_MeshEditor_i::_IDSource : public POA_SMESH::SMESH_IDSource
+struct SMESH_MeshEditor_i::_IDSource : public virtual POA_SMESH::SMESH_IDSource,
+ public virtual SALOME::GenericObj_i
{
SMESH::long_array _ids;
SMESH::ElementType _type;
SMESH::SMESH_IDSource_ptr SMESH_MeshEditor_i::MakeIDSource(const SMESH::long_array& ids,
SMESH::ElementType type)
{
- if ( myAuxIDSources.size() > 10 )
- deleteAuxIDSources();
+ // if ( myAuxIDSources.size() > 10 ) {
+ // delete myAuxIDSources.front();
+ // myAuxIDSources.pop_front();
+ // }
_IDSource* idSrc = new _IDSource;
idSrc->_mesh = myMesh_i->_this();
idSrc->_ids = ids;
idSrc->_type = type;
- myAuxIDSources.push_back( idSrc );
+ //myAuxIDSources.push_back( idSrc );
SMESH::SMESH_IDSource_var anIDSourceVar = idSrc->_this();
return 0;
}
-void SMESH_MeshEditor_i::deleteAuxIDSources()
-{
- std::list< _IDSource* >::iterator idSrcIt = myAuxIDSources.begin();
- for ( ; idSrcIt != myAuxIDSources.end(); ++idSrcIt )
- delete *idSrcIt;
- myAuxIDSources.clear();
-}
+// void SMESH_MeshEditor_i::deleteAuxIDSources()
+// {
+// std::list< _IDSource* >::iterator idSrcIt = myAuxIDSources.begin();
+// for ( ; idSrcIt != myAuxIDSources.end(); ++idSrcIt )
+// delete *idSrcIt;
+// myAuxIDSources.clear();
+// }
//=============================================================================
/*!
// temporary IDSources
struct _IDSource;
- std::list< _IDSource* > myAuxIDSources;
- void deleteAuxIDSources();
+ // std::list< _IDSource* > myAuxIDSources;
+ // void deleteAuxIDSources();
};
#endif
: SALOME::GenericObj_i( thePOA )
{
MESSAGE("SMESH_Mesh_i");
- _impl = NULL;
- _gen_i = gen_i;
- _id = _idGenerator++;
- _studyId = studyId;
- _preMeshInfo = NULL;
+ _impl = NULL;
+ _gen_i = gen_i;
+ _id = _idGenerator++;
+ _studyId = studyId;
+ _editor = NULL;
+ _previewEditor = NULL;
+ _preMeshInfo = NULL;
}
//=============================================================================
for (itGr = _mapGroups.begin(); itGr != _mapGroups.end(); itGr++)
if (SMESH_GroupBase_i* aGroup = SMESH::DownCast<SMESH_GroupBase_i*>(itGr->second))
{
- // _impl->RemoveGroup() is called by ~SMESH_GroupBase_i() (PAL6331)
- //_impl->RemoveGroup( aGroup->GetLocalID() );
- aGroup->myMeshServant = 0;
aGroup->UnRegister();
+ SMESH::SMESH_GroupBase_var( itGr->second );
}
_mapGroups.clear();
if ( SMESH_subMesh_i* aSubMesh = SMESH::DownCast<SMESH_subMesh_i*>( itSM->second ))
{
aSubMesh->UnRegister();
+ SMESH::SMESH_subMesh_var( itSM->second );
}
_mapSubMeshIor.clear();
- // destroy hypotheses
+ // destroy hypotheses. _mapHypo contains all hyps ever been assigned
map<int, SMESH::SMESH_Hypothesis_ptr>::iterator itH;
- for ( itH = _mapHypo.begin(); itH != _mapHypo.end(); itH++ )
- if ( SMESH_Hypothesis_i* aHypo = SMESH::DownCast<SMESH_Hypothesis_i*>( itH->second ))
- {
- aHypo->UnRegister();
- }
+ for ( itH = _mapHypo.begin(); itH != _mapHypo.end(); itH++ ) {
+ if ( SMESH_Hypothesis_i* hyp_i = SMESH::DownCast<SMESH_Hypothesis_i*>( itH->second ))
+ if ( SMESH_Hypothesis * smHyp = _impl->GetHypothesis( itH->first ))
+ if ( _impl->GetMeshDS()->IsUsedHypothesis( smHyp ))
+ hyp_i->UnRegister();
+
+ SMESH::SMESH_Hypothesis_var( itH->second ); // decref CORBA object
+ }
_mapHypo.clear();
+ delete _editor; _editor = NULL;
+ delete _previewEditor; _previewEditor = NULL;
delete _impl; _impl = NULL;
delete _preMeshInfo; _preMeshInfo = NULL;
}
THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
}
// to track changes of GEOM groups
- addGeomGroupData( theShapeObject, _this() );
+ SMESH::SMESH_Mesh_var mesh = _this();
+ addGeomGroupData( theShapeObject, mesh );
}
//================================================================================
}
_impl->GetMeshDS()->Modified();
- TPythonDump() << _this() << ".Clear()";
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".Clear()";
}
//================================================================================
}
_impl->GetMeshDS()->Modified();
- TPythonDump() << _this() << ".ClearSubMesh( " << ShapeID << " )";
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ClearSubMesh( " << ShapeID << " )";
}
//=============================================================================
}
else
{
- errVar->code = ConvertDriverMEDReadStatus( errorPtr->myName );
+ errVar->code = ConvertDriverMEDReadStatus( errorPtr->myName );
errVar->comment = errorPtr->myComment.c_str();
}
return errVar._retn();
_medFileInfo = new SMESH::MedFileInfo();
_medFileInfo->fileName = theFileName;
_medFileInfo->fileSize = 0;
+ _medFileInfo->major = major;
+ _medFileInfo->minor = minor;
+ _medFileInfo->release = release;
#ifdef WIN32
struct _stati64 d;
if ( ::_stati64( theFileName, &d ) != -1 )
if ( ::stat64( theFileName, &d ) != -1 )
#endif
_medFileInfo->fileSize = d.st_size;
- _medFileInfo->major = major;
- _medFileInfo->minor = minor;
- _medFileInfo->release = release;
return ConvertDriverMEDReadStatus(status);
}
char* SMESH_Mesh_i::GetVersionString(SMESH::MED_VERSION version, CORBA::Short nbDigits)
{
string ver = DriverMED_W_SMESHDS_Mesh::GetVersionString(MED::EVersion(version),
- nbDigits);
+ nbDigits);
return CORBA::string_dup( ver.c_str() );
}
SMESH_Hypothesis::Hypothesis_Status status = addHypothesis( aSubShapeObject, anHyp );
+ SMESH::SMESH_Mesh_var mesh( _this() );
if ( !SMESH_Hypothesis::IsStatusFatal(status) )
- _gen_i->AddHypothesisToShape(_gen_i->GetCurrentStudy(), _this(),
- aSubShapeObject, anHyp );
-
+ {
+ SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
+ _gen_i->AddHypothesisToShape( study, mesh, aSubShapeObject, anHyp );
+ }
if(MYDEBUG) MESSAGE( " AddHypothesis(): status = " << status );
// Update Python script
- //if(_impl->HasShapeToMesh()) {
- TPythonDump() << "status = " << _this() << ".AddHypothesis( "
+ //if(_impl->HasShapeToMesh())
+ {
+ TPythonDump() << "status = " << mesh << ".AddHypothesis( "
<< aSubShapeObject << ", " << anHyp << " )";
- // }
+ }
// else {
- // TPythonDump() << "status = " << _this() << ".AddHypothesis( "<< anHyp << " )";
+ // TPythonDump() << "status = " << mesh << ".AddHypothesis( "<< anHyp << " )";
// }
-
+
return ConvertHypothesisStatus(status);
}
//=============================================================================
SMESH_Hypothesis::Hypothesis_Status
- SMESH_Mesh_i::addHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject,
- SMESH::SMESH_Hypothesis_ptr anHyp)
+SMESH_Mesh_i::addHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject,
+ SMESH::SMESH_Hypothesis_ptr anHyp)
{
if(MYDEBUG) MESSAGE("addHypothesis");
- if (CORBA::is_nil(aSubShapeObject) && HasShapeToMesh())
- THROW_SALOME_CORBA_EXCEPTION("bad Sub-shape reference",
- SALOME::BAD_PARAM);
+ if (CORBA::is_nil( aSubShapeObject ) && HasShapeToMesh())
+ THROW_SALOME_CORBA_EXCEPTION("bad Sub-shape reference",SALOME::BAD_PARAM);
- SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow(anHyp);
- if (CORBA::is_nil(myHyp))
- THROW_SALOME_CORBA_EXCEPTION("bad hypothesis reference",
- SALOME::BAD_PARAM);
+ if (CORBA::is_nil( anHyp ))
+ THROW_SALOME_CORBA_EXCEPTION("bad hypothesis reference",SALOME::BAD_PARAM);
SMESH_Hypothesis::Hypothesis_Status status = SMESH_Hypothesis::HYP_OK;
try
else
myLocSubShape = _impl->GetShapeToMesh();
- int hypId = myHyp->GetId();
+ const int hypId = anHyp->GetId();
status = _impl->AddHypothesis(myLocSubShape, hypId);
if ( !SMESH_Hypothesis::IsStatusFatal(status) ) {
- _mapHypo[hypId] = SMESH::SMESH_Hypothesis::_duplicate( myHyp );
- _mapHypo[hypId]->Register();
+ _mapHypo[hypId] = SMESH::SMESH_Hypothesis::_duplicate( anHyp );
+ anHyp->Register();
// assure there is a corresponding submesh
if ( !_impl->IsMainShape( myLocSubShape )) {
int shapeId = _impl->GetMeshDS()->ShapeToIndex( myLocSubShape );
if ( _mapSubMesh_i.find( shapeId ) == _mapSubMesh_i.end() )
- createSubMesh( aSubShapeObject );
+ SMESH::SMESH_subMesh_var( createSubMesh( aSubShapeObject ));
}
}
}
SMESH::Hypothesis_Status SMESH_Mesh_i::RemoveHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject,
SMESH::SMESH_Hypothesis_ptr anHyp)
- throw(SALOME::SALOME_Exception)
+ throw(SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
if ( _preMeshInfo )
_preMeshInfo->ForgetOrLoad();
SMESH_Hypothesis::Hypothesis_Status status = removeHypothesis( aSubShapeObject, anHyp );
+ SMESH::SMESH_Mesh_var mesh = _this();
if ( !SMESH_Hypothesis::IsStatusFatal(status) )
- _gen_i->RemoveHypothesisFromShape(_gen_i->GetCurrentStudy(), _this(),
- aSubShapeObject, anHyp );
-
- // Update Python script
- // Update Python script
- if(_impl->HasShapeToMesh()) {
- TPythonDump() << "status = " << _this() << ".RemoveHypothesis( "
- << aSubShapeObject << ", " << anHyp << " )";
+ {
+ SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
+ _gen_i->RemoveHypothesisFromShape( study, mesh, aSubShapeObject, anHyp );
}
- else {
- TPythonDump() << "status = " << _this() << ".RemoveHypothesis( "
+ // Update Python script
+ if(_impl->HasShapeToMesh())
+ TPythonDump() << "status = " << mesh << ".RemoveHypothesis( "
+ << aSubShapeObject << ", " << anHyp << " )";
+ else
+ TPythonDump() << "status = " << mesh << ".RemoveHypothesis( "
<< anHyp << " )";
- }
return ConvertHypothesisStatus(status);
}
SMESH::SMESH_Hypothesis_ptr anHyp)
{
if(MYDEBUG) MESSAGE("removeHypothesis()");
- // **** proposer liste de sub-shape (selection multiple)
- if (CORBA::is_nil(aSubShapeObject) && HasShapeToMesh())
+ if (CORBA::is_nil( aSubShapeObject ) && HasShapeToMesh())
THROW_SALOME_CORBA_EXCEPTION("bad Sub-shape reference", SALOME::BAD_PARAM);
- SMESH::SMESH_Hypothesis_var myHyp = SMESH::SMESH_Hypothesis::_narrow(anHyp);
- if (CORBA::is_nil(myHyp))
+ if (CORBA::is_nil( anHyp ))
THROW_SALOME_CORBA_EXCEPTION("bad hypothesis reference", SALOME::BAD_PARAM);
SMESH_Hypothesis::Hypothesis_Status status = SMESH_Hypothesis::HYP_OK;
{
TopoDS_Shape myLocSubShape;
//use PseudoShape in case if mesh has no shape
- if(HasShapeToMesh())
- myLocSubShape = _gen_i->GeomObjectToShape( aSubShapeObject);
+ if( _impl->HasShapeToMesh() )
+ myLocSubShape = _gen_i->GeomObjectToShape( aSubShapeObject );
else
myLocSubShape = _impl->GetShapeToMesh();
- int hypId = myHyp->GetId();
+ const int hypId = anHyp->GetId();
status = _impl->RemoveHypothesis(myLocSubShape, hypId);
-// if ( !SMESH_Hypothesis::IsStatusFatal(status) ) EAP: hyp can be used on many sub-shapes
-// _mapHypo.erase( hypId );
+ if ( !SMESH_Hypothesis::IsStatusFatal(status) )
+ {
+ // _mapHypo.erase( hypId ); EAP: hyp can be used on many sub-shapes
+ anHyp->UnRegister();
+ }
}
catch(SALOME_Exception & S_ex)
{
//=============================================================================
SMESH::ListOfHypothesis *
- SMESH_Mesh_i::GetHypothesisList(GEOM::GEOM_Object_ptr aSubShapeObject)
+SMESH_Mesh_i::GetHypothesisList(GEOM::GEOM_Object_ptr aSubShapeObject)
throw(SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
int i = 0, n = aLocalList.size();
aList->length( n );
- for ( list<const SMESHDS_Hypothesis*>::const_iterator anIt = aLocalList.begin(); i < n && anIt != aLocalList.end(); anIt++ ) {
- SMESHDS_Hypothesis* aHyp = (SMESHDS_Hypothesis*)(*anIt);
- if ( _mapHypo.find( aHyp->GetID() ) != _mapHypo.end() )
- aList[i++] = SMESH::SMESH_Hypothesis::_narrow( _mapHypo[aHyp->GetID()] );
+ list<const SMESHDS_Hypothesis*>::const_iterator aHyp = aLocalList.begin();
+ std::map<int, SMESH::SMESH_Hypothesis_ptr>::iterator id_hypptr;
+ for ( ; i < n && aHyp != aLocalList.end(); aHyp++ )
+ {
+ id_hypptr = _mapHypo.find( (*aHyp)->GetID() );
+ if ( id_hypptr != _mapHypo.end() )
+ aList[i++] = SMESH::SMESH_Hypothesis::_narrow( id_hypptr->second );
}
-
aList->length( i );
}
catch(SALOME_Exception & S_ex) {
// Update Python script
if ( !_mapSubMeshIor.empty() )
- aPythonDump << " ] = " << _this() << ".GetSubMeshes()";
+ aPythonDump << " ] = " << SMESH::SMESH_Mesh_var( _this() ) << ".GetSubMeshes()";
return aList._retn();
}
*
*/
//=============================================================================
+
SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetSubMesh(GEOM::GEOM_Object_ptr aSubShapeObject,
const char* theName )
throw(SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
- MESSAGE("SMESH_Mesh_i::GetSubMesh");
if (CORBA::is_nil(aSubShapeObject))
- THROW_SALOME_CORBA_EXCEPTION("bad Sub-shape reference",
- SALOME::BAD_PARAM);
+ THROW_SALOME_CORBA_EXCEPTION("bad Sub-shape reference", SALOME::BAD_PARAM);
SMESH::SMESH_subMesh_var subMesh;
- SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(_this());
+ SMESH::SMESH_Mesh_var aMesh = _this();
try {
TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape(aSubShapeObject);
// create a new subMesh object servant if there is none for the shape
if ( subMesh->_is_nil() )
subMesh = createSubMesh( aSubShapeObject );
- if ( _gen_i->CanPublishInStudy( subMesh )) {
+ if ( _gen_i->CanPublishInStudy( subMesh ))
+ {
+ SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
SALOMEDS::SObject_wrap aSO =
- _gen_i->PublishSubMesh(_gen_i->GetCurrentStudy(), aMesh,
- subMesh, aSubShapeObject, theName );
+ _gen_i->PublishSubMesh( study, aMesh, subMesh, aSubShapeObject, theName );
if ( !aSO->_is_nil()) {
// Update Python script
- TPythonDump() << aSO << " = " << _this() << ".GetSubMesh( "
+ TPythonDump() << aSO << " = " << aMesh << ".GetSubMesh( "
<< aSubShapeObject << ", '" << theName << "' )";
}
}
throw (SALOME::SALOME_Exception)
{
SMESH_TRY;
-
+
if ( theSubMesh->_is_nil() )
return;
builder->RemoveObjectWithChildren( anSO );
// Update Python script
- TPythonDump() << _this() << ".RemoveSubMesh( " << anSO << " )";
+ TPythonDump() << SMESH::SMESH_Mesh_var( _this() ) << ".RemoveSubMesh( " << anSO << " )";
}
}
SMESH::SMESH_Group_ptr SMESH_Mesh_i::CreateGroup( SMESH::ElementType theElemType,
const char* theName )
- throw(SALOME::SALOME_Exception)
+ throw(SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
if ( _preMeshInfo )
SMESH::SMESH_Group_var aNewGroup =
SMESH::SMESH_Group::_narrow( createGroup( theElemType, theName ));
- if ( _gen_i->CanPublishInStudy( aNewGroup ) ) {
+ if ( _gen_i->CanPublishInStudy( aNewGroup ) )
+ {
+ SMESH::SMESH_Mesh_var mesh = _this();
+ SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
SALOMEDS::SObject_wrap aSO =
- _gen_i->PublishGroup(_gen_i->GetCurrentStudy(), _this(),
- aNewGroup, GEOM::GEOM_Object::_nil(), theName);
- if ( !aSO->_is_nil()) {
+ _gen_i->PublishGroup( study, mesh, aNewGroup, GEOM::GEOM_Object::_nil(), theName);
+ if ( !aSO->_is_nil())
// Update Python script
- TPythonDump() << aSO << " = " << _this() << ".CreateGroup( "
+ TPythonDump() << aSO << " = " << mesh << ".CreateGroup( "
<< theElemType << ", '" << theName << "' )";
- }
}
return aNewGroup._retn();
}
-
//=============================================================================
/*!
*
SMESH_Mesh_i::CreateGroupFromGEOM (SMESH::ElementType theElemType,
const char* theName,
GEOM::GEOM_Object_ptr theGeomObj)
- throw(SALOME::SALOME_Exception)
+ throw(SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
if ( _preMeshInfo )
TopoDS_Shape aShape = _gen_i->GeomObjectToShape( theGeomObj );
if ( !aShape.IsNull() )
{
- aNewGroup = SMESH::SMESH_GroupOnGeom::_narrow
- ( createGroup( theElemType, theName, aShape ));
+ aNewGroup =
+ SMESH::SMESH_GroupOnGeom::_narrow( createGroup( theElemType, theName, aShape ));
- if ( _gen_i->CanPublishInStudy( aNewGroup ) ) {
+ if ( _gen_i->CanPublishInStudy( aNewGroup ) )
+ {
+ SMESH::SMESH_Mesh_var mesh = _this();
+ SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
SALOMEDS::SObject_wrap aSO =
- _gen_i->PublishGroup(_gen_i->GetCurrentStudy(), _this(),
- aNewGroup, theGeomObj, theName);
- if ( !aSO->_is_nil()) {
- // Update Python script
- TPythonDump() << aSO << " = " << _this() << ".CreateGroupFromGEOM("
+ _gen_i->PublishGroup( study, mesh, aNewGroup, theGeomObj, theName );
+ if ( !aSO->_is_nil())
+ TPythonDump() << aSO << " = " << mesh << ".CreateGroupFromGEOM( "
<< theElemType << ", '" << theName << "', " << theGeomObj << " )";
- }
}
}
SMESH_Mesh_i::CreateGroupFromFilter(SMESH::ElementType theElemType,
const char* theName,
SMESH::Filter_ptr theFilter )
- throw (SALOME::SALOME_Exception)
+ throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
if ( _preMeshInfo )
if ( _gen_i->CanPublishInStudy( aNewGroup ) )
{
+ SMESH::SMESH_Mesh_var mesh = _this();
+ SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
SALOMEDS::SObject_wrap aSO =
- _gen_i->PublishGroup(_gen_i->GetCurrentStudy(), _this(), aNewGroup,
- GEOM::GEOM_Object::_nil(), theName);
- if ( !aSO->_is_nil()) {
- // Update Python script
- pd << aSO << " = " << _this() << ".CreateGroupFromFilter("
+ _gen_i->PublishGroup( study, mesh, aNewGroup, GEOM::GEOM_Object::_nil(), theName );
+
+ if ( !aSO->_is_nil())
+ pd << aSO << " = " << mesh << ".CreateGroupFromFilter( "
<< theElemType << ", '" << theName << "', " << theFilter << " )";
- }
}
-
return aNewGroup._retn();
}
//=============================================================================
void SMESH_Mesh_i::RemoveGroup( SMESH::SMESH_GroupBase_ptr theGroup )
- throw (SALOME::SALOME_Exception)
+ throw (SALOME::SALOME_Exception)
{
if ( theGroup->_is_nil() )
return;
SMESH_TRY;
- SMESH_GroupBase_i* aGroup =
- dynamic_cast<SMESH_GroupBase_i*>( SMESH_Gen_i::GetServant( theGroup ).in() );
+ SMESH_GroupBase_i* aGroup = SMESH::DownCast<SMESH_GroupBase_i*>( theGroup );
if ( !aGroup )
return;
SALOMEDS::Study_var aStudy = _gen_i->GetCurrentStudy();
- if ( !aStudy->_is_nil() ) {
+ if ( !aStudy->_is_nil() )
+ {
SALOMEDS::SObject_wrap aGroupSO = _gen_i->ObjectToSObject( aStudy, theGroup );
-
- if ( !aGroupSO->_is_nil() ) {
+ if ( !aGroupSO->_is_nil() )
+ {
// Update Python script
- TPythonDump() << _this() << ".RemoveGroup( " << aGroupSO << " )";
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".RemoveGroup( " << aGroupSO << " )";
// Remove group's SObject
SALOMEDS::StudyBuilder_var builder = aStudy->NewBuilder();
if ( theGroup->_is_nil() )
return;
- SMESH_GroupBase_i* aGroup =
- dynamic_cast<SMESH_GroupBase_i*>( SMESH_Gen_i::GetServant( theGroup ).in() );
- if ( !aGroup )
- return;
-
- SMESH::long_array_var anIds = aGroup->GetListOfID();
- SMESH::SMESH_MeshEditor_var aMeshEditor = SMESH_Mesh_i::GetMeshEditor();
-
- TPythonDump pyDump; // Supress dump from RemoveNodes/Elements() and RemoveGroup()
-
// Remove contents
- if ( aGroup->GetType() == SMESH::NODE )
- aMeshEditor->RemoveNodes( anIds );
- else
- aMeshEditor->RemoveElements( anIds );
+ SMESH::SMESH_IDSource_var idSrc = SMESH::SMESH_IDSource::_narrow( theGroup );
+ SMDS_ElemIteratorPtr elemIt = GetElements( idSrc, theGroup->GetType() );
+ while ( elemIt->more() )
+ _impl->GetMeshDS()->RemoveElement( elemIt->next() );
+
+ TPythonDump pyDump; // Supress dump from RemoveGroup()
// Update Python script (theGroup must be alive for this)
- pyDump << _this() << ".RemoveGroupWithContents( " << theGroup << " )";
+ pyDump << SMESH::SMESH_Mesh_var(_this())
+ << ".RemoveGroupWithContents( " << theGroup << " )";
// Remove group
RemoveGroup( theGroup );
//================================================================================
/*!
* \brief Get the list of groups existing in the mesh
- * \retval SMESH::ListOfGroups * - list of groups
+ * \retval SMESH::ListOfGroups * - list of groups
*/
//================================================================================
catch(SALOME_Exception & S_ex) {
THROW_SALOME_CORBA_EXCEPTION(S_ex.what(), SALOME::BAD_PARAM);
}
- aPythonDump << " ] = " << _this() << ".GetGroups()";
+ aPythonDump << " ] = " << SMESH::SMESH_Mesh_var(_this()) << ".GetGroups()";
}
return aList._retn();
}
}
//=============================================================================
-/*! UnionGroups
- * New group is created. All mesh elements that are
- * present in initial groups are added to the new one
+/*!
+ * New group including all mesh elements present in initial groups is created.
*/
//=============================================================================
+
SMESH::SMESH_Group_ptr SMESH_Mesh_i::UnionGroups( SMESH::SMESH_GroupBase_ptr theGroup1,
SMESH::SMESH_GroupBase_ptr theGroup2,
- const char* theName )
+ const char* theName )
throw (SALOME::SALOME_Exception)
{
SMESH::SMESH_Group_var aResGrp;
if ( _preMeshInfo )
_preMeshInfo->FullLoadFromFile();
- if ( theGroup1->_is_nil() || theGroup2->_is_nil() ||
- theGroup1->GetType() != theGroup2->GetType() )
- return SMESH::SMESH_Group::_nil();
-
+ if ( theGroup1->_is_nil() || theGroup2->_is_nil() )
+ THROW_SALOME_CORBA_EXCEPTION("UnionGroups(): NULL Group",
+ SALOME::BAD_PARAM);
+ if ( theGroup1->GetType() != theGroup2->GetType() )
+ THROW_SALOME_CORBA_EXCEPTION("UnionGroups(): different group types",
+ SALOME::BAD_PARAM);
TPythonDump pyDump;
// Create Union
if ( aResGrp->_is_nil() )
return SMESH::SMESH_Group::_nil();
- SMESH::long_array_var anIds1 = theGroup1->GetListOfID();
- SMESH::long_array_var anIds2 = theGroup2->GetListOfID();
-
- TColStd_MapOfInteger aResMap;
-
- for ( int i1 = 0, n1 = anIds1->length(); i1 < n1; i1++ )
- aResMap.Add( anIds1[ i1 ] );
-
- for ( int i2 = 0, n2 = anIds2->length(); i2 < n2; i2++ )
- aResMap.Add( anIds2[ i2 ] );
-
- SMESH::long_array_var aResIds = new SMESH::long_array;
- aResIds->length( aResMap.Extent() );
-
- int resI = 0;
- TColStd_MapIteratorOfMapOfInteger anIter( aResMap );
- for( ; anIter.More(); anIter.Next() )
- aResIds[ resI++ ] = anIter.Key();
-
- aResGrp->Add( aResIds );
+ aResGrp->AddFrom( theGroup1 );
+ aResGrp->AddFrom( theGroup2 );
// Update Python script
- pyDump << aResGrp << " = " << _this() << ".UnionGroups( "
- << theGroup1 << ", " << theGroup2 << ", '"
- << theName << "' )";
+ pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var(_this())
+ << ".UnionGroups( " << theGroup1 << ", " << theGroup2 << ", '" << theName << "' )";
SMESH_CATCH( SMESH::throwCorbaException );
//=============================================================================
/*!
- \brief Union list of groups. New group is created. All mesh elements that are
- present in initial groups are added to the new one.
- \param theGroups list of groups
- \param theName name of group to be created
- \return pointer on the group
-*/
+ * \brief New group including all mesh elements present in initial groups is created.
+ * \param theGroups list of groups
+ * \param theName name of group to be created
+ * \return pointer to the new group
+ */
//=============================================================================
+
SMESH::SMESH_Group_ptr SMESH_Mesh_i::UnionListOfGroups(const SMESH::ListOfGroups& theGroups,
const char* theName )
throw (SALOME::SALOME_Exception)
{
+ SMESH::SMESH_Group_var aResGrp;
+
if ( _preMeshInfo )
_preMeshInfo->FullLoadFromFile();
if ( !theName )
return SMESH::SMESH_Group::_nil();
- SMESH::SMESH_Group_var aResGrp;
-
SMESH_TRY;
- vector< int > anIds;
+ // check types
SMESH::ElementType aType = SMESH::ALL;
for ( int g = 0, n = theGroups.length(); g < n; g++ )
{
SMESH::SMESH_GroupBase_var aGrp = theGroups[ g ];
if ( CORBA::is_nil( aGrp ) )
continue;
-
- // check type
- SMESH::ElementType aCurrType = aGrp->GetType();
if ( aType == SMESH::ALL )
- aType = aCurrType;
- else
- {
- if ( aType != aCurrType )
- return SMESH::SMESH_Group::_nil();
- }
-
- // unite ids
- SMESH::long_array_var aCurrIds = aGrp->GetListOfID();
- for ( int i = 0, n = aCurrIds->length(); i < n; i++ )
- {
- int aCurrId = aCurrIds[ i ];
- anIds.push_back( aCurrId );
- }
+ aType = aGrp->GetType();
+ else if ( aType != aGrp->GetType() )
+ THROW_SALOME_CORBA_EXCEPTION("UnionListOfGroups(): different group types",
+ SALOME::BAD_PARAM);
}
+ if ( aType == SMESH::ALL )
+ return SMESH::SMESH_Group::_nil();
TPythonDump pyDump;
- // Create group
+ // Create Union
aResGrp = CreateGroup( aType, theName );
if ( aResGrp->_is_nil() )
return SMESH::SMESH_Group::_nil();
- // Create array of identifiers
- SMESH::long_array_var aResIds = new SMESH::long_array;
- aResIds->length( anIds.size() );
-
- for ( size_t i = 0; i<anIds.size(); i++ )
- aResIds[ i ] = anIds[i];
- aResGrp->Add( aResIds );
-
- // Update Python script
- pyDump << aResGrp << " = " << _this() << ".UnionListOfGroups( "
- << &theGroups << ", '" << theName << "' )";
+ pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var(_this()) << ".UnionListOfGroups([ ";
+ for ( int g = 0, n = theGroups.length(); g < n; g++ )
+ {
+ SMESH::SMESH_GroupBase_var aGrp = theGroups[ g ];
+ if ( !CORBA::is_nil( aGrp ) )
+ {
+ aResGrp->AddFrom( aGrp );
+ if ( g > 0 ) pyDump << ", ";
+ pyDump << aGrp;
+ }
+ }
+ pyDump << " ], '" << theName << "' )";
SMESH_CATCH( SMESH::throwCorbaException );
}
//=============================================================================
-/*! IntersectGroups
+/*!
* New group is created. All mesh elements that are
* present in both initial groups are added to the new one.
*/
//=============================================================================
+
SMESH::SMESH_Group_ptr SMESH_Mesh_i::IntersectGroups( SMESH::SMESH_GroupBase_ptr theGroup1,
SMESH::SMESH_GroupBase_ptr theGroup2,
const char* theName )
SMESH::SMESH_Group_var aResGrp;
SMESH_TRY;
+
if ( _preMeshInfo )
_preMeshInfo->FullLoadFromFile();
- if ( theGroup1->_is_nil() || theGroup2->_is_nil() ||
- theGroup1->GetType() != theGroup2->GetType() )
- return SMESH::SMESH_Group::_nil();
-
+ if ( theGroup1->_is_nil() || theGroup2->_is_nil() )
+ THROW_SALOME_CORBA_EXCEPTION("IntersectGroups(): NULL Group",
+ SALOME::BAD_PARAM);
+ if ( theGroup1->GetType() != theGroup2->GetType() )
+ THROW_SALOME_CORBA_EXCEPTION("IntersectGroups(): different group types",
+ SALOME::BAD_PARAM);
TPythonDump pyDump;
// Create Intersection
aResGrp = CreateGroup( theGroup1->GetType(), theName );
if ( aResGrp->_is_nil() )
- return aResGrp;
-
- SMESH::long_array_var anIds1 = theGroup1->GetListOfID();
- SMESH::long_array_var anIds2 = theGroup2->GetListOfID();
+ return aResGrp._retn();
- TColStd_MapOfInteger aMap1;
+ SMESHDS_GroupBase* groupDS1 = 0;
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( theGroup1 ))
+ groupDS1 = grp_i->GetGroupDS();
- for ( int i1 = 0, n1 = anIds1->length(); i1 < n1; i1++ )
- aMap1.Add( anIds1[ i1 ] );
+ SMESHDS_GroupBase* groupDS2 = 0;
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( theGroup2 ))
+ groupDS2 = grp_i->GetGroupDS();
- TColStd_SequenceOfInteger aSeq;
- for ( int i2 = 0, n2 = anIds2->length(); i2 < n2; i2++ )
- if ( aMap1.Contains( anIds2[ i2 ] ) )
- aSeq.Append( anIds2[ i2 ] );
-
- SMESH::long_array_var aResIds = new SMESH::long_array;
- aResIds->length( aSeq.Length() );
- for ( size_t resI = 0, resN = aSeq.Length(); resI < resN; resI++ )
- aResIds[ resI ] = aSeq( resI + 1 );
- aResGrp->Add( aResIds );
+ SMESHDS_Group* resGroupDS = 0;
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( aResGrp ))
+ resGroupDS = dynamic_cast<SMESHDS_Group*>( grp_i->GetGroupDS() );
+ if ( groupDS1 && groupDS2 && resGroupDS && !groupDS2->IsEmpty() )
+ {
+ SMDS_ElemIteratorPtr elemIt1 = groupDS1->GetElements();
+ while ( elemIt1->more() )
+ {
+ const SMDS_MeshElement* e = elemIt1->next();
+ if ( groupDS2->Contains( e ))
+ resGroupDS->SMDSGroup().Add( e );
+ }
+ }
// Update Python script
- pyDump << aResGrp << " = " << _this() << ".IntersectGroups( "
+ pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var(_this()) << ".IntersectGroups( "
<< theGroup1 << ", " << theGroup2 << ", '" << theName << "')";
SMESH_CATCH( SMESH::throwCorbaException );
SMESH::SMESH_Group_var aResGrp;
SMESH_TRY;
+
if ( _preMeshInfo )
_preMeshInfo->FullLoadFromFile();
if ( !theName )
return SMESH::SMESH_Group::_nil();
- NCollection_DataMap< int, int > anIdToCount;
+ // check types and get SMESHDS_GroupBase's
SMESH::ElementType aType = SMESH::ALL;
+ vector< SMESHDS_GroupBase* > groupVec;
for ( int g = 0, n = theGroups.length(); g < n; g++ )
{
SMESH::SMESH_GroupBase_var aGrp = theGroups[ g ];
if ( CORBA::is_nil( aGrp ) )
continue;
-
- // check type
- SMESH::ElementType aCurrType = aGrp->GetType();
if ( aType == SMESH::ALL )
- aType = aCurrType;
- else
- {
- if ( aType != aCurrType )
- return SMESH::SMESH_Group::_nil();
- }
+ aType = aGrp->GetType();
+ else if ( aType != aGrp->GetType() )
+ THROW_SALOME_CORBA_EXCEPTION("IntersectListOfGroups(): different group types",
+ SALOME::BAD_PARAM);
- // calculates number of occurance ids in groups
- SMESH::long_array_var aCurrIds = aGrp->GetListOfID();
- for ( int i = 0, n = aCurrIds->length(); i < n; i++ )
- {
- int aCurrId = aCurrIds[ i ];
- if ( !anIdToCount.IsBound( aCurrId ) )
- anIdToCount.Bind( aCurrId, 1 );
- else
- anIdToCount( aCurrId ) = anIdToCount( aCurrId ) + 1;
- }
- }
-
- // create map of ids
- int nbGrp = theGroups.length();
- vector< int > anIds;
- NCollection_DataMap< int, int >::Iterator anIter( anIdToCount );
- for ( ; anIter.More(); anIter.Next() )
- {
- int aCurrId = anIter.Key();
- int aCurrNb = anIter.Value();
- if ( aCurrNb == nbGrp )
- anIds.push_back( aCurrId );
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( aGrp ))
+ if ( SMESHDS_GroupBase* grpDS = grp_i->GetGroupDS() )
+ {
+ if ( grpDS->IsEmpty() )
+ {
+ groupVec.clear();
+ break;
+ }
+ groupVec.push_back( grpDS );
+ }
}
+ if ( aType == SMESH::ALL ) // all groups are nil
+ return SMESH::SMESH_Group::_nil();
TPythonDump pyDump;
- // Create group
+ // Create a group
aResGrp = CreateGroup( aType, theName );
- if ( aResGrp->_is_nil() )
- return SMESH::SMESH_Group::_nil();
- // Create array of identifiers
- SMESH::long_array_var aResIds = new SMESH::long_array;
- aResIds->length( anIds.size() );
+ SMESHDS_Group* resGroupDS = 0;
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( aResGrp ))
+ resGroupDS = dynamic_cast<SMESHDS_Group*>( grp_i->GetGroupDS() );
+ if ( !resGroupDS || groupVec.empty() )
+ return aResGrp._retn();
+
+ // Fill the group
+ size_t i, nb = groupVec.size();
+ SMDS_ElemIteratorPtr elemIt1 = groupVec[0]->GetElements();
+ while ( elemIt1->more() )
+ {
+ const SMDS_MeshElement* e = elemIt1->next();
+ bool inAll = true;
+ for ( i = 1; ( i < nb && inAll ); ++i )
+ inAll = groupVec[i]->Contains( e );
- for ( size_t i = 0; i<anIds.size(); i++ )
- aResIds[ i ] = anIds[i];
- aResGrp->Add( aResIds );
+ if ( inAll )
+ resGroupDS->SMDSGroup().Add( e );
+ }
// Update Python script
- pyDump << aResGrp << " = " << _this() << ".IntersectListOfGroups( "
- << &theGroups << ", '" << theName << "' )";
+ pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var( _this() )
+ << ".IntersectListOfGroups( " << theGroups << ", '" << theName << "' )";
SMESH_CATCH( SMESH::throwCorbaException );
}
//=============================================================================
-/*! CutGroups
+/*!
* New group is created. All mesh elements that are present in
- * main group but do not present in tool group are added to the new one
+ * a main group but is not present in a tool group are added to the new one
*/
//=============================================================================
+
SMESH::SMESH_Group_ptr SMESH_Mesh_i::CutGroups( SMESH::SMESH_GroupBase_ptr theGroup1,
SMESH::SMESH_GroupBase_ptr theGroup2,
const char* theName )
SMESH::SMESH_Group_var aResGrp;
SMESH_TRY;
+
if ( _preMeshInfo )
_preMeshInfo->FullLoadFromFile();
- if ( theGroup1->_is_nil() || theGroup2->_is_nil() ||
- theGroup1->GetType() != theGroup2->GetType() )
- return SMESH::SMESH_Group::_nil();
-
+ if ( theGroup1->_is_nil() || theGroup2->_is_nil() )
+ THROW_SALOME_CORBA_EXCEPTION("CutGroups(): NULL Group",
+ SALOME::BAD_PARAM);
+ if ( theGroup1->GetType() != theGroup2->GetType() )
+ THROW_SALOME_CORBA_EXCEPTION("CutGroups(): different group types",
+ SALOME::BAD_PARAM);
TPythonDump pyDump;
- // Perform Cutting
aResGrp = CreateGroup( theGroup1->GetType(), theName );
if ( aResGrp->_is_nil() )
- return aResGrp;
-
- SMESH::long_array_var anIds1 = theGroup1->GetListOfID();
- SMESH::long_array_var anIds2 = theGroup2->GetListOfID();
-
- TColStd_MapOfInteger aMap2;
+ return aResGrp._retn();
- for ( int i2 = 0, n2 = anIds2->length(); i2 < n2; i2++ )
- aMap2.Add( anIds2[ i2 ] );
+ SMESHDS_GroupBase* groupDS1 = 0;
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( theGroup1 ))
+ groupDS1 = grp_i->GetGroupDS();
- TColStd_SequenceOfInteger aSeq;
- for ( int i1 = 0, n1 = anIds1->length(); i1 < n1; i1++ )
- if ( !aMap2.Contains( anIds1[ i1 ] ) )
- aSeq.Append( anIds1[ i1 ] );
+ SMESHDS_GroupBase* groupDS2 = 0;
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( theGroup2 ))
+ groupDS2 = grp_i->GetGroupDS();
- SMESH::long_array_var aResIds = new SMESH::long_array;
- aResIds->length( aSeq.Length() );
-
- for ( int resI = 0, resN = aSeq.Length(); resI < resN; resI++ )
- aResIds[ resI ] = aSeq( resI + 1 );
- aResGrp->Add( aResIds );
+ SMESHDS_Group* resGroupDS = 0;
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( aResGrp ))
+ resGroupDS = dynamic_cast<SMESHDS_Group*>( grp_i->GetGroupDS() );
+ if ( groupDS1 && groupDS2 && resGroupDS )
+ {
+ SMDS_ElemIteratorPtr elemIt1 = groupDS1->GetElements();
+ while ( elemIt1->more() )
+ {
+ const SMDS_MeshElement* e = elemIt1->next();
+ if ( !groupDS2->Contains( e ))
+ resGroupDS->SMDSGroup().Add( e );
+ }
+ }
// Update Python script
- pyDump << aResGrp << " = " << _this() << ".CutGroups( "
- << theGroup1 << ", " << theGroup2 << ", '"
- << theName << "' )";
+ pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var(_this()) << ".CutGroups( "
+ << theGroup1 << ", " << theGroup2 << ", '" << theName << "')";
SMESH_CATCH( SMESH::throwCorbaException );
SMESH::SMESH_Group_var aResGrp;
SMESH_TRY;
+
if ( _preMeshInfo )
_preMeshInfo->FullLoadFromFile();
if ( !theName )
return SMESH::SMESH_Group::_nil();
- set< int > aToolIds;
+ // check types and get SMESHDS_GroupBase's
SMESH::ElementType aType = SMESH::ALL;
- int g, n;
- // iterate through tool groups
- for ( g = 0, n = theToolGroups.length(); g < n; g++ )
+ vector< SMESHDS_GroupBase* > toolGroupVec;
+ vector< SMDS_ElemIteratorPtr > mainIterVec;
+
+ for ( int g = 0, n = theMainGroups.length(); g < n; g++ )
{
- SMESH::SMESH_GroupBase_var aGrp = theToolGroups[ g ];
+ SMESH::SMESH_GroupBase_var aGrp = theMainGroups[ g ];
if ( CORBA::is_nil( aGrp ) )
continue;
-
- // check type
- SMESH::ElementType aCurrType = aGrp->GetType();
if ( aType == SMESH::ALL )
- aType = aCurrType;
- else
- {
- if ( aType != aCurrType )
- return SMESH::SMESH_Group::_nil();
- }
-
- // unite tool ids
- SMESH::long_array_var aCurrIds = aGrp->GetListOfID();
- for ( int i = 0, n = aCurrIds->length(); i < n; i++ )
- {
- int aCurrId = aCurrIds[ i ];
- aToolIds.insert( aCurrId );
- }
+ aType = aGrp->GetType();
+ else if ( aType != aGrp->GetType() )
+ THROW_SALOME_CORBA_EXCEPTION("UnionListOfGroups(): different group types",
+ SALOME::BAD_PARAM);
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( aGrp ))
+ if ( SMESHDS_GroupBase* grpDS = grp_i->GetGroupDS() )
+ if ( !grpDS->IsEmpty() )
+ mainIterVec.push_back( grpDS->GetElements() );
}
+ if ( aType == SMESH::ALL ) // all main groups are nil
+ return SMESH::SMESH_Group::_nil();
+ if ( mainIterVec.empty() ) // all main groups are empty
+ return aResGrp._retn();
- vector< int > anIds; // result
-
- // Iterate through main group
- for ( g = 0, n = theMainGroups.length(); g < n; g++ )
+ for ( int g = 0, n = theToolGroups.length(); g < n; g++ )
{
- SMESH::SMESH_GroupBase_var aGrp = theMainGroups[ g ];
+ SMESH::SMESH_GroupBase_var aGrp = theToolGroups[ g ];
if ( CORBA::is_nil( aGrp ) )
continue;
-
- // check type
- SMESH::ElementType aCurrType = aGrp->GetType();
- if ( aType == SMESH::ALL )
- aType = aCurrType;
- else
- {
- if ( aType != aCurrType )
- return SMESH::SMESH_Group::_nil();
- }
-
- // unite tool ids
- SMESH::long_array_var aCurrIds = aGrp->GetListOfID();
- for ( int i = 0, n = aCurrIds->length(); i < n; i++ )
- {
- int aCurrId = aCurrIds[ i ];
- if ( !aToolIds.count( aCurrId ) )
- anIds.push_back( aCurrId );
- }
+ if ( aType != aGrp->GetType() )
+ THROW_SALOME_CORBA_EXCEPTION("UnionListOfGroups(): different group types",
+ SALOME::BAD_PARAM);
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( aGrp ))
+ if ( SMESHDS_GroupBase* grpDS = grp_i->GetGroupDS() )
+ toolGroupVec.push_back( grpDS );
}
TPythonDump pyDump;
- // Create group
+ // Create a group
aResGrp = CreateGroup( aType, theName );
- if ( aResGrp->_is_nil() )
- return SMESH::SMESH_Group::_nil();
- // Create array of identifiers
- SMESH::long_array_var aResIds = new SMESH::long_array;
- aResIds->length( anIds.size() );
+ SMESHDS_Group* resGroupDS = 0;
+ if ( SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( aResGrp ))
+ resGroupDS = dynamic_cast<SMESHDS_Group*>( grp_i->GetGroupDS() );
+ if ( !resGroupDS )
+ return aResGrp._retn();
+
+ // Fill the group
+ size_t i, nb = toolGroupVec.size();
+ SMDS_ElemIteratorPtr mainElemIt
+ ( new SMDS_IteratorOnIterators
+ < const SMDS_MeshElement*, vector< SMDS_ElemIteratorPtr > >( mainIterVec ));
+ while ( mainElemIt->more() )
+ {
+ const SMDS_MeshElement* e = mainElemIt->next();
+ bool isIn = false;
+ for ( i = 0; ( i < nb && !isIn ); ++i )
+ isIn = toolGroupVec[i]->Contains( e );
- for (int i=0; i<anIds.size(); i++ )
- aResIds[ i ] = anIds[i];
- aResGrp->Add( aResIds );
+ if ( !isIn )
+ resGroupDS->SMDSGroup().Add( e );
+ }
// Update Python script
- pyDump << aResGrp << " = " << _this() << ".CutListOfGroups( "
- << &theMainGroups << ", " << &theToolGroups << ", '"
- << theName << "' )";
+ pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var( _this() )
+ << ".CutListOfGroups( " << theMainGroups
+ << theToolGroups << ", '" << theName << "' )";
SMESH_CATCH( SMESH::throwCorbaException );
}
// Update Python script
- pyDump << aResGrp << " = " << _this() << ".CreateDimGroup( "
- << &theGroups << ", " << theElemType << ", '" << theName << "' )";
+ pyDump << aResGrp << " = " << SMESH::SMESH_Mesh_var( _this())
+ << ".CreateDimGroup( "
+ << theGroups << ", " << theElemType << ", '" << theName << "' )";
SMESH_CATCH( SMESH::throwCorbaException );
if ( CORBA::is_nil( theGeomObj ) || theGeomObj->GetType() != GEOM_GROUP )
return;
// group SO
- SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
+ SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
SALOMEDS::SObject_wrap groupSO = _gen_i->ObjectToSObject( study, theGeomObj );
if ( groupSO->_is_nil() )
return;
for ( int i = 0; i < ids->length(); ++i )
groupData._indices.insert( ids[i] );
// SMESH object
- groupData._smeshObject = theSmeshObj;
+ groupData._smeshObject = CORBA::Object::_duplicate( theSmeshObj );
}
//================================================================================
GEOM_Client* geomClient = _gen_i->GetShapeReader();
if ( !geomClient ) return newShape;
- TCollection_AsciiString groupIOR = geomGen->GetStringFromIOR( geomGroup );
- geomClient->RemoveShapeFromBuffer( groupIOR );
+ CORBA::String_var groupIOR = geomGen->GetStringFromIOR( geomGroup );
+ geomClient->RemoveShapeFromBuffer( groupIOR.in() );
newShape = _gen_i->GeomObjectToShape( geomGroup );
}
if ( !submesh->_is_nil() ) // -------------- Sub mesh ---------------------
{
int oldID = submesh->GetId();
- if ( _mapSubMeshIor.find( oldID ) == _mapSubMeshIor.end() )
+ if ( !_mapSubMeshIor.count( oldID ))
continue;
TopoDS_Shape oldShape = _mapSubMesh[oldID]->GetSubShape();
if ( theGroup->_is_nil() )
return aGroup._retn();
- SMESH_GroupBase_i* aGroupToRem =
- dynamic_cast<SMESH_GroupBase_i*>( SMESH_Gen_i::GetServant( theGroup ).in() );
+ SMESH_GroupBase_i* aGroupToRem = SMESH::DownCast<SMESH_GroupBase_i*>( theGroup );
if ( !aGroupToRem )
return aGroup._retn();
const bool isOnFilter = ( SMESH::DownCast< SMESH_GroupOnFilter_i* > ( theGroup ));
- int anId = aGroupToRem->GetLocalID();
+ const int anId = aGroupToRem->GetLocalID();
if ( !_impl->ConvertToStandalone( anId ) )
return aGroup._retn();
removeGeomGroupData( theGroup );
SMESH_GroupBase_i* aGroupImpl = new SMESH_Group_i( SMESH_Gen_i::GetPOA(), this, anId );
// remove old instance of group from own map
+ { SMESH::SMESH_GroupBase_var var( _mapGroups[anId] ); } // decref CORBA object
_mapGroups.erase( anId );
SALOMEDS::StudyBuilder_var builder;
- SALOMEDS::SObject_wrap aGroupSO;
+ SALOMEDS::SObject_wrap aGroupSO;
SALOMEDS::Study_var aStudy = _gen_i->GetCurrentStudy();
if ( !aStudy->_is_nil() ) {
builder = aStudy->NewBuilder();
builder->RemoveObject( chItr->Value() );
// Update Python script
- TPythonDump() << aGroupSO << " = " << _this() << ".ConvertToStandalone( "
- << aGroupSO << " )";
+ TPythonDump() << aGroupSO << " = " << SMESH::SMESH_Mesh_var(_this())
+ << ".ConvertToStandalone( " << aGroupSO << " )";
// change icon of Group on Filter
if ( isOnFilter )
_gen_i->RegisterObject( aGroup );
CORBA::String_var ior = _gen_i->GetORB()->object_to_string( aGroup );
- builder->SetIOR( aGroupSO, ior.in() );
+ builder->SetIOR( aGroupSO, ior.in() ); // == aGroup->Register();
+ //aGroup->Register();
+ aGroupToRem->UnRegister();
SMESH_CATCH( SMESH::throwCorbaException );
SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::createSubMesh( GEOM::GEOM_Object_ptr theSubShapeObject )
{
if(MYDEBUG) MESSAGE( "createSubMesh" );
- TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape(theSubShapeObject);
-
+ TopoDS_Shape myLocSubShape = _gen_i->GeomObjectToShape(theSubShapeObject);
::SMESH_subMesh * mySubMesh = _impl->GetSubMesh(myLocSubShape);
- int subMeshId = _impl->GetMeshDS()->ShapeToIndex( myLocSubShape );
- SMESH_subMesh_i *subMeshServant = new SMESH_subMesh_i(myPOA, _gen_i, this, subMeshId);
- SMESH::SMESH_subMesh_var subMesh
- = SMESH::SMESH_subMesh::_narrow(subMeshServant->_this());
+ const int subMeshId = mySubMesh->GetId();
+
+ SMESH_subMesh_i * subMeshServant = new SMESH_subMesh_i(myPOA, _gen_i, this, subMeshId);
+ SMESH::SMESH_subMesh_var subMesh = subMeshServant->_this();
+
+ _mapSubMesh [subMeshId] = mySubMesh;
+ _mapSubMesh_i [subMeshId] = subMeshServant;
+ _mapSubMeshIor[subMeshId] = SMESH::SMESH_subMesh::_duplicate( subMesh );
- _mapSubMesh[subMeshId] = mySubMesh;
- _mapSubMesh_i[subMeshId] = subMeshServant;
- _mapSubMeshIor[subMeshId] = SMESH::SMESH_subMesh::_duplicate(subMesh);
+ subMeshServant->Register();
// register CORBA object for persistence
int nextId = _gen_i->RegisterObject( subMesh );
if(MYDEBUG) { MESSAGE( "Add submesh to map with id = "<< nextId); }
- else { nextId = 0; } // avoid "unused variable" warning in release mode
+ else { nextId = 0; } // avoid "unused variable" warning
// to track changes of GEOM groups
addGeomGroupData( theSubShapeObject, subMesh );
return SMESH::SMESH_subMesh::_duplicate( (*it).second );
}
-
//=============================================================================
/*!
*
if ( theSubMesh->_is_nil() /*|| theSubShapeObject->_is_nil()*/ )
return isHypChanged;
+ const int subMeshId = theSubMesh->GetId();
+
if ( theSubShapeObject->_is_nil() ) // not published shape (IPAL13617)
{
- CORBA::Long shapeId = theSubMesh->GetId();
- if ( _mapSubMesh.find( shapeId ) != _mapSubMesh.end())
+ if ( _mapSubMesh.find( subMeshId ) != _mapSubMesh.end())
{
- TopoDS_Shape S = _mapSubMesh[ shapeId ]->GetSubShape();
+ TopoDS_Shape S = _mapSubMesh[ subMeshId ]->GetSubShape();
if ( !S.IsNull() )
{
list<const SMESHDS_Hypothesis*> hyps = _impl->GetHypothesisList( S );
}
removeGeomGroupData( theSubShapeObject );
}
- int subMeshId = theSubMesh->GetId();
+
+ // remove a servant
+ std::map<int, SMESH_subMesh_i*>::iterator id_smi = _mapSubMesh_i.find( subMeshId );
+ if ( id_smi != _mapSubMesh_i.end() )
+ id_smi->second->UnRegister();
+
+ // remove a CORBA object
+ std::map<int, SMESH::SMESH_subMesh_ptr>::iterator id_smptr = _mapSubMeshIor.find( subMeshId );
+ if ( id_smptr != _mapSubMeshIor.end() )
+ SMESH::SMESH_subMesh_var( id_smptr->second );
_mapSubMesh.erase(subMeshId);
_mapSubMesh_i.erase(subMeshId);
std::set< std::string > presentNames;
std::map<int, SMESH::SMESH_GroupBase_ptr>::const_iterator i_gr = _mapGroups.begin();
for ( ; i_gr != _mapGroups.end(); ++i_gr )
- presentNames.insert( i_gr->second->GetName() );
+ {
+ CORBA::String_var name = i_gr->second->GetName();
+ presentNames.insert( name.in() );
+ }
do {
newName = "noname_Group_" + SMESH_Comment( presentNames.size() + 1 );
} while ( !presentNames.insert( newName ).second );
else
aGroupImpl = new SMESH_Group_i( SMESH_Gen_i::GetPOA(), this, anId );
- aGroup = SMESH::SMESH_GroupBase::_narrow( aGroupImpl->_this() );
+ aGroup = aGroupImpl->_this();
_mapGroups[anId] = SMESH::SMESH_GroupBase::_duplicate( aGroup );
+ aGroupImpl->Register();
// register CORBA object for persistence
int nextId = _gen_i->RegisterObject( aGroup );
{
if(MYDEBUG) MESSAGE("SMESH_Mesh_i::removeGroup()" );
if ( _mapGroups.find( theId ) != _mapGroups.end() ) {
- SMESH::SMESH_GroupBase_ptr group = _mapGroups[theId];
+ SMESH::SMESH_GroupBase_var group = _mapGroups[theId];
_mapGroups.erase( theId );
removeGeomGroupData( group );
- if (! _impl->RemoveGroup( theId ))
+ if ( !_impl->RemoveGroup( theId ))
{
// it seems to be a call up from _impl caused by hyp modification (issue 0020918)
RemoveGroup( group );
}
+ group->UnRegister();
}
}
_preMeshInfo->FullLoadFromFile();
// Create MeshEditor
- SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( this, false );
- aMeshEdVar = aMeshEditor->_this();
+ if ( !_editor )
+ _editor = new SMESH_MeshEditor_i( this, false );
+ aMeshEdVar = _editor->_this();
// Update Python script
- TPythonDump() << aMeshEditor << " = " << _this() << ".GetMeshEditor()";
+ TPythonDump() << _editor << " = "
+ << SMESH::SMESH_Mesh_var(_this()) << ".GetMeshEditor()";
SMESH_CATCH( SMESH::throwCorbaException );
if ( _preMeshInfo )
_preMeshInfo->FullLoadFromFile();
- SMESH_MeshEditor_i *aMeshEditor = new SMESH_MeshEditor_i( this, true );
- aMeshEdVar = aMeshEditor->_this();
+ if ( !_previewEditor )
+ _previewEditor = new SMESH_MeshEditor_i( this, true );
+ aMeshEdVar = _previewEditor->_this();
SMESH_CATCH( SMESH::throwCorbaException );
_impl->SetAutoColor(theAutoColor);
TPythonDump pyDump; // not to dump group->SetColor() from below code
- pyDump<<_this()<<".SetAutoColor( "<<theAutoColor<<" )";
+ pyDump << SMESH::SMESH_Mesh_var(_this()) <<".SetAutoColor( "<<theAutoColor<<" )";
std::list<SALOMEDS::Color> aReservedColors;
map<int, SMESH::SMESH_GroupBase_ptr>::iterator it = _mapGroups.begin();
}
// Update Python script
// set name of mesh before export
- TPythonDump() << _gen_i << ".SetName(" << _this() << ", '" << aMeshName.c_str() << "')";
+ TPythonDump() << _gen_i << ".SetName("
+ << SMESH::SMESH_Mesh_var(_this()) << ", '" << aMeshName.c_str() << "')";
// check names of groups
checkGroupNames();
CORBA::Boolean autoDimension)
throw(SALOME::SALOME_Exception)
{
- Unexpect aCatch(SALOME_SalomeException);
+ SMESH_TRY;
if ( _preMeshInfo )
_preMeshInfo->FullLoadFromFile();
string aMeshName = prepareMeshNameAndGroups(file, overwrite);
- TPythonDump() << _this() << ".ExportToMEDX( r'"
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportToMEDX( r'"
<< file << "', " << auto_groups << ", "
<< theVersion << ", " << overwrite << ", "
<< autoDimension << " )";
_impl->ExportMED( file, aMeshName.c_str(), auto_groups, theVersion, 0, autoDimension );
+
+ SMESH_CATCH( SMESH::throwCorbaException );
}
//================================================================================
_preMeshInfo->FullLoadFromFile();
string aMeshName = prepareMeshNameAndGroups(file, true);
- TPythonDump() << _this() << ".ExportSAUV( r'" << file << "', " << auto_groups << " )";
+ TPythonDump() << SMESH::SMESH_Mesh_var( _this())
+ << ".ExportSAUV( r'" << file << "', " << auto_groups << " )";
_impl->ExportSAUV(file, aMeshName.c_str(), auto_groups);
}
// Update Python script
// check names of groups
checkGroupNames();
- TPythonDump() << _this() << ".ExportDAT( r'" << file << "' )";
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportDAT( r'" << file << "' )";
// Perform Export
PrepareForWriting(file);
// Update Python script
// check names of groups
checkGroupNames();
- TPythonDump() << _this() << ".ExportUNV( r'" << file << "' )";
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportUNV( r'" << file << "' )";
// Perform Export
PrepareForWriting(file);
// Update Python script
// check names of groups
checkGroupNames();
- TPythonDump() << _this() << ".ExportSTL( r'" << file << "', " << isascii << " )";
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this())
+ << ".ExportSTL( r'" << file << "', " << isascii << " )";
// Perform Export
PrepareForWriting(file);
SMESH_MeshPartDS partDS( meshPart );
_impl->ExportMED( file, aMeshName.c_str(), auto_groups, version, &partDS, autoDimension );
}
- pyDump << _this() << ".ExportPartToMED( " << meshPart << ", r'" << file << "', "
+ pyDump << SMESH::SMESH_Mesh_var(_this()) << ".ExportPartToMED( "
+ << meshPart << ", r'" << file << "', "
<< auto_groups << ", " << version << ", " << overwrite << ", "
<< autoDimension << " )";
}
SMESH_MeshPartDS partDS( meshPart );
_impl->ExportDAT(file,&partDS);
- TPythonDump() << _this() << ".ExportPartToDAT( " << meshPart << ", r'" << file << "' )";
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this())
+ << ".ExportPartToDAT( " << meshPart << ", r'" << file << "' )";
}
//================================================================================
/*!
SMESH_MeshPartDS partDS( meshPart );
_impl->ExportUNV(file, &partDS);
- TPythonDump() << _this() << ".ExportPartToUNV( " << meshPart<< ", r'" << file << "' )";
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this())
+ << ".ExportPartToUNV( " << meshPart<< ", r'" << file << "' )";
}
//================================================================================
/*!
SMESH_MeshPartDS partDS( meshPart );
_impl->ExportSTL(file, isascii, &partDS);
- TPythonDump() << _this() << ".ExportPartToSTL( "
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportPartToSTL( "
<< meshPart<< ", r'" << file << "', " << isascii << ")";
}
SMESH_MeshPartDS partDS( meshPart );
_impl->ExportCGNS(file, &partDS);
- TPythonDump() << _this() << ".ExportCGNS( "
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportCGNS( "
<< meshPart<< ", r'" << file << "', " << overwrite << ")";
#else
THROW_SALOME_CORBA_EXCEPTION("CGNS library is unavailable", SALOME::INTERNAL_ERROR);
SMESH_MeshPartDS partDS( meshPart );
_impl->ExportGMF(file, &partDS, withRequiredGroups);
- TPythonDump() << _this() << ".ExportGMF( "
+ TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportGMF( "
<< meshPart<< ", r'"
<< file << "', "
<< withRequiredGroups << ")";
//=============================================================================
SMESH::long_array* SMESH_Mesh_i::GetElementsId()
- throw (SALOME::SALOME_Exception)
+ throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
if ( _preMeshInfo )
int i = 0;
- SMDS_ElemIteratorPtr anIt = aSMESHDS_Mesh->elementsIterator();
- while ( i < nbElements && anIt->more() ) {
- const SMDS_MeshElement* anElem = anIt->next();
- if ( theElemType == SMESH::ALL || anElem->GetType() == (SMDSAbs_ElementType)theElemType )
- aResult[i++] = anElem->GetID();
- }
+ SMDS_ElemIteratorPtr anIt = aSMESHDS_Mesh->elementsIterator( (SMDSAbs_ElementType)theElemType );
+ while ( i < nbElements && anIt->more() )
+ aResult[i++] = anIt->next()->GetID();
aResult->length( i );
return aResult._retn();
}
-
//=============================================================================
/*!
* Returns ID of nodes for given submesh
* returns only nodes on shapes.
*/
//=============================================================================
+
SMESH::long_array* SMESH_Mesh_i::GetSubMeshNodesId(const CORBA::Long ShapeID,
CORBA::Boolean all)
throw (SALOME::SALOME_Exception)
groups[ ++iG ] = createGroup( SMESH::ElementType(i), theGroupName );
if ( _gen_i->CanPublishInStudy( groups[ iG ] ))
{
+ SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
+ SMESH::SMESH_Mesh_var mesh = _this();
SALOMEDS::SObject_wrap aSO =
- _gen_i->PublishGroup(_gen_i->GetCurrentStudy(), _this(), groups[ iG ],
+ _gen_i->PublishGroup( study, mesh, groups[ iG ],
GEOM::GEOM_Object::_nil(), theGroupName);
aSO->_is_nil(); // avoid "unused variable" warning
}
void SMESH_Mesh_i::CreateGroupServants()
{
- SALOMEDS::Study_var aStudy = _gen_i->GetCurrentStudy();
+ SALOMEDS::Study_var aStudy = _gen_i->GetCurrentStudy();
+ SMESH::SMESH_Mesh_var aMesh = _this();
set<int> addedIDs;
::SMESH_Mesh::GroupIteratorPtr groupIt = _impl->GetGroups();
aGroupImpl = new SMESH_Group_i( SMESH_Gen_i::GetPOA(), this, anId );
}
- SMESH::SMESH_GroupBase_var groupVar =
- SMESH::SMESH_GroupBase::_narrow( aGroupImpl->_this() );
+ SMESH::SMESH_GroupBase_var groupVar = aGroupImpl->_this();
_mapGroups[anId] = SMESH::SMESH_GroupBase::_duplicate( groupVar );
+ aGroupImpl->Register();
// register CORBA object for persistence
int nextId = _gen_i->RegisterObject( groupVar );
// publishing the groups in the study
if ( !aStudy->_is_nil() ) {
GEOM::GEOM_Object_var shapeVar = _gen_i->ShapeToGeomObject( shape );
- _gen_i->PublishGroup( aStudy, _this(), groupVar, shapeVar, groupVar->GetName());
+ _gen_i->PublishGroup( aStudy, aMesh, groupVar, shapeVar, group->GetName());
}
}
if ( !addedIDs.empty() )
{
map<int, SMESH::SMESH_GroupBase_ptr>::iterator it = _mapGroups.find(*id);
int i = std::distance( _mapGroups.begin(), it );
- TPythonDump() << it->second << " = " << _this() << ".GetGroups()[ "<< i << " ]";
+ TPythonDump() << it->second << " = " << aMesh << ".GetGroups()[ "<< i << " ]";
}
}
}
* \brief Returns list of notebook variables used for Mesh operations separated by ":" symbol
*/
//=============================================================================
+
char* SMESH_Mesh_i::GetParameters()
{
- SMESH_Gen_i *gen = SMESH_Gen_i::GetSMESHGen();
- return CORBA::string_dup(gen->GetParameters(SMESH::SMESH_Mesh::_narrow(_this())));
+ return SMESH_Gen_i::GetSMESHGen()->GetParameters( SMESH::SMESH_Mesh_var( _this()) );
}
//=============================================================================
SMESH::string_array_var aResult = new SMESH::string_array();
SMESH_Gen_i *gen = SMESH_Gen_i::GetSMESHGen();
if(gen) {
- char *aParameters = GetParameters();
- SALOMEDS::Study_var aStudy = gen->GetCurrentStudy();
- if(!aStudy->_is_nil()) {
+ CORBA::String_var aParameters = GetParameters();
+ SALOMEDS::Study_var aStudy = gen->GetCurrentStudy();
+ if ( !aStudy->_is_nil()) {
SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(aParameters);
if(aSections->length() > 0) {
SALOMEDS::ListOfStrings aVars = aSections[aSections->length()-1];
::SMESH_Mesh& mesh = GetImpl();
TPythonDump aPythonDump; // prevent dump of called methods
- aPythonDump << "isDone = " << _this() << ".SetMeshOrder( [ ";
+ aPythonDump << "isDone = " << SMESH::SMESH_Mesh_var(_this()) << ".SetMeshOrder( [ ";
TListOfListOfInt subMeshOrder;
for ( int i = 0, n = theSubMeshArray.length(); i < n; i++ )
if ( theIsDump ) {
// finilise python dump
aPythonDump << " ]";
- aPythonDump << " = " << _this() << ".GetMeshOrder()";
+ aPythonDump << " = " << SMESH::SMESH_Mesh_var(_this()) << ".GetMeshOrder()";
}
}
#include "SMESH.hxx"
+#include "SMESH_Hypothesis.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_subMesh.hxx"
+
+#include <SALOME_GenericObj_i.hh>
#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(SMESH_Gen)
#include CORBA_SERVER_HEADER(SMESH_Mesh)
#include CORBA_SERVER_HEADER(SMESH_Hypothesis)
#include CORBA_CLIENT_HEADER(GEOM_Gen)
-#include "SMESH_Hypothesis.hxx"
-#include "SMESH_Mesh.hxx"
-#include "SMESH_subMesh.hxx"
-
-#include "SALOME_GenericObj_i.hh"
+#include <map>
class SMESH_Gen_i;
class SMESH_GroupBase_i;
class SMESH_subMesh_i;
class SMESH_PreMeshInfo;
-
-#include <map>
+class SMESH_MeshEditor_i;
class SMESH_I_EXPORT SMESH_Mesh_i:
public virtual POA_SMESH::SMESH_Mesh,
std::map<int, SMESH::SMESH_subMesh_ptr> _mapSubMeshIor;
std::map<int, SMESH::SMESH_GroupBase_ptr> _mapGroups;
std::map<int, SMESH::SMESH_Hypothesis_ptr> _mapHypo;
+ SMESH_MeshEditor_i* _editor;
+ SMESH_MeshEditor_i* _previewEditor;
SMESH::MedFileInfo_var _medFileInfo;
SMESH_PreMeshInfo* _preMeshInfo; // mesh info before full loading from study file
// number of items in a group varies (1) <-> (>1)
std::string _groupEntry;
std::set<int> _indices; // indices of group items within group's main shape
- CORBA::Object_ptr _smeshObject; // SMESH object depending on GEOM group
+ CORBA::Object_var _smeshObject; // SMESH object depending on GEOM group
};
std::list<TGeomGroupData> _geomGroupData;
*/
void removeGeomGroupData(CORBA::Object_ptr theSmeshObj);
/*!
- * \brief Return new group contents if it has been changed and update group data
+ * Return new group contents if it has been changed and update group data
*/
TopoDS_Shape newGroupShape( TGeomGroupData & groupData);
if (( aSubMeshDS = aSubMesh->GetSubMeshDS() ))
nbNodes += aSubMeshDS->NbNodes();
}
+ return nbNodes;
}
return aSubMeshDS ? aSubMeshDS->NbNodes() : 0;
SMESH = None # SMESH module is loaded only when needed
from salome.kernel.studyedit import getStudyEditor
-try:
- from salome.gui import helper
-except ImportError:
- pass
+from salome.kernel.deprecation import is_called_by_sphinx
+if not is_called_by_sphinx():
+ from salome.gui import helper
class SMeshStudyTools:
"""
aMeshes = [ Mesh(self, self.geompyD, m) for m in aSmeshMeshes ]
return aMeshes, aStatus
- ## Creates a Mesh object importing data from the given GMF file
+ ## Creates a Mesh object importing data from the given GMF file.
+ # GMF files have .mesh extension for the ASCII format and .meshb for
+ # the bynary format.
# @return [ an instance of Mesh class, SMESH.ComputeError ]
# @ingroup l2_impexp
def CreateMeshesFromGMF( self, theFileName ):
if not hasattr(src1, "_narrow"): return None
src1 = src1._narrow(SMESH.SMESH_IDSource)
if not src1: return None
+ unRegister = genObjUnRegister()
if id1 != 0:
m = src1.GetMesh()
e = m.GetMeshEditor()
src1 = e.MakeIDSource([id1], SMESH.FACE)
else:
src1 = e.MakeIDSource([id1], SMESH.NODE)
+ unRegister.set( src1 )
pass
if hasattr(src2, "_narrow"):
src2 = src2._narrow(SMESH.SMESH_IDSource)
src2 = e.MakeIDSource([id2], SMESH.FACE)
else:
src2 = e.MakeIDSource([id2], SMESH.NODE)
+ unRegister.set( src2 )
pass
pass
aMeasurements = self.CreateMeasurements()
+ unRegister.set( aMeasurements )
result = aMeasurements.MinDistance(src1, src2)
- aMeasurements.UnRegister()
return result
## Get bounding box of the specified object(s)
aMeasurements.UnRegister()
return result
+ ## Get sum of lengths of all 1D elements in the mesh object.
+ # @param elemId obj mesh, submesh or group
+ # @return sum of lengths of all 1D elements
+ # @ingroup l1_measurements
+ def GetLength(self, obj):
+ if isinstance(obj, Mesh): obj = obj.mesh
+ if isinstance(obj, Mesh_Algorithm): obj = obj.GetSubMesh()
+ aMeasurements = self.CreateMeasurements()
+ value = aMeasurements.Length(obj)
+ aMeasurements.UnRegister()
+ return value
+
+ ## Get sum of areas of all 2D elements in the mesh object.
+ # @param elemId obj mesh, submesh or group
+ # @return sum of areas of all 2D elements
+ # @ingroup l1_measurements
+ def GetArea(self, obj):
+ if isinstance(obj, Mesh): obj = obj.mesh
+ if isinstance(obj, Mesh_Algorithm): obj = obj.GetSubMesh()
+ aMeasurements = self.CreateMeasurements()
+ value = aMeasurements.Area(obj)
+ aMeasurements.UnRegister()
+ return value
+
+ ## Get sum of volumes of all 3D elements in the mesh object.
+ # @param elemId obj mesh, submesh or group
+ # @return sum of volumes of all 3D elements
+ # @ingroup l1_measurements
+ def GetVolume(self, obj):
+ if isinstance(obj, Mesh): obj = obj.mesh
+ if isinstance(obj, Mesh_Algorithm): obj = obj.GetSubMesh()
+ aMeasurements = self.CreateMeasurements()
+ value = aMeasurements.Volume(obj)
+ aMeasurements.UnRegister()
+ return value
+
+ pass # end of class smeshBuilder
+
import omniORB
#Registering the new proxy for SMESH_Gen
omniORB.registerObjref(SMESH._objref_SMESH_Gen._NP_RepositoryId, smeshBuilder)
def ExportMED(self, f, auto_groups=0, version=MED_V2_2,
overwrite=1, meshPart=None, autoDimension=True):
if meshPart:
+ unRegister = genObjUnRegister()
if isinstance( meshPart, list ):
meshPart = self.GetIDSource( meshPart, SMESH.ALL )
+ unRegister.set( meshPart )
self.mesh.ExportPartToMED( meshPart, f, auto_groups, version, overwrite, autoDimension)
else:
self.mesh.ExportToMEDX(f, auto_groups, version, overwrite, autoDimension)
# @ingroup l2_impexp
def ExportDAT(self, f, meshPart=None):
if meshPart:
+ unRegister = genObjUnRegister()
if isinstance( meshPart, list ):
meshPart = self.GetIDSource( meshPart, SMESH.ALL )
+ unRegister.set( meshPart )
self.mesh.ExportPartToDAT( meshPart, f )
else:
self.mesh.ExportDAT(f)
# @ingroup l2_impexp
def ExportUNV(self, f, meshPart=None):
if meshPart:
+ unRegister = genObjUnRegister()
if isinstance( meshPart, list ):
meshPart = self.GetIDSource( meshPart, SMESH.ALL )
+ unRegister.set( meshPart )
self.mesh.ExportPartToUNV( meshPart, f )
else:
self.mesh.ExportUNV(f)
# @ingroup l2_impexp
def ExportSTL(self, f, ascii=1, meshPart=None):
if meshPart:
+ unRegister = genObjUnRegister()
if isinstance( meshPart, list ):
meshPart = self.GetIDSource( meshPart, SMESH.ALL )
+ unRegister.set( meshPart )
self.mesh.ExportPartToSTL( meshPart, f, ascii )
else:
self.mesh.ExportSTL(f, ascii)
# @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh
# @ingroup l2_impexp
def ExportCGNS(self, f, overwrite=1, meshPart=None):
+ unRegister = genObjUnRegister()
if isinstance( meshPart, list ):
meshPart = self.GetIDSource( meshPart, SMESH.ALL )
+ unRegister.set( meshPart )
if isinstance( meshPart, Mesh ):
meshPart = meshPart.mesh
elif not meshPart:
meshPart = self.mesh
self.mesh.ExportCGNS(meshPart, f, overwrite)
- ## Exports the mesh in a file in GMF format
+ ## Exports the mesh in a file in GMF format.
+ # GMF files must have .mesh extension for the ASCII format and .meshb for
+ # the bynary format. Other extensions are not allowed.
# @param f is the file name
# @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh
# @ingroup l2_impexp
def ExportGMF(self, f, meshPart=None):
+ unRegister = genObjUnRegister()
if isinstance( meshPart, list ):
meshPart = self.GetIDSource( meshPart, SMESH.ALL )
+ unRegister.set( meshPart )
if isinstance( meshPart, Mesh ):
meshPart = meshPart.mesh
elif not meshPart:
# @param opt boolean parameter for creating/not creating
# the groups Group_On_All_Nodes, Group_On_All_Faces, ...
# @param overwrite boolean parameter for overwriting/not overwriting the file
+ # @param autoDimension: if @c True (default), a space dimension of a MED mesh can be either
+ # - 1D if all mesh nodes lie on OX coordinate axis, or
+ # - 2D if all mesh nodes lie on XOY coordinate plane, or
+ # - 3D in the rest cases.
+ #
+ # If @a autoDimension is @c False, the space dimension is always 3.
# @ingroup l2_impexp
- def ExportToMED(self, f, version, opt=0, overwrite=1):
- self.mesh.ExportToMEDX(f, opt, version, overwrite)
+ def ExportToMED(self, f, version, opt=0, overwrite=1, autoDimension=True):
+ self.mesh.ExportToMEDX(f, opt, version, overwrite, autoDimension)
# Operations with groups:
# ----------------------
aMeasurements = self.smeshpyD.CreateMeasurements()
aMeasure = aMeasurements.MinDistance(id1, id2)
- aMeasurements.UnRegister()
+ genObjUnRegister([aMeasurements,id1, id2])
return aMeasure
## Get bounding box of the specified object(s)
if len(IDs) > 0 and isinstance(IDs[0], int):
IDs = [IDs]
srclist = []
+ unRegister = genObjUnRegister()
for o in IDs:
if isinstance(o, Mesh):
srclist.append(o.mesh)
srclist.append(self.editor.MakeIDSource(o, SMESH.FACE))
else:
srclist.append(self.editor.MakeIDSource(o, SMESH.NODE))
+ unRegister.set( srclist[-1] )
pass
pass
aMeasurements = self.smeshpyD.CreateMeasurements()
+ unRegister.set( aMeasurements )
aMeasure = aMeasurements.BoundingBox(srclist)
- aMeasurements.UnRegister()
return aMeasure
# Mesh edition (SMESH_MeshEditor functionality):
# can be retrieved from the returned object by calling GetIDs()
# @ingroup l2_modif_add
def Add0DElementsToAllNodes(self, theObject, theGroupName=""):
+ unRegister = genObjUnRegister()
if isinstance( theObject, Mesh ):
theObject = theObject.GetMesh()
if isinstance( theObject, list ):
theObject = self.GetIDSource( theObject, SMESH.ALL )
+ unRegister.set( theObject )
return self.editor.Create0DElementsOnAllNodes( theObject, theGroupName )
## Creates a ball element on a node with given ID.
# @return number of reoriented faces
# @ingroup l2_modif_changori
def Reorient2D(self, the2DObject, theDirection, theFaceOrPoint ):
+ unRegister = genObjUnRegister()
# check the2DObject
if isinstance( the2DObject, Mesh ):
the2DObject = the2DObject.GetMesh()
if isinstance( the2DObject, list ):
the2DObject = self.GetIDSource( the2DObject, SMESH.FACE )
+ unRegister.set( the2DObject )
# check theDirection
if isinstance( theDirection, geomBuilder.GEOM._objref_GEOM_Object):
theDirection = self.smeshpyD.GetDirStruct( theDirection )
# group or a list of face IDs. By default all quadrangles are split
# @ingroup l2_modif_cutquadr
def QuadTo4Tri (self, theElements=[]):
+ unRegister = genObjUnRegister()
if isinstance( theElements, Mesh ):
theElements = theElements.mesh
elif not theElements:
theElements = self.mesh
elif isinstance( theElements, list ):
theElements = self.GetIDSource( theElements, SMESH.FACE )
+ unRegister.set( theElements )
return self.editor.QuadTo4Tri( theElements )
## Splits quadrangles into triangles.
# Hex_5Tet - split the hexahedron into 5 tetrahedrons, etc
# @ingroup l2_modif_cutquadr
def SplitVolumesIntoTetra(self, elemIDs, method=smeshBuilder.Hex_5Tet ):
+ unRegister = genObjUnRegister()
if isinstance( elemIDs, Mesh ):
elemIDs = elemIDs.GetMesh()
if ( isinstance( elemIDs, list )):
elemIDs = self.editor.MakeIDSource(elemIDs, SMESH.VOLUME)
+ unRegister.set( elemIDs )
self.editor.SplitVolumesIntoTetra(elemIDs, method)
## Splits quadrangle faces near triangular facets of volumes
# @ingroup l2_modif_edit
def MakeBoundaryMesh(self, elements, dimension=SMESH.BND_2DFROM3D, groupName="", meshName="",
toCopyElements=False, toCopyExistingBondary=False):
+ unRegister = genObjUnRegister()
if isinstance( elements, Mesh ):
elements = elements.GetMesh()
if ( isinstance( elements, list )):
elemType = SMESH.ALL
if elements: elemType = self.GetElementType( elements[0], iselem=True)
elements = self.editor.MakeIDSource(elements, elemType)
+ unRegister.set( elements )
mesh, group = self.editor.MakeBoundaryMesh(elements,dimension,groupName,meshName,
toCopyElements,toCopyExistingBondary)
if mesh: mesh = self.smeshpyD.Mesh(mesh)
# @param LinearVariation forces the computation of rotation angles as linear
# variation of the given Angles along path steps
# @param HasRefPoint allows using the reference point
- # @param RefPoint the point around which the shape is rotated (the mass center of the shape by default).
+ # @param RefPoint the point around which the elements are rotated (the mass
+ # center of the elements by default).
# The User can specify any point as the Reference Point.
+ # RefPoint can be either GEOM Vertex, [x,y,z] or SMESH.PointStruct
# @param MakeGroups forces the generation of new groups from existing ones
# @param ElemType type of elements for extrusion (if param Base is a mesh)
# @return list of created groups (SMESH_GroupBase) and SMESH::Extrusion_Error if MakeGroups=True,
def ExtrusionAlongPathX(self, Base, Path, NodeStart,
HasAngles, Angles, LinearVariation,
HasRefPoint, RefPoint, MakeGroups, ElemType):
- if ( isinstance( RefPoint, geomBuilder.GEOM._objref_GEOM_Object)):
+ if isinstance( RefPoint, geomBuilder.GEOM._objref_GEOM_Object):
RefPoint = self.smeshpyD.GetPointStruct(RefPoint)
pass
+ elif isinstance( RefPoint, list ):
+ RefPoint = PointStruct(*RefPoint)
+ pass
Angles,AnglesParameters,hasVars = ParseAngles(Angles)
Parameters = AnglesParameters + var_separator + RefPoint.parameters
self.mesh.SetParameters(Parameters)
# @return list of created groups (SMESH_GroupBase) if MakeGroups=True,
# empty list otherwise
def Scale(self, theObject, thePoint, theScaleFact, Copy, MakeGroups=False):
+ unRegister = genObjUnRegister()
if ( isinstance( theObject, Mesh )):
theObject = theObject.GetMesh()
if ( isinstance( theObject, list )):
theObject = self.GetIDSource(theObject, SMESH.ALL)
+ unRegister.set( theObject )
if ( isinstance( theScaleFact, float )):
theScaleFact = [theScaleFact]
if ( isinstance( theScaleFact, int )):
# @param NewMeshName - the name of the newly created mesh
# @return instance of Mesh class
def ScaleMakeMesh(self, theObject, thePoint, theScaleFact, MakeGroups=False, NewMeshName=""):
+ unRegister = genObjUnRegister()
if (isinstance(theObject, Mesh)):
theObject = theObject.GetMesh()
if ( isinstance( theObject, list )):
theObject = self.GetIDSource(theObject,SMESH.ALL)
+ unRegister.set( theObject )
if ( isinstance( theScaleFact, float )):
theScaleFact = [theScaleFact]
if ( isinstance( theScaleFact, int )):
# @return the list of groups of nodes
# @ingroup l2_modif_trsf
def FindCoincidentNodesOnPart (self, SubMeshOrGroup, Tolerance, exceptNodes=[]):
+ unRegister = genObjUnRegister()
if (isinstance( SubMeshOrGroup, Mesh )):
SubMeshOrGroup = SubMeshOrGroup.GetMesh()
if not isinstance( exceptNodes, list):
exceptNodes = [ exceptNodes ]
if exceptNodes and isinstance( exceptNodes[0], int):
exceptNodes = [ self.GetIDSource( exceptNodes, SMESH.NODE)]
+ unRegister.set( exceptNodes )
return self.editor.FindCoincidentNodesOnPartBut(SubMeshOrGroup, Tolerance,exceptNodes)
## Merges nodes
# @return a group where the new elements are added. None if theGroupName == "".
# @ingroup l2_modif_edit
def DoubleElements(self, theElements, theGroupName=""):
+ unRegister = genObjUnRegister()
if isinstance( theElements, Mesh ):
theElements = theElements.mesh
elif isinstance( theElements, list ):
theElements = self.GetIDSource( theElements, SMESH.ALL )
+ unRegister.set( theElements )
return self.editor.DoubleElements(theElements, theGroupName)
## Creates a hole in a mesh by doubling the nodes of some particular elements
val = 0
return val
- ## Get length of 1D element.
- # @param elemId mesh element ID
- # @return element's length value
+ ## Get length of 1D element or sum of lengths of all 1D mesh elements
+ # @param elemId mesh element ID (if not defined - sum of length of all 1D elements will be calculated)
+ # @return element's length value if \a elemId is specified or sum of all 1D mesh elements' lengths otherwise
# @ingroup l1_measurements
- def GetLength(self, elemId):
- return self._valueFromFunctor(SMESH.FT_Length, elemId)
+ def GetLength(self, elemId=None):
+ length = 0
+ if elemId == None:
+ length = self.smeshpyD.GetLength(self)
+ else:
+ length = self._valueFromFunctor(SMESH.FT_Length, elemId)
+ return length
- ## Get area of 2D element.
- # @param elemId mesh element ID
- # @return element's area value
+ ## Get area of 2D element or sum of areas of all 2D mesh elements
+ # @param elemId mesh element ID (if not defined - sum of areas of all 2D elements will be calculated)
+ # @return element's area value if \a elemId is specified or sum of all 2D mesh elements' areas otherwise
# @ingroup l1_measurements
- def GetArea(self, elemId):
- return self._valueFromFunctor(SMESH.FT_Area, elemId)
+ def GetArea(self, elemId=None):
+ area = 0
+ if elemId == None:
+ area = self.smeshpyD.GetArea(self)
+ else:
+ area = self._valueFromFunctor(SMESH.FT_Area, elemId)
+ return area
- ## Get volume of 3D element.
- # @param elemId mesh element ID
- # @return element's volume value
+ ## Get volume of 3D element or sum of volumes of all 3D mesh elements
+ # @param elemId mesh element ID (if not defined - sum of volumes of all 3D elements will be calculated)
+ # @return element's volume value if \a elemId is specified or sum of all 3D mesh elements' volumes otherwise
# @ingroup l1_measurements
- def GetVolume(self, elemId):
- return self._valueFromFunctor(SMESH.FT_Volume3D, elemId)
+ def GetVolume(self, elemId=None):
+ volume = 0
+ if elemId == None:
+ volume = self.smeshpyD.GetVolume(self)
+ else:
+ volume = self._valueFromFunctor(SMESH.FT_Volume3D, elemId)
+ return volume
## Get maximum element length.
# @param elemId mesh element ID
raise ValueError, detail # wrong variable name
return result
+ pass
+
+# A helper class that call UnRegister() of SALOME.GenericObj'es stored in it
+class genObjUnRegister:
+
+ def __init__(self, genObj=None):
+ self.genObjList = []
+ self.set( genObj )
+ return
+
+ def set(self, genObj):
+ "Store one or a list of of SALOME.GenericObj'es"
+ if isinstance( genObj, list ):
+ self.genObjList.extend( genObj )
+ else:
+ self.genObjList.append( genObj )
+ return
+
+ def __del__(self):
+ for genObj in self.genObjList:
+ if genObj and hasattr( genObj, "UnRegister" ):
+ genObj.UnRegister()
for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ):
#
if ( !_importMeshSubDS ) return;
SMDS_ElemIteratorPtr eIt = _importMeshSubDS->GetElements();
while ( eIt->more() )
- meshDS->RemoveFreeElement( eIt->next(), _importMeshSubDS, /*fromGroups=*/false );
+ meshDS->RemoveFreeElement( eIt->next(), 0, /*fromGroups=*/false );
SMDS_NodeIteratorPtr nIt = _importMeshSubDS->GetNodes();
while ( nIt->more() )
- meshDS->RemoveFreeNode( nIt->next(), _importMeshSubDS, /*fromGroups=*/false );
+ meshDS->RemoveFreeNode( nIt->next(), 0, /*fromGroups=*/false );
+ _importMeshSubDS->Clear();
_n2n.clear();
_e2e.clear();
}
const SMESH_Hypothesis* hyp);
void removeSubmesh( SMESH_subMesh* sm, _ListenerData* data );
void clearSubmesh ( SMESH_subMesh* sm, _ListenerData* data, bool clearAllSub );
+ void clearN2N ( SMESH_Mesh* tgtMesh );
// mark sm as missing src hyp with valid groups
static void waitHypModification(SMESH_subMesh* sm)
}
}
//--------------------------------------------------------------------------------
+ /*!
+ * \brief Clear _ImportData::_n2n.
+ * _n2n is usefull within one mesh.Compute() only
+ */
+ void _Listener::clearN2N( SMESH_Mesh* tgtMesh )
+ {
+ list< _ImportData >& dList = get()->_tgtMesh2ImportData[tgtMesh];
+ list< _ImportData >::iterator d = dList.begin();
+ for ( ; d != dList.end(); ++d )
+ d->_n2n.clear();
+ }
+ //--------------------------------------------------------------------------------
/*!
* \brief Clear submeshes and remove imported mesh and/or groups if necessary
* \param sm - cleared submesh
default:;
}
}
+ if ( !data->mySubMeshes.empty() )
+ clearN2N( data->mySubMeshes.front()->GetFather() );
}
else // event of Import submesh
{
d->_computedSubM.insert( *smIt);
}
}
+ // Clear _ImportData::_n2n if it's no more useful, i.e. when
+ // the event is not within mesh.Compute()
+ if ( SMESH_subMesh::ALGO_EVENT == eventType )
+ clearN2N( subMesh->GetFather() );
}
}
{
if ( !_sourceHyp ) return false;
+ //MESSAGE("---------> StdMeshers_Import_1D::Compute");
const vector<SMESH_Group*>& srcGroups = _sourceHyp->GetGroups(/*loaded=*/true);
if ( srcGroups.empty() )
return error("Invalid source groups");
{
_gen->Compute(theMesh,v,/*anUpward=*/true);
n = SMESH_Algo::VertexNode( v, tgtMesh );
+ //MESSAGE("_gen->Compute " << n);
if ( !n ) return false; // very strange
}
vertexNodes.push_back( SMESH_TNodeXYZ( n ));
+ //MESSAGE("SMESH_Algo::VertexNode " << n->GetID() << " " << n->X() << " " << n->Y() << " " << n->Z() );
}
// import edges from groups
SMDS_ElemIteratorPtr srcElems = srcGroup->GetElements();
vector<const SMDS_MeshNode*> newNodes;
SMDS_MeshNode *tmpNode = helper.AddNode(0,0,0);
- double u = 0;
+ double u = 0.314159; // "random" value between 0 and 1, avoid 0 and 1, false detection possible on edge restrictions
while ( srcElems->more() ) // loop on group contents
{
const SMDS_MeshElement* edge = srcElems->next();
// find or create nodes of a new edge
newNodes.resize( edge->NbNodes() );
+ //MESSAGE("edge->NbNodes " << edge->NbNodes());
newNodes.back() = 0;
SMDS_MeshElement::iterator node = edge->begin_nodes();
SMESH_TNodeXYZ a(edge->GetNode(0));
// --- define a tolerance relative to the length of an edge
double mytol = a.Distance(edge->GetNode(edge->NbNodes()-1))/25;
+ //mytol = max(1.E-5, 10*edgeTol); // too strict and not necessary
//MESSAGE("mytol = " << mytol);
for ( unsigned i = 0; i < newNodes.size(); ++i, ++node )
{
for ( vNIt = vertexNodes.begin(); vNIt != vertexNodes.end(); ++vNIt)
if ( vNIt->SquareDistance( *node ) < checktol)
{
- //MESSAGE("SquareDistance " << vNIt->SquareDistance( *node ) << " checktol " << checktol);
+ //MESSAGE("SquareDistance " << vNIt->SquareDistance( *node ) << " checktol " << checktol <<" "<<vNIt->X()<<" "<<vNIt->Y()<<" "<<vNIt->Z());
(*n2nIt).second = vNIt->_node;
vertexNodes.erase( vNIt );
break;
}
+ else if ( vNIt->SquareDistance( *node ) < 10*checktol)
+ MESSAGE("SquareDistance missed" << vNIt->SquareDistance( *node ) << " checktol " << checktol <<" "<<vNIt->X()<<" "<<vNIt->Y()<<" "<<vNIt->Z());
}
if ( !n2nIt->second )
{
// find out if node lies on theShape
+ //double dxyz[4];
tmpNode->setXYZ( (*node)->X(), (*node)->Y(), (*node)->Z());
- if ( helper.CheckNodeU( geomEdge, tmpNode, u, mytol, /*force=*/true ))
+ if ( helper.CheckNodeU( geomEdge, tmpNode, u, mytol, /*force=*/true)) // , dxyz )) // dxyz used for debug purposes
{
SMDS_MeshNode* newNode = tgtMesh->AddNode( (*node)->X(), (*node)->Y(), (*node)->Z());
n2nIt->second = newNode;
tgtMesh->SetNodeOnEdge( newNode, shapeID, u );
- //MESSAGE("u=" << u);
+ //MESSAGE("u=" << u << " " << newNode->X()<< " " << newNode->Y()<< " " << newNode->Z());
+ //MESSAGE("d=" << dxyz[0] << " " << dxyz[1] << " " << dxyz[2] << " " << dxyz[3]);
}
}
if ( !(newNodes[i] = n2nIt->second ))
newEdge = tgtMesh->AddEdge( newNodes[0], newNodes[1], newNodes[2] );
else
newEdge = tgtMesh->AddEdge( newNodes[0], newNodes[1]);
- //MESSAGE("add Edge");
+ //MESSAGE("add Edge " << newNodes[0]->GetID() << " " << newNodes[1]->GetID());
tgtMesh->SetMeshElementOnShape( newEdge, shapeID );
e2e->insert( make_pair( edge, newEdge ));
}
return nbRemoved;
}
+ //================================================================================
+ /*!
+ * Consider continuous straight EDGES as one side - mark them to unite
+ */
+ //================================================================================
+
+ int countNbSides( const Prism_3D::TPrismTopo & thePrism,
+ vector<int> & nbUnitePerEdge )
+ {
+ int nbEdges = thePrism.myNbEdgesInWires.front(); // nb outer edges
+ int nbSides = nbEdges;
+
+ list< TopoDS_Edge >::const_iterator edgeIt = thePrism.myBottomEdges.begin();
+ std::advance( edgeIt, nbEdges-1 );
+ TopoDS_Edge prevE = *edgeIt;
+ bool isPrevStraight = SMESH_Algo::isStraight( prevE );
+ int iPrev = nbEdges - 1;
+
+ int iUnite = -1; // the first of united EDGEs
+
+ edgeIt = thePrism.myBottomEdges.begin();
+ for ( int iE = 0; iE < nbEdges; ++iE, ++edgeIt )
+ {
+ const TopoDS_Edge& curE = *edgeIt;
+ const bool isCurStraight = SMESH_Algo::isStraight( curE );
+ if ( isPrevStraight && isCurStraight && SMESH_Algo::IsContinuous( prevE, curE ))
+ {
+ if ( iUnite < 0 )
+ iUnite = iPrev;
+ nbUnitePerEdge[ iUnite ]++;
+ nbUnitePerEdge[ iE ] = -1;
+ --nbSides;
+ }
+ else
+ {
+ iUnite = -1;
+ }
+ prevE = curE;
+ isPrevStraight = isCurStraight;
+ iPrev = iE;
+ }
+
+ return nbSides;
+ }
+
+ void pointsToPython(const std::vector<gp_XYZ>& p)
+ {
+#ifdef _DEBUG_
+ for ( int i = SMESH_Block::ID_V000; i < p.size(); ++i )
+ {
+ cout << "mesh.AddNode( " << p[i].X() << ", "<< p[i].Y() << ", "<< p[i].Z() << ") # " << i <<" " ;
+ SMESH_Block::DumpShapeID( i, cout ) << endl;
+ }
+#endif
+ }
} // namespace
//=======================================================================
list< TopoDS_Edge >::iterator edge = thePrism.myBottomEdges.begin();
std::list< int >::iterator nbE = thePrism.myNbEdgesInWires.begin();
int iE = 0;
+ double f,l;
while ( edge != thePrism.myBottomEdges.end() )
{
++iE;
- if ( BRep_Tool::Degenerated( *edge ))
+ if ( BRep_Tool::Curve( *edge, f,l ).IsNull() )
{
edge = thePrism.myBottomEdges.erase( edge );
--iE;
if ( !SMESH_Block::ShellPoint( params, myShapeXYZ, coords ))
return toSM( error("Can't compute coordinates by normalized parameters"));
+ // if ( !meshDS->MeshElements( volumeID ) ||
+ // meshDS->MeshElements( volumeID )->NbNodes() == 0 )
+ // pointsToPython(myShapeXYZ);
SHOWYXZ("TOPFacePoint ",myShapeXYZ[ ID_TOP_FACE]);
SHOWYXZ("BOT Node "<< tBotNode.myNode->GetID(),gpXYZ(tBotNode.myNode));
SHOWYXZ("ShellPoint ",coords);
myParam2ColumnMaps.resize( thePrism.myBottomEdges.size() ); // total nb edges
size_t iE, nbEdges = thePrism.myNbEdgesInWires.front(); // nb outer edges
- vector< double > edgeLength( nbEdges );
+ vector< double > edgeLength( nbEdges );
multimap< double, int > len2edgeMap;
+ // for each EDGE: either split into several parts, or join with several next EDGEs
+ vector<int> nbSplitPerEdge( nbEdges, 0 );
+ vector<int> nbUnitePerEdge( nbEdges, 0 ); // -1 means "joined to a previous"
+
+ // consider continuous straight EDGEs as one side
+ const int nbSides = countNbSides( thePrism, nbUnitePerEdge );
+
list< TopoDS_Edge >::const_iterator edgeIt = thePrism.myBottomEdges.begin();
for ( iE = 0; iE < nbEdges; ++iE, ++edgeIt )
{
edgeLength[ iE ] = SMESH_Algo::EdgeLength( *edgeIt );
- if ( nbEdges < NB_WALL_FACES ) // fill map used to split faces
- {
- SMESHDS_SubMesh* smDS = meshDS->MeshElements( *edgeIt);
- if ( !smDS )
- return error(COMPERR_BAD_INPUT_MESH, TCom("Null submesh on the edge #")
- << MeshDS()->ShapeToIndex( *edgeIt ));
- len2edgeMap.insert( make_pair( edgeLength[ iE ], iE ));
- }
+ if ( nbSides < NB_WALL_FACES ) // fill map used to split faces
+ len2edgeMap.insert( make_pair( edgeLength[ iE ], iE )); // sort edges by length
}
// Load columns of internal edges (forming holes)
// and fill map ShapeIndex to TParam2ColumnMap for them
// Create 4 wall faces of a block
// -------------------------------
- if ( nbEdges <= NB_WALL_FACES ) // ************* Split faces if necessary
+ if ( nbSides <= NB_WALL_FACES ) // ************* Split faces if necessary
{
- map< int, int > iE2nbSplit;
- if ( nbEdges != NB_WALL_FACES ) // define how to split
+ if ( nbSides != NB_WALL_FACES ) // define how to split
{
if ( len2edgeMap.size() != nbEdges )
RETURN_BAD_RESULT("Uniqueness of edge lengths not assured");
double midLen = ( len2edgeMap.size() == 1 ) ? 0 : midLen_i->first;
switch ( nbEdges ) {
case 1: // 0-th edge is split into 4 parts
- iE2nbSplit.insert( make_pair( 0, 4 )); break;
+ nbSplitPerEdge[ 0 ] = 4;
+ break;
case 2: // either the longest edge is split into 3 parts, or both edges into halves
if ( maxLen / 3 > midLen / 2 ) {
- iE2nbSplit.insert( make_pair( maxLen_i->second, 3 ));
+ nbSplitPerEdge[ maxLen_i->second ] = 3;
}
else {
- iE2nbSplit.insert( make_pair( maxLen_i->second, 2 ));
- iE2nbSplit.insert( make_pair( midLen_i->second, 2 ));
+ nbSplitPerEdge[ maxLen_i->second ] = 2;
+ nbSplitPerEdge[ midLen_i->second ] = 2;
}
break;
case 3:
- // split longest into halves
- iE2nbSplit.insert( make_pair( maxLen_i->second, 2 ));
+ if ( nbSides == 2 )
+ // split longest into 3 parts
+ nbSplitPerEdge[ maxLen_i->second ] = 3;
+ else
+ // split longest into halves
+ nbSplitPerEdge[ maxLen_i->second ] = 2;
}
}
- // Create TSideFace's
- int iSide = 0;
- list< TopoDS_Edge >::const_iterator botE = thePrism.myBottomEdges.begin();
- for ( iE = 0; iE < nbEdges; ++iE, ++botE )
+ }
+ else // **************************** Unite faces
+ {
+ int nbExraFaces = nbSides - 3; // nb of faces to fuse
+ for ( iE = 0; iE < nbEdges; ++iE )
{
- TFaceQuadStructPtr quad = thePrism.myWallQuads[ iE ].front();
- // split?
- map< int, int >::iterator i_nb = iE2nbSplit.find( iE );
- if ( i_nb != iE2nbSplit.end() ) {
- // split!
- int nbSplit = i_nb->second;
- vector< double > params;
- splitParams( nbSplit, &myParam2ColumnMaps[ iE ], params );
- const bool isForward =
- StdMeshers_PrismAsBlock::IsForwardEdge( myHelper->GetMeshDS(),
- myParam2ColumnMaps[iE],
- *botE, SMESH_Block::ID_Fx0z );
- for ( int i = 0; i < nbSplit; ++i ) {
- double f = ( isForward ? params[ i ] : params[ nbSplit - i-1 ]);
- double l = ( isForward ? params[ i+1 ] : params[ nbSplit - i ]);
- TSideFace* comp = new TSideFace( *mesh, wallFaceIds[ iSide ],
- thePrism.myWallQuads[ iE ], *botE,
- &myParam2ColumnMaps[ iE ], f, l );
- mySide->SetComponent( iSide++, comp );
- }
+ if ( nbUnitePerEdge[ iE ] < 0 )
+ continue;
+ // look for already united faces
+ for ( int i = iE; i < iE + nbExraFaces; ++i )
+ {
+ if ( nbUnitePerEdge[ i ] > 0 ) // a side including nbUnitePerEdge[i]+1 edge
+ nbExraFaces += nbUnitePerEdge[ i ];
+ nbUnitePerEdge[ i ] = -1;
}
- else {
+ nbUnitePerEdge[ iE ] = nbExraFaces;
+ break;
+ }
+ }
+
+ // Create TSideFace's
+ int iSide = 0;
+ list< TopoDS_Edge >::const_iterator botE = thePrism.myBottomEdges.begin();
+ for ( iE = 0; iE < nbEdges; ++iE, ++botE )
+ {
+ TFaceQuadStructPtr quad = thePrism.myWallQuads[ iE ].front();
+ const int nbSplit = nbSplitPerEdge[ iE ];
+ const int nbExraFaces = nbUnitePerEdge[ iE ] + 1;
+ if ( nbSplit > 0 ) // split
+ {
+ vector< double > params;
+ splitParams( nbSplit, &myParam2ColumnMaps[ iE ], params );
+ const bool isForward =
+ StdMeshers_PrismAsBlock::IsForwardEdge( myHelper->GetMeshDS(),
+ myParam2ColumnMaps[iE],
+ *botE, SMESH_Block::ID_Fx0z );
+ for ( int i = 0; i < nbSplit; ++i ) {
+ double f = ( isForward ? params[ i ] : params[ nbSplit - i-1 ]);
+ double l = ( isForward ? params[ i+1 ] : params[ nbSplit - i ]);
TSideFace* comp = new TSideFace( *mesh, wallFaceIds[ iSide ],
thePrism.myWallQuads[ iE ], *botE,
- &myParam2ColumnMaps[ iE ]);
+ &myParam2ColumnMaps[ iE ], f, l );
mySide->SetComponent( iSide++, comp );
}
}
- }
- else { // **************************** Unite faces
-
- // unite first faces
- int nbExraFaces = nbEdges - 3;
- int iSide = 0, iE;
- double u0 = 0, sumLen = 0;
- for ( iE = 0; iE < nbExraFaces; ++iE )
- sumLen += edgeLength[ iE ];
-
- vector< TSideFace* > components( nbExraFaces );
- vector< pair< double, double> > params( nbExraFaces );
- list< TopoDS_Edge >::const_iterator botE = thePrism.myBottomEdges.begin();
- for ( iE = 0; iE < nbExraFaces; ++iE, ++botE )
+ else if ( nbExraFaces > 1 ) // unite
{
- components[ iE ] = new TSideFace( *mesh, wallFaceIds[ iSide ],
- thePrism.myWallQuads[ iE ], *botE,
- &myParam2ColumnMaps[ iE ]);
- double u1 = u0 + edgeLength[ iE ] / sumLen;
- params[ iE ] = make_pair( u0 , u1 );
- u0 = u1;
+ double u0 = 0, sumLen = 0;
+ for ( int i = iE; i < iE + nbExraFaces; ++i )
+ sumLen += edgeLength[ i ];
+
+ vector< TSideFace* > components( nbExraFaces );
+ vector< pair< double, double> > params( nbExraFaces );
+ bool endReached = false;
+ for ( int i = 0; i < nbExraFaces; ++i, ++botE, ++iE )
+ {
+ if ( iE == nbEdges )
+ {
+ endReached = true;
+ botE = thePrism.myBottomEdges.begin();
+ iE = 0;
+ }
+ components[ i ] = new TSideFace( *mesh, wallFaceIds[ iSide ],
+ thePrism.myWallQuads[ iE ], *botE,
+ &myParam2ColumnMaps[ iE ]);
+ double u1 = u0 + edgeLength[ iE ] / sumLen;
+ params[ i ] = make_pair( u0 , u1 );
+ u0 = u1;
+ }
+ TSideFace* comp = new TSideFace( *mesh, components, params );
+ mySide->SetComponent( iSide++, comp );
+ if ( endReached )
+ break;
+ --iE; // for increment in an external loop on iE
+ --botE;
}
- mySide->SetComponent( iSide++, new TSideFace( *mesh, components, params ));
-
- // fill the rest faces
- for ( ; iE < nbEdges; ++iE, ++botE )
+ else if ( nbExraFaces < 0 ) // skip already united face
+ {
+ }
+ else // use as is
{
TSideFace* comp = new TSideFace( *mesh, wallFaceIds[ iSide ],
thePrism.myWallQuads[ iE ], *botE,
}
}
-// gp_XYZ testPar(0.25, 0.25, 0), testCoord;
-// if ( !FacePoint( ID_BOT_FACE, testPar, testCoord ))
-// RETURN_BAD_RESULT("TEST FacePoint() FAILED");
-// SHOWYXZ("IN TEST PARAM" , testPar);
-// SHOWYXZ("OUT TEST CORD" , testCoord);
-// if ( !ComputeParameters( testCoord, testPar , ID_BOT_FACE))
-// RETURN_BAD_RESULT("TEST ComputeParameters() FAILED");
-// SHOWYXZ("OUT TEST PARAM" , testPar);
-
+ // double _u[]={ 0.1, 0.1, 0.9, 0.9 };
+ // double _v[]={ 0.1, 0.9, 0.1, 0.9, };
+ // for ( int i = 0; i < 4; ++i )
+ // {
+ // //gp_XYZ testPar(0.25, 0.25, 0), testCoord;
+ // gp_XYZ testPar(_u[i], _v[i], 0), testCoord;
+ // if ( !FacePoint( ID_BOT_FACE, testPar, testCoord ))
+ // RETURN_BAD_RESULT("TEST FacePoint() FAILED");
+ // SHOWYXZ("IN TEST PARAM" , testPar);
+ // SHOWYXZ("OUT TEST CORD" , testCoord);
+ // if ( !ComputeParameters( testCoord, testPar , ID_BOT_FACE))
+ // RETURN_BAD_RESULT("TEST ComputeParameters() FAILED");
+ // SHOWYXZ("OUT TEST PARAM" , testPar);
+ // }
return true;
}
myIsForward = StdMeshers_PrismAsBlock::IsForwardEdge( myHelper.GetMeshDS(),
*myParamToColumnMap,
myBaseEdge, myID );
+ myHelper.SetSubShape( quadList.front()->face );
+
if ( quadList.size() > 1 ) // side is vertically composite
{
// fill myShapeID2Surf map to enable finding a right surface by any sub-shape ID
myIsForward( true ),
myComponents( components ),
myHelper( mesh )
-{}
+{
+ if ( myID == ID_Fx1z || myID == ID_F0yz )
+ {
+ // reverse components
+ std::reverse( myComponents.begin(), myComponents.end() );
+ std::reverse( myParams.begin(), myParams.end() );
+ for ( size_t i = 0; i < myParams.size(); ++i )
+ {
+ const double f = myParams[i].first;
+ const double l = myParams[i].second;
+ myParams[i] = make_pair( 1. - l, 1. - f );
+ }
+ }
+}
//================================================================================
/*!
* \brief Copy constructor
throw SALOME_Exception("StdMeshers_PrismAsBlock::TSideFace::Value() !mySurface");
}
}
-
+ ((TSideFace*) this)->myHelper.SetSubShape( mySurface->Face() );
+
gp_XY uv1 = myHelper.GetNodeUV( mySurface->Face(), nn[0], nn[2]);
gp_XY uv2 = myHelper.GetNodeUV( mySurface->Face(), nn[1], nn[3]);
gp_XY uv12 = uv1 * ( 1 - vR ) + uv2 * vR;
StdMeshers_Quadrangle_2D(int hypId, int studyId, SMESH_Gen* gen);
virtual ~StdMeshers_Quadrangle_2D();
- virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
+ virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
const TopoDS_Shape& aShape,
- SMESH_Hypothesis::Hypothesis_Status& aStatus);
+ Hypothesis_Status& aStatus);
- virtual bool Compute(SMESH_Mesh& aMesh,
+ virtual bool Compute(SMESH_Mesh& aMesh,
const TopoDS_Shape& aShape);
- virtual bool Evaluate(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape,
- MapShapeNbElems& aResMap);
+ virtual bool Evaluate(SMESH_Mesh & aMesh,
+ const TopoDS_Shape & aShape,
+ MapShapeNbElems& aResMap);
- FaceQuadStruct::Ptr CheckAnd2Dcompute(SMESH_Mesh& aMesh,
+ FaceQuadStruct::Ptr CheckAnd2Dcompute(SMESH_Mesh& aMesh,
const TopoDS_Shape& aShape,
- const bool CreateQuadratic);
+ const bool CreateQuadratic);
- FaceQuadStruct::Ptr CheckNbEdges(SMESH_Mesh& aMesh,
+ FaceQuadStruct::Ptr CheckNbEdges(SMESH_Mesh& aMesh,
const TopoDS_Shape& aShape);
protected:
#include "SMESH_subMesh.hxx"
#include "SMESH_subMeshEventListener.hxx"
-#include "utilities.h"
-
#include <BRepAdaptor_Curve2d.hxx>
#include <BRep_Tool.hxx>
#include <Bnd_B2d.hxx>
struct _Simplex
{
const SMDS_MeshNode *_nPrev, *_nNext; // nodes on a smoothed mesh surface
- _Simplex(const SMDS_MeshNode* nPrev=0, const SMDS_MeshNode* nNext=0)
- : _nPrev(nPrev), _nNext(nNext) {}
+ const SMDS_MeshNode *_nOpp; // in 2D case, a node opposite to a smoothed node in QUAD
+ _Simplex(const SMDS_MeshNode* nPrev=0,
+ const SMDS_MeshNode* nNext=0,
+ const SMDS_MeshNode* nOpp=0)
+ : _nPrev(nPrev), _nNext(nNext), _nOpp(nOpp) {}
bool IsForward(const SMDS_MeshNode* nSrc, const gp_XYZ* pntTgt) const
{
const double M[3][3] =
//vector<const SMDS_MeshNode*> _nodesAround;
vector<_Simplex> _simplices; // for quality check
+ enum SmoothType { LAPLACIAN, CENTROIDAL, ANGULAR };
+
bool Smooth(int& badNb,
Handle(Geom_Surface)& surface,
SMESH_MesherHelper& helper,
const double refSign,
- bool isCentroidal,
+ SmoothType how,
bool set3D);
+
+ gp_XY computeAngularPos(vector<gp_XY>& uv,
+ const gp_XY& uvToFix,
+ const double refSign );
};
//--------------------------------------------------------------------------------
/*!
int srcInd = f->GetNodeIndex( node );
const SMDS_MeshNode* nPrev = f->GetNode( SMESH_MesherHelper::WrapIndex( srcInd-1, nbNodes ));
const SMDS_MeshNode* nNext = f->GetNode( SMESH_MesherHelper::WrapIndex( srcInd+1, nbNodes ));
+ const SMDS_MeshNode* nOpp = f->GetNode( SMESH_MesherHelper::WrapIndex( srcInd+2, nbNodes ));
if ( dataToCheckOri && dataToCheckOri->_reversedFaceIds.count( shapeInd ))
std::swap( nPrev, nNext );
- simplices.push_back( _Simplex( nPrev, nNext ));
+ simplices.push_back( _Simplex( nPrev, nNext, nOpp ));
}
if ( toSort )
sm->getDependsOnIterator(/*includeSelf=*/false, /*complexShapeFirst=*/false);
while ( subIt->more() )
{
- SMESH_subMesh* sub = subIt->next();
+ SMESH_subMesh* sub = subIt->next();
SMESHDS_SubMesh* subDS = sub->GetSubMeshDS();
if ( subDS->NbNodes() == 0 || !n2eMap.count( subDS->GetNodes()->next() ))
continue;
vector< _SmoothNode > nodesToSmooth( smoothNodes.size() );
{
dumpFunction(SMESH_Comment("beforeShrinkFace")<<f2sd->first); // debug
+ const bool sortSimplices = isConcaveFace;
for ( unsigned i = 0; i < smoothNodes.size(); ++i )
{
const SMDS_MeshNode* n = smoothNodes[i];
nodesToSmooth[ i ]._node = n;
// src nodes must be replaced by tgt nodes to have tgt nodes in _simplices
- getSimplices( n, nodesToSmooth[ i ]._simplices, ignoreShapes, NULL, isConcaveFace );
+ getSimplices( n, nodesToSmooth[ i ]._simplices, ignoreShapes, NULL, sortSimplices );
// fix up incorrect uv of nodes on the FACE
helper.GetNodeUV( F, n, 0, &isOkUV);
dumpMove( n );
bool shrinked = true;
int badNb, shriStep=0, smooStep=0;
+ _SmoothNode::SmoothType smoothType
+ = isConcaveFace ? _SmoothNode::CENTROIDAL : _SmoothNode::LAPLACIAN;
while ( shrinked )
{
// Move boundary nodes (actually just set new UV)
dumpFunctionEnd();
// Move nodes on EDGE's
+ // (XYZ is set as soon as a needed length reached in SetNewLength2d())
set< _Shrinker1D* >::iterator shr = eShri1D.begin();
for ( ; shr != eShri1D.end(); ++shr )
(*shr)->Compute( /*set3D=*/false, helper );
for ( unsigned i = 0; i < nodesToSmooth.size(); ++i )
{
moved |= nodesToSmooth[i].Smooth( badNb,surface,helper,refSign,
- /*isCentroidal=*/isConcaveFace,
- /*set3D=*/isConcaveFace);
+ smoothType, /*set3D=*/isConcaveFace);
}
if ( badNb < oldBadNb )
nbNoImpSteps = 0;
if ( badNb > 0 )
return error(SMESH_Comment("Can't shrink 2D mesh on face ") << f2sd->first );
}
+
// No wrongly shaped faces remain; final smooth. Set node XYZ.
- // First, find out a needed quality of smoothing (high for quadrangles only)
- bool highQuality;
+ bool isStructuredFixed = false;
+ if ( SMESH_2D_Algo* algo = dynamic_cast<SMESH_2D_Algo*>( sm->GetAlgo() ))
+ isStructuredFixed = algo->FixInternalNodes( *data._proxyMesh, F );
+ if ( !isStructuredFixed )
{
- const bool hasTria = _mesh->NbTriangles(), hasQuad = _mesh->NbQuadrangles();
- if ( hasTria != hasQuad ) {
- highQuality = hasQuad;
- }
- else {
- set<int> nbNodesSet;
- SMDS_ElemIteratorPtr fIt = smDS->GetElements();
- while ( fIt->more() && nbNodesSet.size() < 2 )
- nbNodesSet.insert( fIt->next()->NbCornerNodes() );
- highQuality = ( *nbNodesSet.begin() == 4 );
+ if ( isConcaveFace )
+ fixBadFaces( F, helper ); // fix narrow faces by swapping diagonals
+ for ( int st = /*highQuality ? 10 :*/ 3; st; --st )
+ {
+ dumpFunction(SMESH_Comment("shrinkFace")<<f2sd->first<<"_st"<<++smooStep); // debug
+ for ( unsigned i = 0; i < nodesToSmooth.size(); ++i )
+ {
+ nodesToSmooth[i].Smooth( badNb,surface,helper,refSign,
+ smoothType,/*set3D=*/st==1 );
+ }
+ dumpFunctionEnd();
}
}
- if ( !highQuality && isConcaveFace )
- fixBadFaces( F, helper ); // fix narrow faces by swaping diagonals
- for ( int st = highQuality ? 10 : 3; st; --st )
- {
- dumpFunction(SMESH_Comment("shrinkFace")<<f2sd->first<<"_st"<<++smooStep); // debug
- for ( unsigned i = 0; i < nodesToSmooth.size(); ++i )
- nodesToSmooth[i].Smooth( badNb,surface,helper,refSign,
- /*isCentroidal=*/isConcaveFace,/*set3D=*/st==1 );
- dumpFunctionEnd();
- }
// Set an event listener to clear FACE sub-mesh together with SOLID sub-mesh
VISCOUS_3D::ToClearSubWithMain( sm, data._solid );
double uvLen = uvDir.Magnitude();
uvDir /= uvLen;
edge._normal.SetCoord( uvDir.X(),uvDir.Y(), 0);
+ edge._len = uvLen;
// IMPORTANT to have src nodes NOT yet REPLACED by tgt nodes in shrinked faces
vector<const SMDS_MeshElement*> faces;
}
multimap< double, const SMDS_MeshNode* >::iterator p2n = proj2node.begin(), p2nEnd;
- const double minProj = p2n->first;
+ const double minProj = p2n->first;
const double projThreshold = 1.1 * uvLen;
if ( minProj > projThreshold )
{
double proj = uvDirN * uvDir * kSafe;
if ( proj < stepSize && proj > minStepSize )
stepSize = proj;
+ else if ( proj < minStepSize )
+ stepSize = minStepSize;
}
}
gp_Pnt2d newUV;
- if ( stepSize == uvLen )
+ if ( uvLen - stepSize < _len / 20. )
{
newUV = tgtUV;
_pos.clear();
{
TopoDS_Edge E = TopoDS::Edge( _sWOL );
const SMDS_MeshNode* n2 = _simplices[0]._nPrev;
+ SMDS_EdgePosition* tgtPos = static_cast<SMDS_EdgePosition*>( tgtNode->GetPosition() );
const double u2 = helper.GetNodeU( E, n2, tgtNode );
const double uSrc = _pos[0].Coord( U_SRC );
const double lenTgt = _pos[0].Coord( LEN_TGT );
double newU = _pos[0].Coord( U_TGT );
- if ( lenTgt < 0.99 * fabs( uSrc-u2 ))
+ if ( lenTgt < 0.99 * fabs( uSrc-u2 )) // n2 got out of src-tgt range
{
_pos.clear();
}
else
{
- newU = 0.1 * uSrc + 0.9 * u2;
+ newU = 0.1 * tgtPos->GetUParameter() + 0.9 * u2;
}
- SMDS_EdgePosition* pos = static_cast<SMDS_EdgePosition*>( tgtNode->GetPosition() );
- pos->SetUParameter( newU );
+ tgtPos->SetUParameter( newU );
#ifdef __myDEBUG
gp_XY newUV = helper.GetNodeUV( F, tgtNode, _nodes[0]);
gp_Pnt p = surface->Value( newUV.X(), newUV.Y() );
Handle(Geom_Surface)& surface,
SMESH_MesherHelper& helper,
const double refSign,
- bool isCentroidal,
+ SmoothType how,
bool set3D)
{
const TopoDS_Face& face = TopoDS::Face( helper.GetSubShape() );
// compute new UV for the node
gp_XY newPos (0,0);
- if ( isCentroidal && _simplices.size() > 3 )
+/* if ( how == ANGULAR && _simplices.size() == 4 )
+ {
+ vector<gp_XY> corners; corners.reserve(4);
+ for ( size_t i = 0; i < _simplices.size(); ++i )
+ if ( _simplices[i]._nOpp )
+ corners.push_back( helper.GetNodeUV( face, _simplices[i]._nOpp, _node ));
+ if ( corners.size() == 4 )
+ {
+ newPos = helper.calcTFI
+ ( 0.5, 0.5,
+ corners[0], corners[1], corners[2], corners[3],
+ uv[1], uv[2], uv[3], uv[0] );
+ }
+ // vector<gp_XY> p( _simplices.size() * 2 + 1 );
+ // p.clear();
+ // for ( size_t i = 0; i < _simplices.size(); ++i )
+ // {
+ // p.push_back( uv[i] );
+ // if ( _simplices[i]._nOpp )
+ // p.push_back( helper.GetNodeUV( face, _simplices[i]._nOpp, _node ));
+ // }
+ // newPos = computeAngularPos( p, helper.GetNodeUV( face, _node ), refSign );
+ }
+ else*/ if ( how == CENTROIDAL && _simplices.size() > 3 )
{
// average centers of diagonals wieghted with their reciprocal lengths
if ( _simplices.size() == 4 )
newPos += w * ( uv[i]+uv[i2] );
}
}
- newPos /= 2 * sumWeight;
+ newPos /= 2 * sumWeight; // 2 is to get a middle between uv's
}
}
else
{
// Laplacian smooth
- isCentroidal = false;
+ //isCentroidal = false;
for ( size_t i = 0; i < _simplices.size(); ++i )
newPos += uv[i];
newPos /= _simplices.size();
return ( (tgtUV-newPos).SquareModulus() > 1e-10 );
}
+//================================================================================
+/*!
+ * \brief Computes new UV using angle based smoothing technic
+ */
+//================================================================================
+
+gp_XY _SmoothNode::computeAngularPos(vector<gp_XY>& uv,
+ const gp_XY& uvToFix,
+ const double refSign)
+{
+ uv.push_back( uv.front() );
+
+ vector< gp_XY > edgeDir( uv.size() );
+ vector< double > edgeSize( uv.size() );
+ for ( size_t i = 1; i < edgeDir.size(); ++i )
+ {
+ edgeDir[i-1] = uv[i] - uv[i-1];
+ edgeSize[i-1] = edgeDir[i-1].Modulus();
+ if ( edgeSize[i-1] < numeric_limits<double>::min() )
+ edgeDir[i-1].SetX( 100 );
+ else
+ edgeDir[i-1] /= edgeSize[i-1] * refSign;
+ }
+ edgeDir.back() = edgeDir.front();
+ edgeSize.back() = edgeSize.front();
+
+ gp_XY newPos(0,0);
+ int nbEdges = 0;
+ double sumSize = 0;
+ for ( size_t i = 1; i < edgeDir.size(); ++i )
+ {
+ if ( edgeDir[i-1].X() > 1. ) continue;
+ int i1 = i-1;
+ while ( edgeDir[i].X() > 1. && ++i < edgeDir.size() );
+ if ( i == edgeDir.size() ) break;
+ gp_XY p = uv[i];
+ gp_XY norm1( -edgeDir[i1].Y(), edgeDir[i1].X() );
+ gp_XY norm2( -edgeDir[i].Y(), edgeDir[i].X() );
+ gp_XY bisec = norm1 + norm2;
+ double bisecSize = bisec.Modulus();
+ if ( bisecSize < numeric_limits<double>::min() )
+ {
+ bisec = -edgeDir[i1] + edgeDir[i];
+ bisecSize = bisec.Modulus();
+ }
+ bisec /= bisecSize;
+
+ gp_XY dirToN = uvToFix - p;
+ double distToN = dirToN.Modulus();
+ if ( bisec * dirToN < 0 )
+ distToN = -distToN;
+
+ newPos += ( p + bisec * distToN ) * ( edgeSize[i1] + edgeSize[i] );
+ ++nbEdges;
+ sumSize += edgeSize[i1] + edgeSize[i];
+ }
+ newPos /= /*nbEdges * */sumSize;
+ return newPos;
+}
+
//================================================================================
/*!
* \brief Delete _SolidData
nodist_salomeres_DATA= \
StdMeshers_images.qm \
StdMeshers_msg_en.qm \
- StdMeshers_msg_fr.qm
+ StdMeshers_msg_fr.qm \
+ StdMeshers_msg_ja.qm
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS>
+ <context>
+ <name>@default</name>
+ <message>
+ <source>SMESH_ARITHMETIC_1D_HYPOTHESIS</source>
+ <translation>算数 1 D</translation>
+ </message>
+ <message>
+ <source>SMESH_ARITHMETIC_1D_PARAM</source>
+ <translation>算術の理由</translation>
+ </message>
+ <message>
+ <source>SMESH_ARITHMETIC_1D_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_AUTOMATIC_LENGTH_HYPOTHESIS</source>
+ <translation>長さの自動調整</translation>
+ </message>
+ <message>
+ <source>SMESH_AUTOMATIC_LENGTH_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_CONV_MODE</source>
+ <translation>変換モード</translation>
+ </message>
+ <message>
+ <source>SMESH_CUT_NEG_MODE</source>
+ <translation>否定的なカットします。</translation>
+ </message>
+ <message>
+ <source>SMESH_DEFLECTION1D_HYPOTHESIS</source>
+ <translation>たわみ 1 D</translation>
+ </message>
+ <message>
+ <source>SMESH_DEFLECTION1D_PARAM</source>
+ <translation>たわみ</translation>
+ </message>
+ <message>
+ <source>SMESH_DEFLECTION1D_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_DENSITY_FUNC</source>
+ <translation>密度関数</translation>
+ </message>
+ <message>
+ <source>SMESH_DISTR</source>
+ <translation>配布</translation>
+ </message>
+ <message>
+ <source>SMESH_DISTR_EXPR</source>
+ <translation>ピエゾ密度分布</translation>
+ </message>
+ <message>
+ <source>SMESH_DISTR_REGULAR</source>
+ <translation>等距離の分布</translation>
+ </message>
+ <message>
+ <source>SMESH_DISTR_SCALE</source>
+ <translation>規模の分布</translation>
+ </message>
+ <message>
+ <source>SMESH_DISTR_TAB</source>
+ <translation>テーブルの密度分布</translation>
+ </message>
+ <message>
+ <source>SMESH_DISTR_TYPE</source>
+ <translation>分布の種類</translation>
+ </message>
+ <message>
+ <source>SMESH_END_LENGTH_PARAM</source>
+ <translation>最後の長さ</translation>
+ </message>
+ <message>
+ <source>SMESH_EXPR_FUNC</source>
+ <translation>密度関数</translation>
+ </message>
+ <message>
+ <source>SMESH_EXP_MODE</source>
+ <translation>指数</translation>
+ </message>
+ <message>
+ <source>SMESH_FINENESS_PARAM</source>
+ <translation>細かさ</translation>
+ </message>
+ <message>
+ <source>SMESH_FUNC_DOMAIN</source>
+ <translation>警告: 関数はセグメント [0..1] に定義する必要があります。</translation>
+ </message>
+ <message>
+ <source>SMESH_INSERT_ROW</source>
+ <translation>行を挿入します。</translation>
+ </message>
+ <message>
+ <source>SMESH_INVALID_FUNCTION</source>
+ <translation>関数が無効です。</translation>
+ </message>
+ <message>
+ <source>SMESH_LAYERS_DISTRIBUTION</source>
+ <translation>1 次元仮説</translation>
+ </message>
+ <message>
+ <source>SMESH_LAYER_DISTRIBUTION_HYPOTHESIS</source>
+ <translation>層の分布</translation>
+ </message>
+ <message>
+ <source>SMESH_LAYER_DISTRIBUTION_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_LOCAL_LENGTH_HYPOTHESIS</source>
+ <translation>ローカルの長さ</translation>
+ </message>
+ <message>
+ <source>SMESH_LOCAL_LENGTH_PARAM</source>
+ <translation>長さ</translation>
+ </message>
+ <message>
+ <source>SMESH_LOCAL_LENGTH_PRECISION</source>
+ <translation>精度</translation>
+ </message>
+ <message>
+ <source>SMESH_LOCAL_LENGTH_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_FIXED_POINTS_1D_HYPOTHESIS</source>
+ <translation>固定ポイント 1 D</translation>
+ </message>
+ <message>
+ <source>SMESH_FIXED_POINTS_1D_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX_LENGTH_HYPOTHESIS</source>
+ <translation>最大長</translation>
+ </message>
+ <message>
+ <source>SMESH_CARTESIAN_PARAMS_HYPOTHESIS</source>
+ <translation>体継ぎ手パラメーター</translation>
+ </message>
+ <message>
+ <source>SMESH_USE_PREESTIMATED_LENGTH</source>
+ <translation>伴う長さを使用します。</translation>
+ </message>
+ <message>
+ <source>SMESH_VISCOUS_LAYERS_HYPOTHESIS</source>
+ <translation>粘性層</translation>
+ </message>
+ <message>
+ <source>SMESH_VISCOUS_LAYERS_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_TOTAL_THICKNESS</source>
+ <translation>総厚</translation>
+ </message>
+ <message>
+ <source>SMESH_STRETCH_FACTOR</source>
+ <translation>伸縮係数</translation>
+ </message>
+ <message>
+ <source>SMESH_FACES_WO_LAYERS</source>
+ <translation>顔にレイヤー (入り江と oulets)</translation>
+ </message>
+ <message>
+ <source>SMESH_EDGES_WO_LAYERS</source>
+ <translation>エッジ層 (入り江と oulets) が不要</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX_LENGTH_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_CARTESIAN_PARAMS_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX_ELEMENT_AREA_HYPOTHESIS</source>
+ <translation>最大。要素エリア</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX_ELEMENT_AREA_PARAM</source>
+ <translation>最大。エリア</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX_ELEMENT_AREA_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX_ELEMENT_VOLUME_HYPOTHESIS</source>
+ <translation>最大。要素音量</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX_ELEMENT_VOLUME_PARAM</source>
+ <translation>最大。ボリューム</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX_ELEMENT_VOLUME_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_NB_SEGMENTS_HYPOTHESIS</source>
+ <translation>セグメントの数</translation>
+ </message>
+ <message>
+ <source>SMESH_NB_SEGMENTS_PARAM</source>
+ <translation>セグメントの数</translation>
+ </message>
+ <message>
+ <source>SMESH_NB_SEGMENTS_SCALE_PARAM</source>
+ <translation>尺度係数</translation>
+ </message>
+ <message>
+ <source>SMESH_NB_SEGMENTS_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_NO_CONV</source>
+ <translation>変換なし</translation>
+ </message>
+ <message>
+ <source>SMESH_NUMBER_OF_LAYERS</source>
+ <translation>層の数</translation>
+ </message>
+ <message>
+ <source>SMESH_NUMBER_OF_LAYERS_HYPOTHESIS</source>
+ <translation>ラジアル プリズム パラメーター</translation>
+ </message>
+ <message>
+ <source>SMESH_NUMBER_OF_LAYERS_2D_HYPOTHESIS</source>
+ <translation>放射状の四角形パラメーター</translation>
+ </message>
+ <message>
+ <source>SMESH_NUMBER_OF_LAYERS_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_NUMBER_OF_LAYERS_2D_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_PROJECTION_SOURCE_1D_HYPOTHESIS</source>
+ <translation>投射の源 1 D</translation>
+ </message>
+ <message>
+ <source>SMESH_PROJECTION_SOURCE_1D_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_PROJECTION_SOURCE_2D_HYPOTHESIS</source>
+ <translation>投影ソース 2 D</translation>
+ </message>
+ <message>
+ <source>SMESH_PROJECTION_SOURCE_2D_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_PROJECTION_SOURCE_3D_HYPOTHESIS</source>
+ <translation>投影ソースの 3 D</translation>
+ </message>
+ <message>
+ <source>SMESH_PROJECTION_SOURCE_3D_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_IMPORT_SOURCE_1D_HYPOTHESIS</source>
+ <translation>ソース エッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_IMPORT_SOURCE_1D_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_IMPORT_SOURCE_2D_HYPOTHESIS</source>
+ <translation>ソース顔</translation>
+ </message>
+ <message>
+ <source>SMESH_IMPORT_SOURCE_2D_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_REMOVE_ROW</source>
+ <translation>行を削除します。</translation>
+ </message>
+ <message>
+ <source>SMESH_REVERSED_EDGES</source>
+ <translation>逆のエッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_FIXED_POINTS</source>
+ <translation>固定ポイント</translation>
+ </message>
+ <message>
+ <source>SMESH_RANGE</source>
+ <translation>範囲</translation>
+ </message>
+ <message>
+ <source>SMESH_NB_SEGMENTS</source>
+ <translation>注意セグメント</translation>
+ </message>
+ <message>
+ <source>SMESH_SAME_NB_SEGMENTS</source>
+ <translation>同じ注意セグメントすべての間隔</translation>
+ </message>
+ <message>
+ <source>SMESH_BASE_VERTEX</source>
+ <translation>ベース頂点</translation>
+ </message>
+ <message>
+ <source>SMESH_SEGMENT_LENGTH_AROUND_VERTEX_HYPOTHESIS</source>
+ <translation>頂点の周りのセグメントの長さ</translation>
+ </message>
+ <message>
+ <source>SMESH_SEGMENT_LENGTH_AROUND_VERTEX_PARAM</source>
+ <translation>長さ</translation>
+ </message>
+ <message>
+ <source>SMESH_SEGMENT_LENGTH_AROUND_VERTEX_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_SOURCE_3DSHAPE</source>
+ <translation>元の 3 D 図形</translation>
+ </message>
+ <message>
+ <source>SMESH_SOURCE_EDGE</source>
+ <translation>ソース エッジ</translation>
+ </message>
+ <message>
+ <source>SMESH_SOURCE_EDGES</source>
+ <translation>エッジのグループ</translation>
+ </message>
+ <message>
+ <source>SMESH_SOURCE_FACE</source>
+ <translation>ソース顔</translation>
+ </message>
+ <message>
+ <source>SMESH_SOURCE_FACES</source>
+ <translation>面のグループ</translation>
+ </message>
+ <message>
+ <source>SMESH_SOURCE_MESH</source>
+ <translation>ソース メッシュ</translation>
+ </message>
+ <message>
+ <source>SMESH_COPY_MESH</source>
+ <translation>メッシュをコピーするには</translation>
+ </message>
+ <message>
+ <source>SMESH_TO_COPY_GROUPS</source>
+ <translation>グループをコピーするには</translation>
+ </message>
+ <message>
+ <source>SMESH_SOURCE_VERTEX</source>
+ <translation>ソース頂点</translation>
+ </message>
+ <message>
+ <source>SMESH_SOURCE_VERTEX1</source>
+ <translation>ソース頂点 1</translation>
+ </message>
+ <message>
+ <source>SMESH_SOURCE_VERTEX2</source>
+ <translation>ソース頂点 2</translation>
+ </message>
+ <message>
+ <source>SMESH_START_END_LENGTH_HYPOTHESIS</source>
+ <translation>開始と終了ローカルの長さ</translation>
+ </message>
+ <message>
+ <source>SMESH_START_END_LENGTH_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_START_LENGTH_PARAM</source>
+ <translation>長さを開始します。</translation>
+ </message>
+ <message>
+ <source>SMESH_TAB_FUNC</source>
+ <translation>テーブル関数</translation>
+ </message>
+ <message>
+ <source>SMESH_TARGET_VERTEX</source>
+ <translation>ターゲットの頂点</translation>
+ </message>
+ <message>
+ <source>SMESH_TARGET_VERTEX1</source>
+ <translation>ターゲット頂点 1</translation>
+ </message>
+ <message>
+ <source>SMESH_TARGET_VERTEX2</source>
+ <translation>ターゲット頂点 2</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRANGLE_PARAMS_HYPOTHESIS</source>
+ <translation>四角形のパラメーター</translation>
+ </message>
+ <message>
+ <source>SMESH_QUADRANGLE_PARAMS_TITLE</source>
+ <translation>仮説構築</translation>
+ </message>
+ <message>
+ <source>SMESH_QUAD_TYPE</source>
+ <translation>タイプ</translation>
+ </message>
+ </context>
+ <context>
+ <name>StdMeshersGUI_QuadrangleParamWdg</name>
+ <message>
+ <source>SMESH_QUAD_TYPE_0</source>
+ <translation>標準</translation>
+ </message>
+ <message>
+ <source>SMESH_QUAD_TYPE_1</source>
+ <translation>三角形の好み</translation>
+ </message>
+ <message>
+ <source>SMESH_QUAD_TYPE_2</source>
+ <translation>四角形の設定</translation>
+ </message>
+ <message>
+ <source>SMESH_QUAD_TYPE_3</source>
+ <translation>(逆に) の四角形の設定</translation>
+ </message>
+ <message>
+ <source>SMESH_QUAD_TYPE_4</source>
+ <translation>削減</translation>
+ </message>
+ </context>
+ <context>
+ <name>StdMeshersGUI_LayerDistributionParamWdg</name>
+ <message>
+ <source>CHANGE_TYPE</source>
+ <translation>種類の変更</translation>
+ </message>
+ <message>
+ <source>CREATE</source>
+ <translation>作成します。</translation>
+ </message>
+ <message>
+ <source>EDIT</source>
+ <translation>編集</translation>
+ </message>
+ </context>
+ <context>
+ <name>StdMeshersGUI_CartesianParamCreator</name>
+ <message>
+ <source>THRESHOLD</source>
+ <translation>しきい値</translation>
+ </message>
+ <message>
+ <source>AXIS_X</source>
+ <translation>X 軸</translation>
+ </message>
+ <message>
+ <source>AXIS_Y</source>
+ <translation>Y 軸</translation>
+ </message>
+ <message>
+ <source>AXIS_Z</source>
+ <translation>軸、Z 軸</translation>
+ </message>
+ </context>
+ <context>
+ <name>StdMeshersGUI::GridAxisTab</name>
+ <message>
+ <source>GRID_DEF_MODE</source>
+ <translation>定義モード</translation>
+ </message>
+ <message>
+ <source>SPACING</source>
+ <translation>間隔</translation>
+ </message>
+ <message>
+ <source>INSERT</source>
+ <translation>挿入</translation>
+ </message>
+ <message>
+ <source>COORD_STEP</source>
+ <translation>ステップ</translation>
+ </message>
+ </context>
+</TS>
//
// This defines the set of temporary folders used by the jobmanager
- // when executing a job (may depends on the job).
+ // when executing a job (may depend on the job).
struct MeshJobPaths
{
string local_inputdir;
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
-SUBDIRS = appligen testdata
+SUBDIRS = testdata
include $(top_srcdir)/adm_local/unix/make_common_starter.am
+++ /dev/null
-# Copyright (C) 2011-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-include $(top_srcdir)/adm_local/unix/make_common_starter.am
-
-appligendir = $(salomeresdir)/appligen
-
-dist_appligen_DATA= \
- appli-splashscreen.jpg \
- SalomeApp.xml \
- CatalogResources.xml
-
-nodist_appligen_DATA= \
- envappli.sh \
- config_appli.xml
-
-nodist_appligen_SCRIPTS= \
- appligen.sh
-
-envappli.sh:
- $(srcdir)/genenv.sh envappli.sh
-
-EXTRA_DIST += README.txt genenv.sh
-CLEANFILES = envappli.sh
-This package defines a build procedure that creates a
-set of files ready to use to generate a SALOME application
-embedding this module.
-
-The files are created in the directory:
-
- <installdir>/share/salome/resources/<module_name>/appligen
-
-Where <installdir> is the installation directory of the module.
-
-To generate a SALOME application, just change directory to go
-where you want to install the SALOME application and type the
-following command in a standard shell (the SALOME environment
-is not required, all paths are "hard" coded in the script):
-
- $ <installdir>/share/salome/resources/<module_name>/appligen/appligen.sh
-
-This script generates an application in a directory ./appli.
-Then type the following command to run a SALOME application
-embedding your module:
-
- $ ./appli/runAppli -k
-
+This folder contains resources files that can be used to define
+a custom application for the padder plugin. See the KERNEL documentation
+concerning the SALOME application principles.
+++ /dev/null
-#!/bin/sh
-# Copyright (C) 2011-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-#
-# This script installs or updates a SALOME application for testing the
-# PADDER plugin for SMESH. The application is installed in the
-# directory ./appli. The configuration file is supposed to be adapted
-# to your own environment (see config_appli.xml).
-#
-# To run this script, you should have first configure your
-# shell with the SALOME environment, i.e. source the files
-# prerequis.sh and envSalome.sh (or equivalent) that fit
-# your configuration. You can alternatively customize the env.sh file
-# to fit your SALOME environment and let the script do the job (see
-# source below).
-#
-# (gboulant - 3/2/2011)
-#
-
-here=$(dirname $0)
-
-#
-# Run the appli_gen.py
-#
-APPLIDIR="./appli"
-@KERNEL_ROOT_DIR@/bin/salome/appli_gen.py --prefix=$APPLIDIR --config=$here/config_appli.xml
-
-#
-# Copy customized configuration files in the application
-#
-cp $here/SalomeApp.xml $APPLIDIR/.
-cp $here/CatalogResources.xml $APPLIDIR/.
-cp @prefix@/plugins/envPlugins.sh $APPLIDIR/env.d/.
+++ /dev/null
-<application>
-<!-- The path should be the absolute path of installation of the file envappli.sh -->
-<prerequisites path="@prefix@/share/salome/resources/@MODULE_NAME@/appligen/envappli.sh"/>
-
-<modules>
- <module name="KERNEL" path="@KERNEL_ROOT_DIR@"/>
- <module name="MED" path="@MED_ROOT_DIR@"/>
- <module name="GUI" path="@GUI_ROOT_DIR@"/>
- <module name="GEOM" path="@GEOM_ROOT_DIR@"/>
- <module name="SMESH" path="@prefix@"/>
- <module name="BLSURFPLUGIN" gui="no" path="@BLSURFPLUGIN_ROOT_DIR@"/>
- <module name="GHS3DPLUGIN" gui="no" path="@GHS3DPLUGIN_ROOT_DIR@"/>
- <module name="NETGENPLUGIN" gui="no" path="@NETGENPLUGIN_ROOT_DIR@"/>
-</modules>
-</application>
+++ /dev/null
-#!/bin/bash
-
-# Copyright (C) 2011-2013 EDF R&D
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-# This script creates a source file that defines a SALOME shell
-# environment. We assume here that the SALOME environment has been
-# previously set, so that the env command get all environment
-# variables required for building and executing SALOME. We talk
-# about third party software programs and libraries. The environment
-# variables defining SALOME module are exluded (i.e. *_ROOT_DIR)
-# because they are automatically set when generating a SALOME application..
-#
-# The argument is the filepath to be created.
-#
-
-if [ $# == 1 ]; then
- ENVAPPLI_SH=$1
-else
- ENVAPPLI_SH=envappli.sh
-fi
-
-function header {
- echo "#"
- echo "# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
- echo "# THIS FILE IS GENERATED from the shell environment used to build the SALOME module."
- echo "# IT SHOULD NOT BE EDITED, it is generated for the need of the SALOME application "
- echo "# that embeds the module (for test purposes). "
- echo "# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
- echo "#"
-}
-header > $ENVAPPLI_SH
-env | grep -v -e PWD -e SalomeAppConfig -e _ROOT_DIR | while read f; do
- key=$(echo $f | cut -d"=" -f1)
- value=$(echo $f | cut -d"=" -f2-)
-
- # if the key is a path (LD_LIBRARY_PATH, PATH and PYTHONPATH) then
- # we must extends the variable.
- if [ $key == "LD_LIBRARY_PATH" -o $key == "PATH" -o $key == "PYTHONPATH" ]; then
- echo export $key=\"$value:\$$key\"
- else
- echo export $key=\"$value\"
- fi
-done >> $ENVAPPLI_SH