STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
SET(${PROJECT_NAME_UC}_MAJOR_VERSION 7)
-SET(${PROJECT_NAME_UC}_MINOR_VERSION 2)
+SET(${PROJECT_NAME_UC}_MINOR_VERSION 3)
SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
SET(${PROJECT_NAME_UC}_VERSION
${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
<h2>Adaptive hypothesis</h2>
<b>Adaptive</b> hypothesis allows to split edges into segments with a
-length that depends on curvature of edges and faces and is limited
-from up and down. In addition length of a segment depends on lengths
-of adjacent segments (that can't differ more than twice) and on
+length that depends on the curvature of edges and faces and is limited by <b>Min. Size</b>
+and <b>Max Size</b>. The length of a segment also depends on the lengths
+of adjacent segments (that can't differ more than twice) and on the
distance to close geometrical entities (edges and faces) to avoid
creation of narrow 2D elements.
\image html adaptive1d.png
-<b>Min size</b> parameter limits minimal segment size. <b>Max size</b>
-parameter defines length of segments on stright edges. \b Deflection
-parameter gives maximal distance of a segment from a curved edge.
+- <b>Min size</b> parameter limits the minimal segment size.
+- <b>Max size</b> parameter defines the length of segments on straight edges.
+- \b Deflection parameter gives maximal distance of a segment from a curved edge.
-\image html adaptive1d_sample_mesh.png "A geometry and a mesh generated on this geometry using Adaptive hypothesis and Netgen 2D algorithm - the size of mesh segments reflects size of geometrical features"
+\image html adaptive1d_sample_mesh.png "Adaptive hypothesis and Netgen 2D algorithm - the size of mesh segments reflects the size of geometrical features"
-<b>See Also</b> a \ref tui_1d_adaptive "sample TUI Script" that
-creates the mesh of the above image.
+<b>See Also</b> a \ref tui_1d_adaptive "sample TUI Script" that creates mesh of the above image.
<br>
\anchor arithmetic_1d_anchor
\page a2d_meshing_hypo_page 2D Meshing Hypotheses
-<br>
-<ul>
-<li>\ref max_element_area_anchor "Max Element Area"</li>
-<li>\ref length_from_edges_anchor "Length from Edges"</li>
-<li>\ref hypo_quad_params_anchor "Quadrangle parameters"</li>
-</ul>
+- \ref max_element_area_anchor "Max Element Area"
+- \ref length_from_edges_anchor "Length from Edges"
+- \ref hypo_quad_params_anchor "Quadrangle parameters"
-<br>
\anchor max_element_area_anchor
<h2>Max Element Area</h2>
\image html max_el_area.png "In this example, Max. element area is very small compared to the 1D hypothesis"
<b>See Also</b> a sample TUI Script of a
-\ref tui_max_element_area "Maximum Element Area" hypothesis
-operation.
+\ref tui_max_element_area "Maximum Element Area" hypothesis operation.
-<br>
\anchor length_from_edges_anchor
<h2>Length from Edges</h2>
<b>See Also</b> a sample TUI Script of a
\ref tui_length_from_edges "Length from Edges" hypothesis operation.
-<br>
\anchor hypo_quad_params_anchor
<h2>Quadrangle parameters</h2>
segments on opposite sides to define the algorithm of transition
between them. The following types are available:
-<ul>
-<li><b>Standard</b> is the default case, when both triangles and quadrangles
- are possible in the transition area along the finer meshed sides.</li>
-<li><b>Triangle preference</b> forces building only triangles in the
- transition area along the finer meshed sides.
- <i>This type corresponds to <b>Triangle Preference</b> additional
- hypothesis, which is obsolete now.</i></li>
-<li><b>Quadrangle preference</b> forces building only quadrangles in the
- transition area along the finer meshed sides. This hypothesis has a
- restriction: the total quantity of segments on all
- four sides of the face must be even (divisible by 2).</li>
- <i>This type corresponds to <b>Quadrangle Preference</b>
- additional hypothesis, which is obsolete now.</i></li>
-<li><b>Quadrangle preference (reversed)</b> works in the same way and
+- <b>Standard</b> is the default case, when both triangles and quadrangles
+ are possible in the transition area along the finer meshed sides.
+- <b>Triangle preference</b> forces building only triangles in the
+ transition area along the finer meshed sides.
+ \note This type corresponds to <b>Triangle Preference</b> additional hypothesis,
+ which is obsolete now.
+- <b>Quadrangle preference</b> forces building only quadrangles in the
+ transition area along the finer meshed sides. This hypothesis has a
+ restriction: the total quantity of segments on all
+ four sides of the face must be even (divisible by 2).
+ \note This type corresponds to <b>Quadrangle Preference</b> additional hypothesis,
+ which is obsolete now.
+- <b>Quadrangle preference (reversed)</b> works in the same way and
with the same restriction as <b>Quadrangle preference</b>, but
- the transition area is located along the coarser meshed sides.</li>
-<li><b>Reduced</b> type forces building only quadrangles and the transition
- between the sides is made gradually, layer by layer. This type has
- a limitation on the number of segments: one pair of opposite sides must have
- the same number of segments, the other pair must have an even difference
- between the numbers of segments on the sides. In addition, number
- of rows of faces between sides with different discretization
- should be enough for the transition. At the fastest transition
- pattern, three segments become one (see the image below), hence
- the least number of face rows needed to reduce from Nmax segments
- to Nmin segments is log<sub>3</sub>( Nmax / Nmin ). The number of
- face rows is equal to number of segments on each of equally
- discretized sides.
-\image html reduce_three_to_one.png "The fastest transition pattern: 3 to 1"
-</li>
-</ul>
+ the transition area is located along the coarser meshed sides.
+- <b>Reduced</b> type forces building only quadrangles and the transition
+ between the sides is made gradually, layer by layer. This type has
+ a limitation on the number of segments: one pair of opposite sides must have
+ the same number of segments, the other pair must have an even difference
+ between the numbers of segments on the sides. In addition, the number
+ of rows between sides with different discretization
+ should be enough for the transition. Following the fastest transition
+ pattern, three segments become one (see the image below), hence
+ the least number of face rows needed to reduce from Nmax segments
+ to Nmin segments is log<sub>3</sub>( Nmax / Nmin ). The number of
+ face rows is equal to the number of segments on each of equally
+ discretized sides.
+ \image html reduce_three_to_one.png "The fastest transition pattern: 3 to 1"
<b>See Also</b> a sample TUI Script of a
\ref tui_quadrangle_parameters "Quadrangle Parameters" hypothesis.
\page clipping_page Clipping
-\n Using this menu you can create cross-section views (clipping planes)
+\b Clipping allows creating cross-section views (clipping planes)
of your mesh.
-To start, click on the \em New button.
+It is available as a sub-item in the context menu of an active mesh.
-Now you must specify what mode of creating plane you want to choose:
-absolute or relative.
+To create a clipping plane, click on the \b New button in the dialog and choose how it is defined: by \b Absolute or \b Relative coordinates.
-<b>Absolute mode</b>
+<b>Absolute Coordinates</b>
\image html Clipping_Absolute.png
-- <b>Base point</b> - allows to define the coordinates of the base
+- <b>Base point</b> - allows defining the coordinates of the base
point for the clipping plane.
- <b>Reset</b> - returns the base point to coordinate origin.
-- <b>Direction</b> - allows to define the orientation of the
+- <b>Direction</b> - allows defining the orientation of the
clipping plane.
- - <b>Invert</b> - allows to select which part of the object will be
+ - <b>Invert</b> - allows selecting, which part of the object will be
removed and which will remain after clipping.
<b>Relative mode</b>
\image html Clipping_Relative.png
- \b Orientation ( ||X-Y, ||X-Z or ||Y-Z).
+
- \b Distance between the opposite extremities of the boundary box of
selected objects, if it is set to 0.5 the boundary box is split in two halves.
+
- \b Rotation (in angle degrees) <b>around X</b> (Y to Z) and <b>around
Y</b> (X to Z) (depending on the chosen Orientation)
-The parameters of cross-section:
-
-List of <b>meshes, sub-meshes and groups</b> to which the cross-section will be applied.
-
-<b>Select all</b> button allows to select and deselect all available
-objects at once.
-
-If the <b>Show preview</b> button is on, you can see the clipping plane
-in the <b>3D Viewer</b>.
+\image html before_clipping_preview.png "The preview plane and the cut object"
-\image html before_clipping.png "The plane and the cut object"
+The other parameters are available in both modes :
-Also there the possibility to interact directly with the clipping plane in 3D
-view with mouse. User can change the parameters of clipping plane by dialog data
-or by hand.
+- <b>OpenGL clipping</b> check-box allows choosing OpenGL native clipping, which clips the whole presentation. If it is unchecked, the clipping is done on the dataset i.e. only the visibility of separate mesh cells is changed (see the examples).
+- The List contains <b>Meshes, sub-meshes and groups</b> to which the cross-section will be applied.
+- <b>Select all</b> check-box allows to selecting and deselecting all available objects at once.
+- <b>Show preview</b> check-box shows the clipping plane in the <b>3D Viewer</b>.
+- <b>Auto Apply</b> check-box shows button is on, you can preview the
+cross-section in the <b>3D Viewer</b>.
-\image html before_clipping_preview.png "The preview plane and the cut object"
+It is also possible to interact with the clipping plane directly in 3D
+view using the mouse.
-If the <b>Auto Apply</b> button is on, you can preview the
-cross-section in the <b>3D Viewer</b>.
+To get a new object from \b Clipping, click \b Apply.
-Also, it is possible to specify the type of clipping: using dataset,
-i.e. it only changes the visibility of separate mesh cells or alternative
-clipping - an OpenGL native one, which clips overall presentation.
-For choosing use <b>OpenGL clipping</b> checkbox.
+<b>Examples:</b>
\image html dataset_clipping.png "The cross-section using dataset"
-
\image html opengl_clipping.png "The OpenGL cross-section"
-To get a new object from \b Clipping, click \b Apply.
*/
switching the mesh to Wireframe visualization mode or switching off
the visualization of faces and volumes (if any).
-<b>Bad Mesh to Group</b> button creates groups of the bad mesh entities,
-thus allowing you for more comfortable analysis of these entities.
+<b>Bad Mesh to Group</b> button creates groups of bad mesh entities
+to facilitate their analysis.
\image html show_bad_mesh.png
<em>Edges bounding a hole in the surface are shown in magenta using <b>Show
For example, you want to use standard algorithms to generate 1D and 3D
meshes and to create 2D mesh by your python code. Then you
<ol>
- <li> create a mesh object, assign an 1D algorithm,</li>
- <li> invoke \b Compute command, which computes an 1D mesh,</li>
+ <li> create a mesh object, assign a 1D algorithm,</li>
+ <li> invoke \b Compute command, which computes a 1D mesh,</li>
<li> assign <b>Use existing faces</b> and a 3D algorithm,</li>
<li> run your python code, which creates a 2D mesh,</li>
<li> invoke \b Compute command, which computes a 3D mesh.</li>
\page cutting_quadrangles_page Cutting quadrangles
-\n This operation allows cutting one or several quadrangle elements
-into two or four triangles.
+This operation allows cutting one or several quadrangle elements into two or four triangles.
<em>To cut quadrangles:</em>
-<ol>
-<li>Display a mesh, a 2D sub-mesh or a group of faces in the 3D viewer.</li>
-<li>In the \b Modification menu select the <b>Cutting of quadrangles</b> item or
+
+1) Display a mesh, a 2D sub-mesh or a group of faces in the 3D viewer.
+
+2) In the \b Modification menu select the <b>Cutting of quadrangles</b> item or
click <em>"Cutting of quadrangles"</em> button in the toolbar.
\image html image82.png
\image html a-cuttingofquadrangles.png
-<ul>
-<li>The main list contains the list of quadrangles selected for cutting. You can
- click on an quadrangle in the 3D viewer and it will be highlighted (lock Shift
- keyboard button to select several quadrangles). Click \b Add button and the ID of
- this quadrangle will be added to the list. To remove a selected element or elements
- from the list click \b Remove button. <b>Sort list</b> button allows to sort the
- list of IDs. \b Filter button allows to apply a definite filter to the selection of
- quadrangles.</li>
-<li><b>Apply to all</b> check box allows to cut all quadrangles of the selected mesh,
- sub-mesh or group.</li>
-<li>\b Preview provides a preview of cutting in the viewer. It is disabled for <b>Cut
- into 4 triangles</b> as this cutting way implies no ambiguity.</li>
-</ul>
-
-<ul>
-<li>\b Criterion defines a cutting way.
-<ul>
-<li><b>Cut into 4 triangles</b> selects cutting the quadrangle into four triangles by
- inserting a new node at the center of quadrangle. The other options selects cutting
- the quadrangle into two triangles by connecting nodes of either of the two diagonals.
-<li><b>Use diagonal 1-3</b> and <b>Use diagonal 2-4</b> allows to specify the
- opposite corners which will be connected to form two new triangles.</li>
-<li><b>Use numeric functor</b> allows to choose a quality metric which will be
- optimized when choosing a diagonal for cutting a quadrangle.
- <ul>
- <li><b>Minimum diagonal</b> cuts by the shortest diagonal.</li>
- <li><b>Aspect Ratio</b> cuts by the diagonal splitting the quadrangle into
- triangles with \ref aspect_ratio_page "Aspect Ratio" closer to 1.</li>
- <li><b>Minimum Angle</b> cuts by the diagonal splitting the quadrangle into
- triangles with \ref minimum_angle_page "Minimum Angle" closer to 60
- degrees.</li>
- <li><b>Skew</b> cuts by the diagonal splitting the quadrangle into triangles
- with \ref skew_page "Skew" closer to 0.0 degrees.</li>
- </ul>
-</li>
-</ul>
-</li>
-<li><b>Select from</b> allows to choose a sub-mesh or an existing group whose
- quadrangle elements will be automatically added to the main list.</li>
-</ul>
-</li>
-<li>Click the \b Apply or <b>Apply and Close</b> button to confirm the operation.</li>
-</ol>
+- The main list contains the list of quadrangles selected for cutting. You can
+click on a quadrangle in the 3D viewer and it will be highlighted (lock Shift
+keyboard button to select several quadrangles):
+ - Click \b Add button and the ID of this quadrangle will be added to the list.
+ - To remove a selected element or elements from the list click \b Remove button.
+ - <b>Sort list</b> button allows sorting the list of IDs.
+ - \b Filter button allows applying a definite filter to the selection of quadrangles.
+- <b>Apply to all</b> check box allows cutting all quadrangles of the selected mesh, sub-mesh or group.
+- \b Preview provides a preview of cutting in the viewer. It is disabled for <b>Cut into 4 triangles</b> as this cutting way implies no ambiguity.
+- \b Criterion defines the way of cutting:
+ - <b>Cut into 4 triangles</b> allows cutting a quadrangle into four triangles by inserting a new node at the center of the quadrangle. The other options allow cutting a quadrangle into two triangles by connecting the nodes of a diagonal.
+ - <b>Use diagonal 1-3</b> and <b>Use diagonal 2-4</b> allow specifying the opposite corners, which will be connected to form two new triangles.
+ - <b>Use numeric functor</b> allows selecting in the field below a quality metric, which will be optimized when choosing a diagonal for cutting a quadrangle:
+ - <b>Minimum diagonal</b> cuts by the shortest diagonal.
+ - <b>Aspect Ratio</b> cuts by the diagonal splitting the quadrangle into triangles with \ref aspect_ratio_page "Aspect Ratio" closer to 1
+ - <b>Minimum Angle</b> cuts by the diagonal splitting the quadrangle into triangles with \ref minimum_angle_page "Minimum Angle" closer to 60 degrees.
+ - <b>Skew</b> cuts by the diagonal splitting the quadrangle into triangles with \ref skew_page "Skew" closer to 0.0 degrees.
+- <b>Select from</b> allows choosing a sub-mesh or an existing group, whose quadrangle elements will be automatically added to the main list.
+
+3) Click the \b Apply or <b>Apply and Close</b> button to confirm the operation.
\image html image52.jpg "The chosen quadrangular element"
\page double_nodes_page Duplicate Nodes or/and Elements
-\n This operation allows to duplicate nodes or/and elements of your mesh.
-Duplication of nodes can be useful to emulate a crack in the model.
+\n This operation allows duplicating mesh nodes or/and elements, which can be useful to emulate a crack in the model.
+
Duplication consists in creation of mesh element "equal" to existing ones.
<em>To duplicate nodes or/and elements:</em>
<br>
\anchor mode_without_elem_anchor
-<h2>Duplicate nodes only</h2>
-In this mode the dialog looks like:
+<h2>Duplicate nodes only</h2>
\image html duplicate01.png
<li><b>Group of nodes to duplicate</b> (<em>mandatory</em>): these
nodes will be duplicated.</li>
<li><b>Group of elements to replace nodes with new ones</b>
- (<em>optional</em>): the new nodes will replace the nodes to
- duplicate within these elements.</li>
+ (<em>optional</em>): the new nodes will replace the duplicated nodes within these elements.</li>
<li><b>Construct group with newly created nodes</b> option
- (<em>checked by default</em>): if checked - the group with just
+ (<em>checked by default</em>): if checked - the group with newly
created nodes will be built.</li>
</ul>
-A schema below explains the crack emulation using the node duplication.
+A schema below illustrates how the crack is emulated using the node duplication.
\image html crack_emulation_double_nodes.png "Crack emulation"
This schema shows a virtual crack in a 2D mesh created using this duplication
-mode. In this schema:
-- Black balls are <b>nodes to duplicate</b>.
+mode:
+- Black balls are <b>duplicated nodes</b>.
- Red balls are <b>new nodes</b>.
- <b>Elements to replace nodes with new ones</b> are marked with green.
-Note that in reality <b>nodes to duplicate</b> coincide with <b>new nodes</b>.
-
+Note that in the reality <b>duplicated nodes</b> coincide with <b>new nodes</b>.
<br>
\anchor mode_with_elem_anchor
-<h2>Duplicate nodes and border elements</h2>
-In this mode the dialog looks like:
+
+<h2>Duplicate nodes and border elements</h2>
\image html duplicate02.png
(<em>mandatory</em>): the new nodes will replace the nodes to
duplicate within these elements.</li>
<li><b>Construct group with newly created elements</b> option
- (<em>checked by default</em>): if checked - the group of just created
+ (<em>checked by default</em>): if checked - the group of newly created
elements will be built.</li>
<li><b>Construct group with newly created nodes</b> option
- (<em>checked by default</em>): if checked - the group of just
+ (<em>checked by default</em>): if checked - the group of newly
created nodes will be built.</li>
</ul>
\image html crack_emulation_double_nodes_with_elems.png "Crack emulation"
This schema shows a virtual crack in a 2D mesh created using this duplication
mode. In this schema:
-- Black segments are <b>elements to duplicate</b> (edges in 2D case).
-- Black balls (except the lowest one) are nodes of <b>elements to
- duplicate</b> that are duplicated.
-- The lowest black ball is a <b>node not to duplicate</b>.
-- Red balls are <b>creates nodes</b>.
+- Black segments are <b>duplicated elements</b> (edges in 2D case).
+- Black balls (except for the lowest one) are duplicated nodes of <b>duplicated elements</b>.
+- The lowest black ball is the <b>non-duplicated node</b>.
+- Red balls are <b>newly created nodes</b>.
- Red segments are <b>created elements</b> (edges).
- <b>Elements to replace nodes with new ones</b> are marked with green.
-Note that in reality <b>nodes to duplicate</b> coincide with <b>new nodes</b>.
+Note that in the reality <b>nodes to duplicate</b> coincide with <b>new nodes</b>.
<br>
In a 3D case, where <b>elements to duplicate</b> are faces, the edges
located at the "crack" (if any) are cloned automatically.
\anchor mode_elem_only_anchor
<h2>Duplicate elements only</h2>
-This mode just duplicates given elements, i.e. creates new elements on
-the same nodes as the given elements.
+This mode duplicates the given elements, i.e. creates new elements with the same nodes as the given elements.
+
<br>
-In this mode the dialog looks like:
+
\image html duplicate03.png
-Parameters to be defined in this mode:
<ul>
<li><b>Group of elements to duplicate</b> (<em>mandatory</em>): these
elements will be duplicated.</li>
<li><b>Construct group with newly created elements</b> option
- (<em>checked by default</em>): if checked - the group of just created
- elements will be built. A name of the created group starts from
+ (<em>checked by default</em>): if checked - the group of newly created
+ elements will be built. The name of the created group starts from
"DoubleElements".</li>
</ul>
-
<br><b>See Also</b> a sample TUI Script of a
\ref tui_duplicate_nodes "Duplicate nodes or/and elements" operation.
/*!
-\page extrusion_along_path_page Extrusion along a path
+\page extrusion_along_path_page Extrusion along Path
-\n In principle, <b>Extrusion along a path</b> works in the same way
+\n In principle, <b>Extrusion along Path</b> works in the same way
as \b Extrusion, the main difference is that we define not a vector,
but a path of extrusion which must be a 1D mesh or 1D sub-mesh.
To get an idea of how this algorithm works, examine several examples,
<center>The same, but using angles {45, -45, 45, -45, 45, -45, 45,
-45}</center>
-<br><em>To use Extrusion along a path:</em>
+<br><em>To use Extrusion along Path:</em>
<ol>
<li>From the \b Modification menu choose the <b>Extrusion along a
path</b> item or click <em>"Extrusion along a path"</em> button in the toolbar.
<li>specify the <b>IDs of the elements</b> which will be extruded
<ul>
-<li><b>Select the whole mesh, submesh or group</b> activating this
-checkbox; or</li>
-<li>choose mesh elements with the mouse in the 3D Viewer. It is
+<li><b>Select the whole mesh, sub-mesh or group</b> activating the corresponding check-box; or</li>
+<li>Choose mesh elements with the mouse in the 3D Viewer. It is
possible to select a whole area with a mouse frame; or</li>
-<li>input the element IDs directly in <b>ID Elements</b> field. The selected elements will be highlighted in the
+<li>Input the element IDs directly in <b>ID Elements</b> field. The selected elements will be highlighted in the
viewer; or</li>
<li>apply Filters. <b>Set filter</b> button allows to apply a filter to the selection of elements. See more
about filters in the \ref selection_filter_library_page "Selection filter library" page.</li>
</ul>
</li>
-<li>define the \b Path along which the elements will be extruded.<br>
+<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
+<li>Activate <b>Generate Groups</b> check-box if it is necessary to copy the groups of
elements of the source mesh to the newly created one. </li>
</ul>
</li>
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.
+ Note that only the displacement of the <b>Base Point</b> exactly equals to the
+ path, and all other extruded elements simply keep their position relatively to the <b>Base Point</b> at each iteration.
</li>
<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
\image html meshexportmesh.png
-At export to MED and SAUV format files additional parameters are available.
+ There are additional parameters available at export to MED and SAUV format files.
<ul>
<li><b>Automatically create groups</b> check-box specifies whether to
create groups of all mesh entities of available dimensions or
not. If checked, the created groups have names like "Group_On_All_Nodes",
- "Group_On_All_Faces" etc.</li>
+ "Group_On_All_Faces", etc.</li>
<li><b>Automatically define space dimension</b> check-box specifies
whether to define space dimension for export by mesh configuration
or not. Usually the mesh is exported as a mesh in 3D space, just as
- it is in Mesh module. The mesh can be exported as a mesh in lower
- dimension in following cases, provided that this check-box is
- checked.
+ it is in Mesh module. The mesh can be exported as a mesh of a lower
+ dimension in the following cases, provided that this check-box is checked:
<ul>
- <li> 1D: if all mesh nodes lie on OX coordinate axis. </li>
- <li> 2D: if all mesh nodes lie on XOY coordinate plane. </li>
+ <li> <b>1D</b>: if all mesh nodes lie on OX coordinate axis. </li>
+ <li> <b>2D</b>: if all mesh nodes lie in XOY coordinate plane. </li>
</ul>
</li>
</ul>
\n \b MESH module of SALOME is destined for:
<ul>
-<li>\ref importing_exporting_meshes_page "import and export of meshes in different formats";</li>
+<li>\ref importing_exporting_meshes_page "import and export of meshes in various formats";</li>
<li>\subpage about_meshes_page "meshing geometrical models"
previously created or imported by the Geometry component; </li>
<li>\subpage viewing_meshes_overview_page "viewing created meshes" in
\subpage filters_page "Filters" functionality;</li>
<li>\subpage modifying_meshes_page "modifying meshes" with a vast
array of dedicated operations;</li>
-<li>different \subpage measurements_page "measurements" of the mesh objects;
-<li>easily setting parameters via the variables predefined in
-\subpage using_notebook_mesh_page "Salome notebook".</li>
+<li>various \subpage measurements_page "measurements" of the mesh objects.
</ul>
-The possibility to sort the created sub-meshes or groups is detailed on
-\subpage arranging_study_objects_page section.
+It is possible to easily set parameters via the variables predefined in
+\subpage using_notebook_mesh_page "Salome notebook".
Mesh module preferences are described in the \subpage mesh_preferences_page section of SALOME Mesh Help.
+Also, there is a possibility to \subpage arranging_study_objects_page "re-arrange sub-meshes and groups in the SALOME study".
Almost all mesh module functionalities are accessible via
\subpage smeshpy_interface_page "Mesh module Python interface".
Other functions are available in <a class="el" target="_new" href="../../tui/SMESH/docutils/index.html">salome.smesh python package</a>.
-
\image html image7.jpg "Example of MESH module usage for engineering tasks"
*/
other mesh objects - elements, meshes, sub-meshes and groups.
To start <b>Minimum Distance</b> operation, select <b>Minimum Distance</b>
-item from \b Measurements menu.
+tab in \b Measurements dialog.
\image html min_distance.png
-In the dialog box choose the first target and the second target mode by
+Choose the first and the second target by
switching the corresponding radio buttons, then select the objects the distance
between which is to be calculated (or input their IDs directly
-in case of nodes/elements) and press \em Compute button.
+in case of nodes/elements) and press \b Compute button.
-The following types of targets are supported:
-- \em Node: single mesh node;
-- \em Element: single mesh element (not available in this version);
-- \em Object: mesh, sub-mesh or group object (not available in this
+The following targets are supported:
+- \b Node: single mesh node;
+- \b Element: single mesh element (not available in this version);
+- \b Object: mesh, sub-mesh or group object (not available in this
version);
-- \em Origin: origin of the global co-ordinate system.
+- \b Origin: origin of the global co-ordinate system.
-The result will
-be shown in the bottom area of the dialog box. In addition, a simple
+The result will be shown in the bottom area of the dialog. In addition, a simple
preview will be shown in the 3D viewer.
\image html min_distance_preview.png
\section bounding_box_anchor Bounding Box
-This operation allows to calculate the bounding box of the selected
+This operation allows calculating the bounding box of the selected
object(s).
To start <b>Bounding Box</b> operation, select <b>Bounding Box</b>
-item from \b Measurements menu.
+tab in \b Measurements dialog.
\image html bnd_box.png
-In the dialog box choose the required type of the object by switching the
-corresponding radio button, select the object(s) and press \em Compute button.
+Choose the required type of the object by switching the corresponding radio button, select the object(s) and press \em Compute button.
The following types of input are available:
-- \em Objects: select one or several mesh, sub-mesh or group objects;
-- \em Nodes: select a set of mesh nodes;
-- \em Elements: select a set of mesh elements.
+- \b Objects: one or several mesh, sub-mesh or group objects;
+- \b Nodes: a set of mesh nodes;
+- \b Elements: a set of mesh elements.
The result of calculation will be shown in the bottom area of the
-dialog box. In addition, a simple preview will be shown in the 3D
-viewer.
+dialog. In addition, a simple preview will be shown in the 3D viewer.
\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.
+This operation provides calculation of length, area or volume for the the selected object:
+- \b Length is calculated as a sum of lengths of all 1D elements;
+- \b Area is a sum of areas of all 2D elements
+- \b Volume is a sum of volumes 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.
+To start a <b>Basic Properties</b> calculation, select <b>Length</b>, <b>Area</b> or <b>Volume</b> item.
\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.
+In the dialog box select the required type of calculation (length, area or volume) and the object (mesh, sub-mesh or group) and press \b Compute button.
-The result of calculation will be shown in the bottom area of the
-dialog box.
+The result of calculation will be shown in the bottom area of the dialog.
\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
+- If the mesh consists of 3D elements only, its "length" and "area" will be 0.
+- As calculation result is a sum of lengths, areas and volumes of all mesh elements, the
+ duplication is 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
+<b>See Also</b> a sample TUI Script of
\ref tui_measurements_page "Measurement operations".
*/
\anchor mesh_quality_info_anchor
<h2>Quality Information</h2>
-The <b>Quality Info</b> tab page of the dialog box provides overal
-mesh quality controls information on the selected object - mesh,
-sub-mesh or mesh group:
+The <b>Quality Info</b> tab provides overall information about mesh quality controls on the selected object - mesh, sub-mesh or mesh group:
- Name;
- Nodes information:
- - Number of the free nodes;
+ - Number of free nodes;
- Number of double nodes;
- Edges information:
- Number of double edges;
<center>\image html ctrlinfo.png
<em>"Quality Info" page</em></center>
-\note User can set "Double nodes tolerance" in the dialog for local change
+\note It is possible to set "Double nodes tolerance" in the dialog for a local change
or via the "Quality controls" in Mesh preferences.
-\note For the perfomance reason, all quality control values for the big meshes are
-computed only by demand. For this, the user should press the "compute"
-button (see picture). Also, values are automatically computed if the number of the
+\note For performance reasons, all quality control values for big meshes are
+computed only by demand. For this, press the "compute"
+button. Also, values are automatically computed if the number of
nodes / elements does not exceed the "Automatic controls compute limit" set
-via the "Mesh information" preferences (zero value means no limit).
+via the "Mesh information" preferences (zero value means that there is no limit).
The button \b "Dump" allows printing the information displayed in the
dialog box to a .txt file.
In case you get <b>Mesh Information</b> via a TUI script, the information is
displayed in the Python Console.
-<b>See the</b> \ref tui_viewing_mesh_infos "TUI Example".
+
+See the \ref tui_viewing_mesh_infos "TUI Example".
*/
- <b>Automatic Update</b>
- If you toggle <b>Automatic Update</b> checkbox, the model in your
- viewer automatically updated when you make changes in it, depending on
+ viewer will be automatically updated when you make changes in it, depending on
values of additional preferences specified below.
- - <b>Size limit (elements)</b> - allows to specify the maximum
+ - <b>Size limit (elements)</b> - allows specifying the maximum
number of elements in the resulting mesh for which the automatic updating
of the presentation is performed. This option affects only
<b>Compute</b> operation. Zero value means "no limit". Default value
is 500 000 mesh elements.
- <b>Incremental limit check</b> - when this control is switched on,
- check for mesh size limit will be applied not to total number of
- elements in resulting mesh, but iteratively to each entity types
- in the following order: 0D elements, edges, faces, volumes, balls;
- at each step number of entities of given type will be added to the
- total number of elements computed at previous step - if resulting
- number of elements does not exceed size limit, the entities of
- this type will be shown, otherwise user will be warned that some
- entities are not shown.
+ the mesh size limit check is not applied to the total number of
+ elements in the resulting mesh, it is applied iteratively to each entity type
+ in the following order: 0D elements, edges, faces, volumes, balls.
+ At each step the number of entities of a certain type is added to the
+ total number of elements computed at the previous step - if the resulting
+ number of elements does not exceed the size limit, the entities of
+ this type are shown, otherwise the user is warned that some entities are not shown.
- <b>Quality Controls</b>
- If you toggle <b>Display entity</b>, both faces and edges of an
information is shown:
- <b>Simple</b> - as a plain text
- <b>Tree</b> - in a tree-like form
- - <b>Automatic nodes compute limit</b> - allows to define the size limit for the
+ - <b>Automatic nodes compute limit</b> - allows defining the size limit for the
mesh groups for which the number of underlying nodes is calculated
automatically. If the group size exceeds the value set in the preferences,
the user will have to press \em Compute button explicitly. Zero value
means "no limit". By default the value is set to 100 000 mesh elements.
- - <b>Automatic controls compute limit</b> - allows to define the size limit for the
+ - <b>Automatic controls compute limit</b> - allows defining the size limit for the
mesh elements for which the Aspect Ratio histogram is calculated
automatically. If the mesh elements size exceeds the value set in the preferences,
- the user will have to press \em Compute button explicitly. Zero value
+ it is possible to press \b Compute button explicitly to calculate the histogram . Zero value
means "no limit". By default the value is set to 3 000 mesh elements.
- <b>Show details on groups in element information tab</b> - when
this option is switched off (default), only the names of groups, to which the node
or element belongs, are shown in the \ref mesh_element_info_anchor "Info Tab"
tab of "Mesh Information" dialog box. If this option is
switched on, the detailed information on groups is shown.
- - <b>Dump base information</b> - allows to dump base mesh information to the
+ - <b>Dump base information</b> - allows dumping base mesh information to the
file, see \ref mesh_infos_page.
- - <b>Dump element information</b> - allows to dump element information to the
+ - <b>Dump element information</b> - allows dumping element information to the
file, see \ref mesh_infos_page.
- - <b>Dump additional information</b> - allows to dump additional mesh
+ - <b>Dump additional information</b> - allows dumping additional mesh
information to the file, see \ref mesh_infos_page.
- - <b>Dump controls information</b> - allows to dump quality mesh
+ - <b>Dump controls information</b> - allows dumping quality mesh
information to the file, see \ref mesh_infos_page.
- <b>Automatic Parameters</b>
- <b>Ratio Bounding Box Diagonal / Max Size</b> - this parameter is
- used for automatic meshing: ratio between the bounding box of the
+ used for automatic meshing. This is the ratio between the bounding box of the
meshed object and the Max Size of segments.
- - <b>Default Number of Segments</b> - allows defining the default
+ - <b>Default Number of Segments</b> - defines the default
number of segments on each edge.
- <b>Mesh loading</b>
- If <b>No mesh loading from study file at hypothesis modification</b>
- checkbox is on, the mesh data will not be loaded from the study file
+ check-box is on, the mesh data will not be loaded from the study file
when a hypothesis is modified. This allows saving time by omitting
loading data of a large mesh that is planned to be recomputed with other parameters.
</li>
<li>Enter the coordinates of the destination point.</li>
<li>Check in <b>Find closest to destination</b> option or
-select the necessary node manually (X, Y, Z, dX, dY, dZ fields allow
-to see original coordinates and displacement of the node to move).
-\b Preview check-box allows to see the results of the operation.</li>
-<li>The <b>Update Destination</b> button is activated when <b>Find
-closest to destination</b> option is unchecked. Click the <b>Update
-Destination</b> button for update coordinates of the destination point
-from original coordinates of the node to move.</li>
+select the necessary node manually (X, Y, Z, dX, dY, dZ fields show the original coordinates and displacement of the node to move).
+\b Preview check-box shows the operation results.</li>
+<li> <b>Update Destination</b> button is activated when <b>Find closest to destination</b> option is unchecked. Click <b>Update Destination</b> button to update the coordinates of the destination point.</li>
<li>Click the \b Apply or <b>Apply and Close</b> button.</li>
</ol>
the color defined by the <b>Threshold Value</b>.
</li><li>
<b>Elements of a domain</b> allows selection of entities belonging to
-one domain of a mesh. The domain is a part of mesh not connected to
+one domain of a mesh. The domain is mesh part not connected to
other parts. <b>Threshold Value</b> locating any element of the domain can be either
- node ID (that you can pick in the Viewer) or
- geometrical vertex (that you can pick either in the Viewer or in the
// put nodes in array and find out indices of the same ones
const SMDS_MeshNode* aNodes [6];
- int sameInd [] = { 0, 0, 0, 0, 0, 0 };
+ int sameInd [] = { -1, -1, -1, -1, -1, -1 };
int i = 0;
SMDS_ElemIteratorPtr it = theTria1->nodesIterator();
while ( it->more() ) {
}
// find indices of 1,2 and of A,B in theTria1
- int iA = 0, iB = 0, i1 = 0, i2 = 0;
+ int iA = -1, iB = 0, i1 = 0, i2 = 0;
for ( i = 0; i < 6; i++ ) {
- if ( sameInd [ i ] == 0 ) {
+ if ( sameInd [ i ] == -1 ) {
if ( i < 3 ) i1 = i;
else i2 = i;
}
else if (i < 3) {
- if ( iA ) iB = i;
- else iA = i;
+ if ( iA >= 0) iB = i;
+ else iA = i;
}
}
// nodes 1 and 2 should not be the same
for( ; itPP != fullList.end(); itPP++) {
aPPs.push_back( *itPP );
if ( theHasAngles && itAngles != theAngles.end() )
- aPPs.back().SetAngle( *itAngles );
+ aPPs.back().SetAngle( *itAngles++ );
}
TNodeOfNodeListMap mapNewNodes;
* \return double - the angle (between -Pi and Pi), negative if the angle is concave,
* 1e100 in case of failure
* \waring Care about order of the EDGEs and their orientation to be as they are
- * within the FACE!
+ * within the FACE! Don't pass degenerated EDGEs neither!
*/
//================================================================================
if ( !TopExp::CommonVertex( theE1, theE2, vCommon ))
return angle;
double f,l;
- Handle(Geom2d_Curve) c2d1 = BRep_Tool::CurveOnSurface( theE1, theFace, f,l );
Handle(Geom_Curve) c1 = BRep_Tool::Curve( theE1, f,l );
Handle(Geom_Curve) c2 = BRep_Tool::Curve( theE2, f,l );
+ Handle(Geom2d_Curve) c2d1 = BRep_Tool::CurveOnSurface( theE1, theFace, f,l );
Handle(Geom_Surface) surf = BRep_Tool::Surface( theFace );
double p1 = BRep_Tool::Parameter( vCommon, theE1 );
double p2 = BRep_Tool::Parameter( vCommon, theE2 );
if ( c1.IsNull() || c2.IsNull() )
return angle;
- gp_Pnt2d uv = c2d1->Value( p1 );
+ gp_XY uv = c2d1->Value( p1 ).XY();
gp_Vec du, dv; gp_Pnt p;
surf->D1( uv.X(), uv.Y(), p, du, dv );
gp_Vec vec1, vec2, vecRef = du ^ dv;
+ int nbLoops = 0;
+ double p1tmp = p1;
+ while ( vecRef.SquareMagnitude() < std::numeric_limits<double>::min() )
+ {
+ double dp = ( l - f ) / 1000.;
+ p1tmp += dp * (( Abs( p1 - f ) > Abs( p1 - l )) ? +1. : -1.);
+ uv = c2d1->Value( p1tmp ).XY();
+ surf->D1( uv.X(), uv.Y(), p, du, dv );
+ vecRef = du ^ dv;
+ if ( ++nbLoops > 10 )
+ {
+#ifdef _DEBUG_
+ cout << "SMESH_MesherHelper::GetAngle(): Captured in a sigularity" << endl;
+#endif
+ return angle;
+ }
+ }
if ( theFace.Orientation() == TopAbs_REVERSED )
vecRef.Reverse();
c1->D1( p1, p, vec1 );
new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true );
fd->setWindowTitle( aTitle );
fd->setNameFilters( filters );
- fd->selectNameFilter(aDefaultFilter);
- fd->SetChecked(0,toCreateGroups);
- fd->SetChecked(1,toFindOutDim);
+ fd->selectNameFilter( aDefaultFilter );
+ fd->SetChecked( toCreateGroups, 0 );
+ fd->SetChecked( toFindOutDim, 1 );
if ( !anInitialPath.isEmpty() )
fd->setDirectory( anInitialPath );
fd->selectFile(aMeshName);
}
namespace SMESH
{
- class TElementSimulation {
+ class TElementSimulationQuad {
SalomeApp_Application* myApplication;
SUIT_ViewWindow* myViewWindow;
SVTK_ViewWindow* myVTKViewWindow;
SMESH_FaceOrientationFilter* myFaceOrientationFilter;
public:
- TElementSimulation (SalomeApp_Application* theApplication)
+ TElementSimulationQuad (SalomeApp_Application* theApplication)
{
myApplication = theApplication;
SUIT_ViewManager* mgr = theApplication->activeViewManager();
}
- ~TElementSimulation()
+ ~TElementSimulationQuad()
{
if (FindVtkViewWindow(myApplication->activeViewManager(), myViewWindow)) {
myVTKViewWindow->RemoveActor(myPreviewActor);
SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>
(SUIT_Session::session()->activeApplication());
- mySimulation = new SMESH::TElementSimulation (anApp);
+ mySimulation = new SMESH::TElementSimulationQuad (anApp);
mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
QString anElementName;
{
if ( IsValid() )
{
- SMESH::TElementSimulation::TVTKIds anIds;
+ SMESH::TElementSimulationQuad::TVTKIds anIds;
// Collect ids from the dialog
int anID;
namespace SMESH
{
- struct TElementSimulation;
+ struct TElementSimulationQuad;
}
//=================================================================================
SMESH::SMESH_Mesh_var myMesh;
SMESH_Actor* myActor;
- SMESH::TElementSimulation* mySimulation;
+ SMESH::TElementSimulationQuad* mySimulation;
QString myEntry;
GrpList myGroups;
SliderDistance = new QSlider( Qt::Horizontal, GroupParameters );
SliderDistance->setObjectName( "SliderDistance" );
- SliderDistance->setFocusPolicy( Qt::NoFocus );
SliderDistance->setMinimumSize( 300, 0 );
SliderDistance->setMinimum( 0 );
SliderDistance->setMaximum( 100 );
SliderRotation1 = new QSlider( Qt::Horizontal, GroupParameters );
SliderRotation1->setObjectName( "SliderRotation1" );
- SliderRotation1->setFocusPolicy( Qt::NoFocus );
SliderRotation1->setMinimumSize( 300, 0 );
SliderRotation1->setMinimum( -180 );
SliderRotation1->setMaximum( 180 );
SliderRotation2 = new QSlider( Qt::Horizontal, GroupParameters );
SliderRotation2->setObjectName( "SliderRotation2" );
- SliderRotation2->setFocusPolicy( Qt::NoFocus );
SliderRotation2->setMinimumSize( 300, 0 );
SliderRotation2->setMinimum( -180 );
SliderRotation2->setMaximum( 180 );
void Show( int subShapeID, GEOM::GEOM_Object_var aMainShape, bool only = false)
{
SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( SMESHGUI::GetSMESHGUI() );
+ SUIT_ResourceMgr* resMgr = SMESH::GetResourceMgr( SMESHGUI::GetSMESHGUI() );
std::string mainEntry;
if ( !aMainShape->_is_nil() )
mainEntry = aMainShape->GetStudyEntry();
TopAbs_ShapeEnum type( aShape.ShapeType() >= TopAbs_WIRE ? TopAbs_EDGE : TopAbs_FACE );
for ( TopExp_Explorer exp( aShape, type ); exp.More(); exp.Next() ) {
//checkTriangulation( exp.Current() );
- if ( GEOM_Actor* anActor = getActor( exp.Current() ))
+ if ( GEOM_Actor* anActor = getActor( exp.Current() ) ) {
+ int UNbIsos = resMgr->integerValue( "Geometry", "iso_number_u", 1);
+ int VNbIsos = resMgr->integerValue( "Geometry", "iso_number_v", 1);
+ int aNbIsos[2] = { UNbIsos ? UNbIsos : 1, VNbIsos ? VNbIsos : 1 };
+ anActor->SetNbIsos( aNbIsos );
myShownActors.push_back( anActor );
+ }
}
if ( type == TopAbs_FACE ) {
for ( TopExp_Explorer exp( aShape, TopAbs_EDGE ); exp.More(); exp.Next() ) {
updateButtons();
}
+ obj._retn(); // else myMesh is deleted by ~obj
myBusy = false;
return aResult;
{
const LightApp_SVTKDataOwner* owner =
dynamic_cast<const LightApp_SVTKDataOwner*> ( ow );
- if( owner )
+ if( owner ) {
myActors.append( dynamic_cast<SMESH_Actor*>( owner->GetActor() ) );
- else
+ }
+ else if ( ow ) { // SVTK selection disabled
+ QString entry = ow->entry();
+ myActors.append( SMESH::FindActorByEntry( entry.toStdString().c_str() ));
+ }
+ else {
myActors.append( 0 );
+ }
return true;
}
QVariant SMESHGUI_Selection::parameter( const int ind, const QString& p ) const
{
QVariant val;
- if ( p=="client" ) val = QVariant( LightApp_Selection::parameter( p ) );
- else if ( p=="type" ) val = QVariant( myTypes[ind] );
- else if ( p=="elemTypes" ) val = QVariant( elemTypes( ind ) );
- else if ( p=="isAutoColor" ) val = QVariant( isAutoColor( ind ) );
- else if ( p=="numberOfNodes" ) val = QVariant( numberOfNodes( ind ) );
- else if ( p=="dim" ) val = QVariant( dim( ind ) );
- else if ( p=="labeledTypes" ) val = QVariant( labeledTypes( ind ) );
- else if ( p=="shrinkMode" ) val = QVariant( shrinkMode( ind ) );
- else if ( p=="entityMode" ) val = QVariant( entityMode( ind ) );
- else if ( p=="controlMode" ) val = QVariant( controlMode( ind ) );
- else if ( p=="isNumFunctor" ) val = QVariant( isNumFunctor( ind ) );
- else if ( p=="displayMode" ) val = QVariant( displayMode( ind ) );
- else if ( p=="isComputable" ) val = QVariant( isComputable( ind ) );
- else if ( p=="isPreComputable" ) val = QVariant( isPreComputable( ind ) );
- else if ( p=="hasReference" ) val = QVariant( hasReference( ind ) );
- else if ( p=="isImported" ) val = QVariant( isImported( ind ) );
+ if ( p=="client" ) val = QVariant( LightApp_Selection::parameter( p ) );
+ else if ( p=="type" ) val = QVariant( myTypes[ind] );
+ else if ( p=="elemTypes" ) val = QVariant( elemTypes( ind ) );
+ else if ( p=="isAutoColor" ) val = QVariant( isAutoColor( ind ) );
+ else if ( p=="numberOfNodes" ) val = QVariant( numberOfNodes( ind ) );
+ else if ( p=="dim" ) val = QVariant( dim( ind ) );
+ else if ( p=="labeledTypes" ) val = QVariant( labeledTypes( ind ) );
+ else if ( p=="shrinkMode" ) val = QVariant( shrinkMode( ind ) );
+ else if ( p=="entityMode" ) val = QVariant( entityMode( ind ) );
+ else if ( p=="controlMode" ) val = QVariant( controlMode( ind ) );
+ else if ( p=="isNumFunctor" ) val = QVariant( isNumFunctor( ind ) );
+ else if ( p=="displayMode" ) val = QVariant( displayMode( ind ) );
+ else if ( p=="isComputable" ) val = QVariant( isComputable( ind ) );
+ else if ( p=="isPreComputable" ) val = QVariant( isPreComputable( ind ) );
+ else if ( p=="hasReference" ) val = QVariant( hasReference( ind ) );
+ else if ( p=="isImported" ) val = QVariant( isImported( ind ) );
else if ( p=="facesOrientationMode" ) val = QVariant( facesOrientationMode( ind ) );
- else if ( p=="groupType" ) val = QVariant( groupType( ind ) );
- else if ( p=="quadratic2DMode") val = QVariant(quadratic2DMode(ind));
- else if ( p=="isDistributionVisible") val = QVariant(isDistributionVisible(ind));
- else if ( p=="hasChildren") val = QVariant(hasChildren(ind));
- else if ( p=="nbChildren") val = QVariant(nbChildren(ind));
- else if ( p=="isContainer") val = QVariant(isContainer(ind));
-
- if( val.isValid() )
+ else if ( p=="groupType" ) val = QVariant( groupType( ind ) );
+ else if ( p=="quadratic2DMode") val = QVariant( quadratic2DMode( ind ) );
+ else if ( p=="isDistributionVisible") val = QVariant( isDistributionVisible( ind ) );
+ else if ( p=="hasChildren") val = QVariant( hasChildren( ind ) );
+ else if ( p=="nbChildren") val = QVariant( nbChildren( ind ) );
+ else if ( p=="isContainer") val = QVariant( isContainer( ind ) );
+
+ if ( val.isValid() )
return val;
else
return LightApp_Selection::parameter( ind, p );
TVisualObjPtr object = actor->GetObject();
if ( object ) {
if ( object->GetNbEntities( SMDSAbs_0DElement )) types.append( "Elem0d" );
- if ( object->GetNbEntities( SMDSAbs_Ball )) types.append( "BallElem" );
- if ( object->GetNbEntities( SMDSAbs_Edge )) types.append( "Edge" );
- if ( object->GetNbEntities( SMDSAbs_Face )) types.append( "Face" );
- if ( object->GetNbEntities( SMDSAbs_Volume )) types.append( "Volume" );
+ if ( object->GetNbEntities( SMDSAbs_Ball )) types.append( "BallElem" );
+ if ( object->GetNbEntities( SMDSAbs_Edge )) types.append( "Edge" );
+ if ( object->GetNbEntities( SMDSAbs_Face )) types.append( "Face" );
+ if ( object->GetNbEntities( SMDSAbs_Volume )) types.append( "Volume" );
}
}
return types;
SMESH_Actor* actor = getActor( ind );
if ( actor ) {
if ( actor->GetPointsLabeled()) types.append( "Point" );
- if ( actor->GetCellsLabeled()) types.append( "Cell" );
+ if ( actor->GetCellsLabeled()) types.append( "Cell" );
}
return types;
}
SMESH_Actor* actor = getActor( ind );
if ( actor ) {
switch( actor->GetQuadratic2DRepresentation() ) {
- case SMESH_Actor::eLines: return "eLines";
- case SMESH_Actor::eArcs: return "eArcs";
+ case SMESH_Actor::eLines: return "eLines";
+ case SMESH_Actor::eArcs: return "eArcs";
default: break;
}
}
{
SMESH_Actor* actor = getActor( ind );
if ( actor && actor->IsShrunkable() ) {
- if ( actor->IsShrunk() )
- return "IsShrunk";
- return "IsNotShrunk";
+ return actor->IsShrunk() ? "IsShrunk" : "IsNotShrunk";
}
return "IsNotShrinkable";
}
if ( aMode & SMESH_Actor::eFaces ) types.append( "Face" );
if ( aMode & SMESH_Actor::eEdges ) types.append( "Edge" );
if ( aMode & SMESH_Actor::e0DElements ) types.append( "Elem0d" );
- if ( aMode & SMESH_Actor::eBallElem ) types.append( "BallElem" );
+ if ( aMode & SMESH_Actor::eBallElem ) types.append( "BallElem" );
}
return types;
}
{
SMESH_Actor* actor = getActor( ind );
if ( actor ) {
- if ( actor->GetFacesOriented() )
- return "IsOriented";
- return "IsNotOriented";
+ return actor->GetFacesOriented() ? "IsOriented" : "IsNotOriented";
}
return "Unknown";
}
_PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
CORBA::Object_var obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() );
- if ( ! CORBA::is_nil( obj )) {
+ if ( !CORBA::is_nil( obj ) ) {
SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
- if ( ! mesh->_is_nil() )
+ if ( !CORBA::is_nil( mesh ) )
return mesh->GetAutoColor();
}
}
_PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
CORBA::Object_var obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() );
- if ( ! CORBA::is_nil( obj )) {
+ if ( !CORBA::is_nil( obj ) ) {
SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
- if ( ! mesh->_is_nil() )
+ if ( !CORBA::is_nil( mesh ) )
return mesh->NbNodes();
SMESH::SMESH_subMesh_var aSubMeshObj = SMESH::SMESH_subMesh::_narrow( obj );
- if ( !aSubMeshObj->_is_nil() )
+ if ( !CORBA::is_nil( aSubMeshObj ) )
return aSubMeshObj->GetNumberOfNodes(true);
SMESH::SMESH_GroupBase_var aGroupObj = SMESH::SMESH_GroupBase::_narrow( obj );
- if ( !aGroupObj->_is_nil() )
+ if ( !CORBA::is_nil( aGroupObj ) )
return aGroupObj->IsEmpty() ? 0 : 1; // aGroupObj->Size();
}
}
_PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
CORBA::Object_var obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() );
- if ( ! CORBA::is_nil( obj )) {
+ if ( !CORBA::is_nil( obj ) ) {
SMESH::SMESH_IDSource_var idSrc = SMESH::SMESH_IDSource::_narrow( obj );
- if ( ! idSrc->_is_nil() )
+ if ( !CORBA::is_nil( idSrc ) )
{
SMESH::array_of_ElementType_var types = idSrc->GetTypes();
- for ( int i = 0; i < types->length(); ++ i)
+ for ( int i = 0; i < types->length(); ++ i) {
switch ( types[i] ) {
case SMESH::EDGE : dim = std::max( dim, 1 ); break;
case SMESH::FACE : dim = std::max( dim, 2 ); break;
case SMESH::VOLUME: dim = std::max( dim, 3 ); break;
case SMESH::ELEM0D: dim = std::max( dim, 0 ); break;
case SMESH::BALL : dim = std::max( dim, 0 ); break;
- default:;
+ default: break;
}
+ }
}
}
}
{
if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" )
{
-/* Handle(SALOME_InteractiveObject) io =
- static_cast<LightApp_DataOwner*>( myDataOwners[ ind ].get() )->IO();
- if ( !io.IsNull() ) {
- SMESH::SMESH_Mesh_var mesh = SMESH::GetMeshByIO(io); // m,sm,gr->m
- if ( !mesh->_is_nil() ) {*/
- _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
- //FindSObject( mesh );
- if ( so ) {
- CORBA::Object_var obj = SMESH::SObjectToObject(so, SMESH::GetActiveStudyDocument());
- if(!CORBA::is_nil(obj)){
- SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
- if (!mesh->_is_nil()){
- if(mesh->HasShapeToMesh()) {
- GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so );
- return QVariant( !shape->_is_nil() );
- }
- else
- {
- return QVariant(!mesh->NbFaces()==0);
- }
- }
- else
- {
- GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so );
- return QVariant( !shape->_is_nil() );
- }
- }
+ _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
+ CORBA::Object_var obj = SMESH::SObjectToObject( so, SMESH::GetActiveStudyDocument() );
+ if( !CORBA::is_nil( obj ) ) {
+ SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
+ if ( !CORBA::is_nil( mesh ) ) {
+ if ( mesh->HasShapeToMesh() ) {
+ GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so );
+ return QVariant( !shape->_is_nil() );
+ }
+ else
+ {
+ return QVariant( mesh->NbFaces() !=0 );
}
-// }
-// }
+ }
+ else
+ {
+ GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so );
+ return QVariant( !shape->_is_nil() );
+ }
+ }
}
return QVariant( false );
}
{
if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" )
{
- QString ent = entry( ind );
- SMESH_Actor* actor = SMESH::FindActorByEntry( ent.toLatin1().data() );
+ SMESH_Actor* actor = SMESH::FindActorByEntry( entry( ind ).toLatin1().data() );
if ( actor && actor->hasIO() ) {
- if(SVTK_ViewWindow* aViewWindow = SMESH::GetCurrentVtkView())
+ if ( SVTK_ViewWindow* aViewWindow = SMESH::GetCurrentVtkView() )
return QVariant( aViewWindow->isVisible( actor->getIO() ) );
}
}
if ( ind >= 0 )
{
_PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
- return SMESH::GetActiveStudyDocument()->GetUseCaseBuilder()->HasChildren( sobj );
+ if ( sobj )
+ return SMESH::GetActiveStudyDocument()->GetUseCaseBuilder()->HasChildren( sobj );
}
return false;
}
if ( ind >= 0 )
{
_PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
- if ( sobj->GetStudy()->GetUseCaseBuilder()->IsUseCaseNode( sobj ) ) {
+ if ( sobj && sobj->GetStudy()->GetUseCaseBuilder()->IsUseCaseNode( sobj ) ) {
_PTR(UseCaseIterator) it = sobj->GetStudy()->GetUseCaseBuilder()->GetUseCaseIterator( sobj );
- for (it->Init(false); it->More(); it->Next()) nb++;
+ for ( it->Init( false ); it->More(); it->Next() ) nb++;
}
}
return nb;
int SMESHGUI_Selection::type( const QString& entry, _PTR(Study) study )
{
- _PTR(SObject) obj (study->FindObjectID(entry.toLatin1().data()));
- if( !obj )
- return -1;
-
- _PTR(SObject) ref;
- if( obj->ReferencedObject( ref ) )
- obj = ref;
-
- _PTR(SObject) objFather = obj->GetFather();
- _PTR(SComponent) objComponent = obj->GetFatherComponent();
-
- if( objComponent->ComponentDataType()!="SMESH" )
- return -1;
-
- if( objComponent->GetIOR()==obj->GetIOR() )
- return SMESH::COMPONENT;
-
- int aLevel = obj->Depth() - objComponent->Depth(),
- aFTag = objFather->Tag(),
- anOTag = obj->Tag(),
- res = -1;
-
- switch (aLevel)
- {
- case 1:
- if (anOTag >= SMESH::Tag_FirstMeshRoot)
- res = SMESH::MESH;
- break;
- case 2:
- switch (aFTag)
- {
- case SMESH::Tag_HypothesisRoot:
- res = SMESH::HYPOTHESIS;
- break;
- case SMESH::Tag_AlgorithmsRoot:
- res = SMESH::ALGORITHM;
- break;
- }
- break;
- case 3:
- switch (aFTag)
- {
- case SMESH::Tag_SubMeshOnVertex:
- res = SMESH::SUBMESH_VERTEX;
- break;
- case SMESH::Tag_SubMeshOnEdge:
- res = SMESH::SUBMESH_EDGE;
- break;
- case SMESH::Tag_SubMeshOnFace:
- res = SMESH::SUBMESH_FACE;
- break;
- case SMESH::Tag_SubMeshOnSolid:
- res = SMESH::SUBMESH_SOLID;
- break;
- case SMESH::Tag_SubMeshOnCompound:
- res = SMESH::SUBMESH_COMPOUND;
- break;
- default:
- if (aFTag >= SMESH::Tag_FirstGroup)
- res = SMESH::GROUP;
- else
- res = SMESH::SUBMESH;
+ int res = -1;
+ _PTR(SObject) obj = study->FindObjectID( entry.toLatin1().data() );
+ if ( obj ) {
+ _PTR(SObject) ref;
+ if ( obj->ReferencedObject( ref ) )
+ obj = ref;
+
+ _PTR(SObject) objFather = obj->GetFather();
+ _PTR(SComponent) objComponent = obj->GetFatherComponent();
+
+ if ( objComponent->ComponentDataType() == "SMESH" ) {
+ if ( objComponent->GetIOR() == obj->GetIOR() ) {
+ res = SMESH::COMPONENT;
+ }
+ else {
+ int aLevel = obj->Depth() - objComponent->Depth(),
+ aFTag = objFather->Tag(),
+ anOTag = obj->Tag();
+
+ switch ( aLevel )
+ {
+ case 1:
+ if ( anOTag >= SMESH::Tag_FirstMeshRoot )
+ res = SMESH::MESH;
+ break;
+ case 2:
+ switch ( aFTag )
+ {
+ case SMESH::Tag_HypothesisRoot: res = SMESH::HYPOTHESIS; break;
+ case SMESH::Tag_AlgorithmsRoot: res = SMESH::ALGORITHM; break;
+ default: break;
+ }
+ break;
+ case 3:
+ switch ( aFTag )
+ {
+ case SMESH::Tag_SubMeshOnVertex: res = SMESH::SUBMESH_VERTEX; break;
+ case SMESH::Tag_SubMeshOnEdge: res = SMESH::SUBMESH_EDGE; break;
+ case SMESH::Tag_SubMeshOnFace: res = SMESH::SUBMESH_FACE; break;
+ case SMESH::Tag_SubMeshOnSolid: res = SMESH::SUBMESH_SOLID; break;
+ case SMESH::Tag_SubMeshOnCompound: res = SMESH::SUBMESH_COMPOUND; break;
+ default:
+ if ( aFTag >= SMESH::Tag_FirstGroup) res = SMESH::GROUP;
+ else res = SMESH::SUBMESH;
+ break;
+ }
+ break;
+ }
+ }
}
- break;
}
-
return res;
}
QString SMESHGUI_Selection::typeName( const int t )
{
+ QString res = "Unknown";
switch( t )
{
case SMESH::HYPOTHESIS:
- return "Hypothesis";
+ res = "Hypothesis"; break;
case SMESH::ALGORITHM:
- return "Algorithm";
+ res = "Algorithm"; break;
case SMESH::MESH:
- return "Mesh";
+ res = "Mesh"; break;
case SMESH::SUBMESH:
- return "SubMesh";
+ res = "SubMesh"; break;
case SMESH::MESHorSUBMESH:
- return "Mesh or submesh";
+ res = "Mesh or submesh"; break;
case SMESH::SUBMESH_VERTEX:
- return "Mesh vertex";
+ res = "Mesh vertex"; break;
case SMESH::SUBMESH_EDGE:
- return "Mesh edge";
+ res = "Mesh edge"; break;
case SMESH::SUBMESH_FACE:
- return "Mesh face";
+ res = "Mesh face"; break;
case SMESH::SUBMESH_SOLID:
- return "Mesh solid";
+ res = "Mesh solid"; break;
case SMESH::SUBMESH_COMPOUND:
- return "Mesh compound";
+ res = "Mesh compound"; break;
case SMESH::GROUP:
- return "Group";
+ res = "Group"; break;
case SMESH::COMPONENT:
- return "Component";
+ res = "Component"; break;
default:
- return "Unknown";
+ break;
}
+ return res;
}
bool SMESHGUI_Selection::isImported( const int ind ) const
{
- QString e = entry( ind );
- _PTR(SObject) SO = SMESH::GetActiveStudyDocument()->FindObjectID( e.toLatin1().constData() );
bool res = false;
- if( SO )
+ _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().constData() );
+ if ( sobj )
{
- SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( SMESH::SObjectToObject( SO ) );
+ SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( SMESH::SObjectToObject( sobj ) );
if( !aMesh->_is_nil() )
{
SMESH::MedFileInfo_var inf = aMesh->GetMEDFileInfo();
QString SMESHGUI_Selection::groupType( int ind ) const
{
- QString e = entry( ind );
- _PTR(SObject) SO = SMESH::GetActiveStudyDocument()->FindObjectID( e.toLatin1().constData() );
- if( SO )
+ _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().constData() );
+ if ( sobj )
{
- SMESH::SMESH_Group_var g = SMESH::SObjectToInterface<SMESH::SMESH_Group>( SO );
- if( !g->_is_nil() )
+ SMESH::SMESH_Group_var g = SMESH::SObjectToInterface<SMESH::SMESH_Group>( sobj );
+ if ( !CORBA::is_nil( g ) )
return "Group";
-
- SMESH::SMESH_GroupOnGeom_var gog = SMESH::SObjectToInterface<SMESH::SMESH_GroupOnGeom>( SO );
- if( !gog->_is_nil() )
+ SMESH::SMESH_GroupOnGeom_var gog = SMESH::SObjectToInterface<SMESH::SMESH_GroupOnGeom>( sobj );
+ if( !CORBA::is_nil( gog ) )
return "GroupOnGeom";
-
- SMESH::SMESH_GroupOnFilter_var gof = SMESH::SObjectToInterface<SMESH::SMESH_GroupOnFilter>(SO);
- if ( !gof->_is_nil() )
+ SMESH::SMESH_GroupOnFilter_var gof = SMESH::SObjectToInterface<SMESH::SMESH_GroupOnFilter>( sobj );
+ if ( !CORBA::is_nil( gof ) )
return "GroupOnFilter";
}
return "";
<name>@default</name>
<message>
<source>SMESH_EXPORT_MESH</source>
- <translation>ã\83¡ã\83\83ã\82·ã\83¥ã\82\92ã\82¨ã\82¯ã\82¹ã\83\9dã\83¼ã\83\88ã\81\97ã\81¾ã\81\99ã\80\82</translation>
+ <translation>ã\83¡ã\83\83ã\82·ã\83¥ã\81®ã\82¨ã\82¯ã\82¹ã\83\9dã\83¼ã\83\88</translation>
</message>
<message>
<source>MED_FILES_FILTER</source>
</message>
<message>
<source>IDEAS_FILES_FILTER</source>
- <translation>ファイルのアイデア</translation>
+ <translation>IDEAS ファイル</translation>
</message>
<message>
<source>DAT_FILES_FILTER</source>
</message>
<message>
<source>GMF_ASCII_FILES_FILTER</source>
- <translation>組み換え ASCII ファイル</translation>
+ <translation>GMFアスキーファイル</translation>
</message>
<message>
<source>GMF_BINARY_FILES_FILTER</source>
- <translation>組み換えバイナリ ファイル</translation>
+ <translation>GMFバイナリファイル</translation>
</message>
<message>
<source>STL_BIN_FILES_FILTER</source>
- <translation>バイナリの STL ファイル</translation>
+ <translation>STL バイナリ ファイル</translation>
</message>
<message>
<source>ALL_FILES_FILTER</source>
</message>
<message>
<source>MIN_DIAG_ELEMENTS</source>
- <translation>最小斜め</translation>
+ <translation>最小の対角線</translation>
</message>
<message>
<source>ASPECTRATIO_3D_ELEMENTS</source>
- <translation>レポートの 3 D を形成</translation>
+ <translation>3D要素のアスペクト比</translation>
</message>
<message>
<source>ASPECTRATIO_ELEMENTS</source>
- <translation>ã\83¬ã\83\9dã\83¼ã\83\88 ã\83\95ã\82©ã\83¼ã\83 </translation>
+ <translation>ã\82¢ã\82¹ã\83\9aã\82¯ã\83\88æ¯\94</translation>
</message>
<message>
<source>COL_ALGO_HEADER</source>
</message>
<message>
<source>COMPERR_WARNING</source>
- <translation>COMPERR_WARNING</translation>
+ <translation>警告</translation>
</message>
<message>
<source>COMPERR_UNKNOWN</source>
<source>COMPERR_NO_MESH_ON_SHAPE</source>
<translation>スロット図形に関連付けられている要素がないです。</translation>
</message>
+ <message>
+ <source>COMPERR_BAD_PARMETERS</source>
+ <translation>無効な入力パラメータ</translation>
+ </message>
<message>
<source>EDITERR_NO_MEDIUM_ON_GEOM</source>
- <translation>ã\81\84ã\81\8fã\81¤ã\81\8b (ã\83\9eã\82¸ã\82§ã\83³ã\82¿è\89²ã\81§è¡¨ç¤ºã\81\95ã\82\8cã\81¦ã\81\84ã\82\8b) ã\83\8eã\83¼ã\83\89ç\92°å¢\83æªã\82\93ã\81 è¦\81ç´ ã\82\92é\81¿ã\81\91ã\82\8bã\81\9fã\82\81ã\81« places\n ã\81®ã\82¸ã\82ªã\83¡ã\83\88ã\83ªã\81§ã\81¯ã\81\82ã\82\8aません。</translation>
+ <translation>ã\83\8eã\83¼ã\83\89ã\81\8c ï¼\88ã\83\9eã\82¸ã\82§ã\83³ã\82¿è\89²ã\81§å\9b³ç¤ºï¼\89 ç\92°å¢\83ã\81«ã\82\88ã\81£ã\81¦æªã\82\93ã\81 è¦\81ç´ ã\82\92é\81¿ã\81\91ã\82\8bã\81\9fã\82\81ã\81«ã\82¸ã\82ªã\83¡ã\83\88ã\83ªã\81«é\85\8dç½®ã\81\95ã\82\8cません。</translation>
</message>
<message>
<source>SMESH_GEOM</source>
</message>
<message>
<source>MEN_ASPECT</source>
- <translation>ã\82¢ã\82¹ã\83\9aã\82¯ã\83\88æ¯\94</translation>
+ <translation>ã\83¬ã\83\9dã\83¼ã\83\88 ã\83\95ã\82©ã\83¼ã\83 </translation>
</message>
<message>
<source>MEN_ASPECT_3D</source>
- <translation>ã\82¢ã\82¹ã\83\9aã\82¯ã\83\88æ¯\94 3D</translation>
+ <translation>ã\83¬ã\83\9dã\83¼ã\83\88ã\81® 3 D ã\82\92å½¢æ\88\90</translation>
</message>
<message>
<source>MEN_AUTO_COLOR</source>
</message>
<message>
<source>MEN_BUILD_COMPOUND</source>
- <translation>ã\82³ã\83³ã\83\91ã\82¦ã\83³ã\83\89ã\81®ä½\9cæ\88\90</translation>
+ <translation>ã\82¢ã\82»ã\83³ã\83\96ã\83ªã\82\92ã\83\93ã\83«ã\83\89</translation>
</message>
<message>
<source>MEN_COPY_MESH</source>
</message>
<message>
<source>MEN_COMPUTE</source>
- <translation>計算</translation>
+ <translation>計算します。</translation>
</message>
<message>
<source>MEN_PRECOMPUTE</source>
</message>
<message>
<source>MEN_BALL</source>
- <translation>粒子</translation>
+ <translation>要素粒子</translation>
</message>
<message>
<source>MEN_BALLS</source>
</message>
<message>
<source>MEN_EXPORT_GMF</source>
- <translation>組み換えをエクスポートします。</translation>
+ <translation>GMF形式でエクスポート</translation>
</message>
<message>
<source>MEN_EXPORT_SAUV</source>
</message>
<message>
<source>MEN_EXTRUSION</source>
- <translation>面の押出し</translation>
+ <translation>Extrusion</translation>
</message>
<message>
<source>MEN_EXTRUSION_ALONG</source>
</message>
<message>
<source>MEN_FACES</source>
- <translation>フェース</translation>
+ <translation>Faces</translation>
</message>
<message>
<source>MEN_FILE</source>
</message>
<message>
<source>TOP_REORIENT_2D</source>
- <translation>ã\83\99ã\82¯ã\83\88ã\83«ã\81«ã\82\88ã\82\8bã\81¨é¡\94ã\82\92ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81\97ã\81¾ã\81\99ã\80\82</translation>
+ <translation>ã\83\99ã\82¯ã\83\88ã\83«ã\81«ã\82\88ã\81£ã\81¦ã\83\95ã\82§ã\83¼ã\82¹ã\81®å\90\91ã\81\8dã\82\92å¤\89ã\81\88ã\82\8b</translation>
</message>
<message>
<source>MEN_REORIENT_2D</source>
</message>
<message>
<source>STB_REORIENT_2D</source>
- <translation>ã\83\99ã\82¯ã\83\88ã\83«ã\81«ã\82\88ã\82\8bã\81¨é¡\94ã\82\92ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81\97ã\81¾ã\81\99ã\80\82</translation>
+ <translation>ã\83\99ã\82¯ã\83\88ã\83«ã\81«ã\82\88ã\81£ã\81¦ã\83\95ã\82§ã\83¼ã\82¹ã\81®å\90\91ã\81\8dã\82\92å¤\89ã\81\88ã\82\8b</translation>
</message>
<message>
<source>TOP_FIND_ELEM</source>
</message>
<message>
<source>MEN_GMF</source>
- <translation>GMF file</translation>
+ <translation>GMFファイル</translation>
</message>
<message>
<source>MEN_IMPORT_SAUV</source>
</message>
<message>
<source>MEN_MERGE</source>
- <translation>ノードを結合します。</translation>
+ <translation>節点の結合</translation>
</message>
<message>
<source>MEN_MERGE_ELEMENTS</source>
</message>
<message>
<source>MEN_BASIC_PROPERTIES</source>
- <translation>MEN_BASIC_PROPERTIES</translation>
+ <translation>基本的なプロパティ</translation>
</message>
<message>
<source>MEN_MEASURE_LENGTH</source>
- <translation>MEN_MEASURE_LENGTH</translation>
+ <translation>長さ</translation>
</message>
<message>
<source>STB_MEASURE_LENGTH</source>
- <translation>STB_MEASURE_LENGTH</translation>
+ <translation>選択したオブジェクトのすべての 1 次元要素の長さの合計を計算します。</translation>
</message>
<message>
<source>TOP_MEASURE_LENGTH</source>
- <translation>TOP_MEASURE_LENGTH</translation>
+ <translation>長さ</translation>
</message>
<message>
<source>MEN_MEASURE_AREA</source>
- <translation>MEN_MEASURE_AREA</translation>
+ <translation>エリア</translation>
</message>
<message>
<source>STB_MEASURE_AREA</source>
- <translation>STB_MEASURE_AREA</translation>
+ <translation>選択したオブジェクトのすべての 2D 要素の領域の合計を計算します。</translation>
</message>
<message>
<source>TOP_MEASURE_AREA</source>
- <translation>TOP_MEASURE_AREA</translation>
+ <translation>エリア</translation>
</message>
<message>
<source>MEN_MEASURE_VOLUME</source>
- <translation>MEN_MEASURE_VOLUME</translation>
+ <translation>ボリューム</translation>
</message>
<message>
<source>STB_MEASURE_VOLUME</source>
- <translation>STB_MEASURE_VOLUME</translation>
+ <translation>選択したオブジェクトのすべての 3 D 要素の量の合計を計算します。</translation>
</message>
<message>
<source>TOP_MEASURE_VOLUME</source>
- <translation>TOP_MEASURE_VOLUME</translation>
+ <translation>ボリューム</translation>
</message>
<message>
<source>MEN_MOVE</source>
</message>
<message>
<source>MEN_OVERALL_MESH_QUALITY</source>
- <translation>MEN_OVERALL_MESH_QUALITY</translation>
+ <translation>全体的なメッシュの品質</translation>
</message>
<message>
<source>MEN_DISTRIBUTION_CTRL</source>
</message>
<message>
<source>MEN_REVOLUTION</source>
- <translation>回転</translation>
+ <translation>Revolution</translation>
</message>
<message>
<source>MEN_ROT</source>
</message>
<message>
<source>MEN_SKEW</source>
- <translation>スキュー</translation>
+ <translation>傾斜</translation>
</message>
<message>
<source>MEN_SMOOTH</source>
</message>
<message>
<source>MEN_STD_INFO</source>
- <translation>メッシュに関する情報</translation>
+ <translation>標準的なメッシュ情報</translation>
</message>
<message>
<source>MEN_IMPORT_STL</source>
</message>
<message>
<source>MEN_TAPER</source>
- <translation>コーン</translation>
+ <translation>Cone</translation>
</message>
<message>
<source>MEN_TETRA</source>
</message>
<message>
<source>MEN_WHAT_IS</source>
- <translation>Whatis</translation>
+ <translation>メッシュ要素について</translation>
</message>
<message>
<source>MEN_WIRE</source>
- <translation>ワイヤー</translation>
+ <translation>Wires</translation>
</message>
<message>
<source>MEN_SPLIT_TO_TETRA</source>
</message>
<message>
<source>MESH_STANDALONE_GRP_CHOSEN</source>
- <translation>ã\82¸ã\82ªã\83¡ã\83\88ã\83ªã\81«ã\83ªã\83³ã\82¯ã\81\97ã\81¦ã\80\81ã\82°ã\83«ã\83¼ã\83\97ã\82\92é\81¸æ\8a\9e: %1ã\80\82ã\82¹ã\82¿ã\83³ã\83\89ã\82¢ã\83ã\83³ã\81®ã\82°ã\83«ã\83¼ã\83\97に変換しますか。</translation>
+ <translation>ã\82¸ã\82ªã\83¡ã\83\88ã\83ªã\81«ã\83ªã\83³ã\82¯ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\82°ã\83«ã\83¼ã\83\97ã\81\8cé\81¸æ\8a\9eã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bï¼\9a %1ã\80\82ã\82¹ã\82¿ã\83³ã\83\89ã\82¢ã\83ã\83³ ã\82¢ã\83¬ã\82¤に変換しますか。</translation>
</message>
<message>
<source>NODE_ID</source>
</message>
<message>
<source>SMESHGUI_INVALID_PARAMETERS</source>
- <translation>æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\83¼ã\81\8cæ£ã\81\97ã\81\8fã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ã\80\82ã\81\8fã\81 ã\81\95ã\81\84ã\80\82 ä¿®æ£ã\81\97ã\80\81ã\82\82ã\81\86ä¸\80度ã\82\84ã\82\8aç\9b´ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82</translation>
+ <translation>æ\8c\87å®\9aã\81\95ã\82\8cã\81\9fã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\83¼ã\81\8cæ£ã\81\97ã\81\8fã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ã\80\82ã\82\92ä¿®æ£ã\81\99ã\82\8bã\81\8aã\81\8bã\81\92ã\81§ã\80\81å\86\8d度å®\9fè¡\8cã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84</translation>
</message>
<message>
<source>SMESH_ADD_ALGORITHM</source>
</message>
<message>
<source>SMESH_ADD_HYPOTHESIS</source>
- <translation>前提条件</translation>
+ <translation>詳細設定</translation>
</message>
<message>
<source>SMESH_ADD_HYPOTHESIS_TITLE</source>
- <translation>仮説の割り当て</translation>
+ <translation>詳細設定の割り当て</translation>
</message>
<message>
<source>SMESH_ADD_HYP_WRN</source>
- <translation>"1%"が割り当てられた。しかし:。</translation>
+ <translation>'%' は帰因させる、しかし:</translation>
</message>
<message>
<source>SMESH_ADD_OCTA</source>
- <translation>6è§\92æ\9f±ã\82\92追å\8a ã\81\97ã\81¾ã\81\99ã\80\82</translation>
+ <translation>6è§\92æ\9f±ã\81®è¿½å\8a </translation>
</message>
<message>
<source>SMESH_ADD_OCTA_TITLE</source>
- <translation>6è§\92æ\9f±ã\82\92追å\8a ã\81\97ã\81¾ã\81\99ã\80\82</translation>
+ <translation>6è§\92æ\9f±ã\81®è¿½å\8a </translation>
</message>
<message>
<source>SMESH_ADD_POLYGON</source>
</message>
<message>
<source>SMESH_ADD_PYRAMID</source>
- <translation>ã\83\94ã\83©ã\83\9fã\83\83ã\83\89ã\82\92追å\8a ã\81\97ã\81¾ã\81\99ã\80\82</translation>
+ <translation>ã\83\94ã\83©ã\83\9fã\83\83ã\83\89ã\81®è¿½å\8a </translation>
</message>
<message>
<source>SMESH_ADD_PYRAMID_TITLE</source>
- <translation>ã\83\94ã\83©ã\83\9fã\83\83ã\83\89ã\82\92追å\8a ã\81\97ã\81¾ã\81\99ã\80\82</translation>
+ <translation>ã\83\94ã\83©ã\83\9fã\83\83ã\83\89ã\81®è¿½å\8a </translation>
</message>
<message>
<source>SMESH_ADD_QUADRANGLE</source>
</message>
<message>
<source>SMESH_ADD_BIQUADRATIC_TRIANGLE_TITLE</source>
- <translation>SMESH_ADD_BIQUADRATIC_TRIANGLE_TITLE</translation>
+ <translation>バイカッド三角形を追加します。</translation>
</message>
<message>
<source>SMESH_ADD_SUBMESH</source>
</message>
<message>
<source>SMESH_ADD_TETRAS</source>
- <translation>å\9b\9bé\9d¢ä½\93ã\82\92追å\8a ã\81\97ã\81¾ã\81\99ã\80\82</translation>
+ <translation>å\9b\9bé\9d¢ä½\93ã\81®è¿½å\8a </translation>
</message>
<message>
<source>SMESH_ADD_TETRAS_TITLE</source>
- <translation>å\9b\9bé\9d¢ä½\93ã\82\92追å\8a ã\81\97ã\81¾ã\81\99ã\80\82</translation>
+ <translation>å\9b\9bé\9d¢ä½\93ã\81®è¿½å\8a </translation>
</message>
<message>
<source>SMESH_ADD_TO_GROUP</source>
</message>
<message>
<source>SMESH_AUTO_DIM</source>
- <translation>SMESH_AUTO_DIM</translation>
+ <translation>自動的に空間の寸法を定義します。</translation>
</message>
<message>
<source>SMESH_REQUIRED_GROUPS</source>
- <translation>必要なエンティティのグループを作成します。</translation>
+ <translation>必要な種類のグループを作成します。</translation>
</message>
<message>
<source>SMESH_AVAILABLE</source>
</message>
<message>
<source>SMESH_BUT_OK</source>
- <translation>Ok(&O)</translation>
+ <translation>わかりました(&O)</translation>
</message>
<message>
<source>SMESH_BUT_OVERWRITE</source>
</message>
<message>
<source>SMESH_CANT_ADD_HYP</source>
- <translation>"1%"を割り当てることができません:</translation>
+ <translation>「%1」を割り当てることができません。</translation>
</message>
<message>
<source>SMESH_CANT_RM_HYP</source>
- <translation>"%1"の割り当て解除ができませんでした。</translation>
+ <translation>Désassigner '%' にできません。</translation>
</message>
<message>
<source>SMESH_CHECK_COLOR</source>
</message>
<message>
<source>SMESH_CONTINUE_MESH_VISUALIZATION</source>
- <translation>ã\83¡ã\83\83ã\82·ã\83¥è¡¨ç¤ºã\81«ã\81¯ã\83¡ã\83¢ã\83ªä¸\8d足ã\81§ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\81\8cã\82¯ã\83©ã\83\83ã\82·ã\83¥ã\81\97ã\81\9fæ§\98ã\81§ã\81\99ã\80\82\n表示ã\82\92ç¶\99ç¶\9aã\81\97ã\81¾ã\81\99ã\81\8bï¼\9f</translation>
+ <translation>ã\82·ã\82¹ã\83\86ã\83 ã\81¯ã\80\81ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\82\92ã\82¯ã\83©ã\83\83ã\82·ã\83¥ã\81\95ã\81\9bã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\83¡ã\83\83ã\82·ã\83¥ã\82\92表示ã\81\99ã\82\8bã\83¡ã\83¢ã\83ªã\81\8cä¸\8d足å®\9fè¡\8cã\81\99ã\82\8bã\82\88ã\81\86ã\81§ã\81\99ã\80\82è¦\96è\81´ç¶\9aè¡\8cã\81\97ã\81¾ã\81\99ã\81\8bã\80\82</translation>
</message>
<message>
<source>SMESH_COORDINATES</source>
</message>
<message>
<source>SMESH_DRS_4</source>
- <translation>ファイルが正しくない、データが不足しています。</translation>
+ <translation>MED ファイルは下位の接続の要素を格納します。彼らは読まれていません。</translation>
</message>
<message>
<source>SMESH_DRS_5</source>
- <translation>SMESH_DRS_5</translation>
+ <translation>ファイルが正しくない、データが不足しています。</translation>
</message>
<message>
<source>SMESH_DRS_EMPTY</source>
</message>
<message>
<source>SMESH_BALL_ELEM</source>
- <translation>粒子</translation>
+ <translation>要素粒子</translation>
</message>
<message>
<source>SMESH_BALL</source>
- <translation>粒子</translation>
+ <translation>要素粒子</translation>
</message>
<message>
<source>SMESH_BALLS</source>
</message>
<message>
<source>SMESH_EDGE</source>
- <translation>エッジ</translation>
+ <translation>Edge</translation>
</message>
<message>
<source>SMESH_EDGES</source>
</message>
<message>
<source>SMESH_EXPORT_FAILED</source>
- <translation>ã\83¡ã\83\83ã\82·ã\83¥ã\82\92ã\82¨ã\82¯ã\82¹ã\83\9dã\83¼ã\83\88ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\81§ã\81\97ã\81\9fã\80\82ã\83\87ã\82£ã\82¹ã\82¯ä¸\8aã\81®ç©ºã\81\8dé \98å\9f\9fã\82\92確èª\8dã\81\97ã\81¾ã\81\99。</translation>
+ <translation>ã\83¡ã\83\83ã\82·ã\83¥ã\82\92ã\82¨ã\82¯ã\82¹ã\83\9dã\83¼ã\83\88ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82ã\83\87ã\82£ã\82¹ã\82¯ã\81®ç©ºã\81\8dé \98å\9f\9fã\82\92確èª\8dã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84。</translation>
</message>
<message>
<source>SMESH_EXPORT_MED_DUPLICATED_GRP</source>
- <translation>ã\83¡ã\83\83ã\82·ã\83¥"%1"ã\81®ä¸ã\81«é\87\8dè¤\87ã\81\97ã\81\9fã\82°ã\83«ã\83¼ã\83\97ã\81®å\90\8då\89\8dã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\82¨ã\82¯ã\82¹ã\83\9dã\83¼ã\83\88ã\81¨ã\81\9dã\82\8cã\82\89ã\81®å\90\8då\89\8då¤\89æ\9b´ã\82\92ã\82ã\83£ã\83³ã\82»ã\83«ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82ã\81\95ã\82\82ã\81ªã\81\91ã\82\8cã\81°çµ\90æ\9e\9cã\83\95ã\82¡ã\82¤ã\83«ã\81®ä¸ã\81«ã\81§ã\81\8dã\82\8bã\81\84ã\81\8fã\81¤ã\81\8bã\82°ã\83«ã\83¼ã\83\97å\90\8dã\81\8cstudyã\81¨ä¸\80è\87´ã\81\97ã\81ªã\81\8fã\81ªã\82\8aã\81¾ã\81\99。続行しますか。</translation>
+ <translation>ã\80\8c%1ã\80\8dã\83¡ã\83\83ã\82·ã\83¥å\86\85ã\81§é\87\8dè¤\87ã\81\99ã\82\8bã\82°ã\83«ã\83¼ã\83\97ã\81®å\90\8då\89\8dã\81§ã\81\99ã\80\82ã\82¨ã\82¯ã\82¹ã\83\9dã\83¼ã\83\88ã\82\92ã\82ã\83£ã\83³ã\82»ã\83«ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\80\81å\90\8då\89\8dã\81®å¤\89æ\9b´ã\80\81çµ\90æ\9e\9cã\81® MED ã\83\95ã\82¡ã\82¤ã\83«å\90\8dã\81«é\9d\9eã\82°ã\83«ã\83¼ã\83\97ã\81®å ´å\90\88ã\81¯ç \94究ã\81®å\90\8då\89\8dã\82\92ä¸\80è\87´ã\81\97ã\81¾ã\81\9bã\82\93。続行しますか。</translation>
</message>
<message>
<source>SMESH_EXPORT_MED_DUPLICATED_MESH_NAMES</source>
- <translation>メッシュと同じ名前の選択であります。結果のファイルが正しくないことが可能です。続行しますか。</translation>
+ <translation>選択範囲内の同じ名前を持つメッシュがあります。結果のファイルが正しい可能性が。続行しますか。</translation>
</message>
<message>
<source>SMESH_EXPORT_MED_V2_1</source>
- <translation>メッシュ "%1" を MED 2.1に出力する際、多角形及び多面体要素があると失敗します。正しく出力できるよう MED 2.2をご使用ください。MED 2.1 へのエクスポートを実行しますか?</translation>
+ <translation>多角形、多面体要素は正しいエクスポート用 MED 2.1 MED 2.2 にメッシュ '%' のエクスポートの場合省略されます。MED 2.1 をエクスポートしますか。</translation>
</message>
<message>
<source>SMESH_EXPORT_MED_VERSION_COLLISION</source>
- <translation>ファイル"%1"のMED バージョンはわからない、もしくは選択したバージョンと一致しません。上書きしますか?</translation>
+ <translation>ファイル「%1」MED バージョンは知られていないか、選択したバージョンと一致しません。ファイルを上書きしますか。</translation>
</message>
<message>
<source>SMESH_EXPORT_MED_MESH_NAMES_COLLISION</source>
- <translation>é\81¸æ\8a\9eã\81\97ã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\81¯ã\81\99ã\81§ã\81«æ¬¡ã\81«ç¤ºã\81\99å\90\8då\89\8dã\81®ã\83¡ã\83\83ã\82·ã\83¥ã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82:\n %1\n\nçµ\90æ\9e\9cã\83\95ã\82¡ã\82¤ã\83«ã\81¯ã\80\81æ£ã\81\97ã\81\8fã\81ªã\81\84ã\81\8bã\82\82ã\81\97ã\82\8cã\81¾ã\81\9bã\82\93ã\80\82 \nã\81\9dã\82\8cã\82\89ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä¸\8aæ\9b¸ã\81\8dã\81\97ã\81¾ã\81\99ã\81\8bï¼\9f</translation>
+ <translation>é\81¸æ\8a\9eã\81\97ã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\81«ã\81¯æ\97¢ã\81«æ¬¡ã\81®å\90\8dã\82\92æ\8c\81ã\81¤ã\83¡ã\83\83ã\82·ã\83¥ã\81\8cå\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99: %1 çµ\90æ\9e\9cã\83\95ã\82¡ã\82¤ã\83«ã\81\8cæ£ã\81\97ã\81\8fã\81ªã\81\84å\8f¯è\83½æ\80§ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ä¸\8aæ\9b¸ã\81\8dã\81\97ã\81¾ã\81\99ã\81\8bã\80\82</translation>
</message>
<message>
<source>EXPORT_NOT_SUPPORTED</source>
- <translation>名前"%1"のメッシュを %2に出力します。\n%3 は無視されます \n続行しますか?。</translation>
+ <translation>名前 '%1' を %2 %3 とメッシュのエクスポートは無視されます。続行しますか。</translation>
</message>
<message>
<source>SMESH_EXTRUSION</source>
- <translation>押出し</translation>
+ <translation>Extrusion</translation>
</message>
<message>
<source>SMESH_EXTRUSION_TO_DISTANCE</source>
</message>
<message>
<source>SMESH_FACE</source>
- <translation>フェース</translation>
+ <translation>Face</translation>
</message>
<message>
<source>SMESH_FACES</source>
- <translation>SMESH_FACES</translation>
+ <translation>Faces</translation>
</message>
<message>
<source>SMESH_FEATUREANGLE</source>
</message>
<message>
<source>SMESH_FILE_EXISTS</source>
- <translation>ファイル"%1"は既に存在します。再書き込み、またはエクスポートするデータを追加しますか。</translation>
+ <translation>ファイル"%1"は既に存在します。それを書き直すか、エクスポートされたデータを追加したいですか?</translation>
</message>
<message>
<source>SMESH_FONT_ARIAL</source>
</message>
<message>
<source>SMESH_HYP_12</source>
- <translation>ジオメトリ アルゴリズムと一致しません、アルゴリズムでサポートされているジオメトリのマニュアルを参照してください</translation>
+ <translation>ジオメトリは、アルゴリズムと一致しません、アルゴリズムでサポートされるジオメトリのマニュアルを参照してください</translation>
</message>
<message>
<source>SMESH_HYP_13</source>
</message>
<message>
<source>SMESH_LOGARITHMIC_SCALARBAR</source>
- <translation>SMESH_LOGARITHMIC_SCALARBAR</translation>
+ <translation>対数</translation>
</message>
<message>
<source>SMESH_MAKE_GROUPS</source>
</message>
<message>
<source>SMESH_MEN_APPLIED_HYPOTHESIS</source>
- <translation>前提条件の適用</translation>
+ <translation>詳細設定の適用</translation>
</message>
<message>
<source>SMESH_MEN_COMPONENT</source>
</message>
<message>
<source>SMESH_MEN_HYPOTHESIS</source>
- <translation>前提条件</translation>
+ <translation>詳細設定</translation>
</message>
<message>
<source>SMESH_MEN_SubMeshesOnCompound</source>
</message>
<message>
<source>SMESH_MESHINFO_FACES</source>
- <translation>フェース</translation>
+ <translation>Faces</translation>
</message>
<message>
<source>SMESH_MESHINFO_HEXAS</source>
</message>
<message>
<source>SMESH_OBJECT_HYPOTHESIS</source>
- <translation>前提条件</translation>
+ <translation>詳細設定</translation>
</message>
<message>
<source>SMESH_OBJECT_MESH</source>
</message>
<message>
<source>SMESH_PLANE</source>
- <translation>平面</translation>
+ <translation>Plane</translation>
</message>
<message>
<source>SMESH_POINT</source>
</message>
<message>
<source>PREF_GROUP_NUMBERING</source>
- <translation>PREF_GROUP_NUMBERING</translation>
+ <translation>番号</translation>
</message>
<message>
<source>PREF_NUMBERING_NODE</source>
- <translation>PREF_NUMBERING_NODE</translation>
+ <translation>ノード: 色</translation>
</message>
<message>
<source>PREF_NUMBERING_ELEM</source>
- <translation>PREF_NUMBERING_ELEM</translation>
+ <translation>エッジ: 色</translation>
</message>
<message>
<source>PREF_NUMBERING_FONT</source>
- <translation>PREF_NUMBERING_FONT</translation>
+ <translation>フォント</translation>
</message>
<message>
<source>SMESH_PREFERENCES_SCALARBAR</source>
</message>
<message>
<source>MEN_BIQUADRATIC_QUADRANGLE</source>
- <translation>ã\83\90ã\82¤ã\82«ã\83\83ã\83\89å\9b\9bè§\92</translation>
+ <translation>ã\83©ã\82°ã\83©ã\83³ã\82¸ã\83¥ï¼\92次å\9b\9bè§\92å½¢</translation>
</message>
<message>
<source>TOP_BIQUADRATIC_QUADRANGLE</source>
</message>
<message>
<source>SMESH_BIQUADRATIC_TRIANGLE</source>
- <translation>SMESH_BIQUADRATIC_TRIANGLE</translation>
+ <translation>バイカッド三角形</translation>
</message>
<message>
<source>SMESH_BIQUADRATIC_TRIANGLES</source>
- <translation>SMESH_BIQUADRATIC_TRIANGLES</translation>
+ <translation>バイカッド三角形</translation>
</message>
<message>
<source>MEN_BIQUADRATIC_TRIANGLE</source>
- <translation>MEN_BIQUADRATIC_TRIANGLE</translation>
+ <translation>ラグランジュ2次三角形</translation>
</message>
<message>
<source>TOP_BIQUADRATIC_TRIANGLE</source>
- <translation>TOP_BIQUADRATIC_TRIANGLE</translation>
+ <translation>バイカッド三角形</translation>
</message>
<message>
<source>STB_BIQUADRATIC_TRIANGLE</source>
- <translation>STB_BIQUADRATIC_TRIANGLE</translation>
+ <translation>バイカッド三角形</translation>
</message>
<message>
<source>SMESH_QUADRATIC_TETRAHEDRON</source>
</message>
<message>
<source>SMESH_REVOLUTION</source>
- <translation>公転</translation>
+ <translation>Revolution</translation>
</message>
<message>
<source>SMESH_RM_HYP_WRN</source>
- <translation>"1%"は未割り当てです。しかし:</translation>
+ <translation>「%1」が原因ではない、しかし:</translation>
</message>
<message>
<source>SMESH_ROTATION</source>
</message>
<message>
<source>SMESH_VECTOR</source>
- <translation>ベクトル</translation>
+ <translation>Vector</translation>
</message>
<message>
<source>SMESH_VERTICAL</source>
</message>
<message>
<source>SMESH_VISU_PROBLEM_MEMORY</source>
- <translation>SMESH_VISU_PROBLEM_MEMORY</translation>
+ <translation>メッシュの表示の原因で失敗おそらくメモリ不足</translation>
</message>
<message>
<source>SMESH_VISU_PROBLEM_CLEAR</source>
- <translation>ã\83¡ã\83\83ã\82·ã\83¥ã\82\92表示ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\81ã\81\9fã\82\81ã\81\99ã\81¹ã\81¦ã\81®ã\83\93ã\82¸ã\83¥ã\82¢ã\83« ã\83\87ã\83¼ã\82¿ã\81¯å\89\8aé\99¤ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\80\81ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82\92表示ã\81\99ã\82\8bå\8d\81å\88\86ã\81ªã\83¡ã\83¢ã\83ªã\81\8cã\82¯ã\83©ã\83\83ã\82·ã\83¥ã\80\81ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³。アプリケーションがクラッシュする前に作業内容を保存します。</translation>
+ <translation>ã\83¡ã\83\83ã\82·ã\83¥ã\80\81ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82\92表示ã\81\99ã\82\8bå\8d\81å\88\86ã\81ªã\83¡ã\83¢ã\83ªã\82\92è¦\96è¦\9aå\8c\96ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ä¸\8då\8f¯è\83½ã\81\97ã\81\9fã\81\8cã\81£ã\81¦ã\81\99ã\81¹ã\81¦ã\81®ã\83\93ã\82¸ã\83¥ã\82¢ã\83« ã\83\87ã\83¼ã\82¿ã\81®ã\81\9fã\82\81å\89\8aé\99¤ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\82¯ã\83©ã\83\83ã\82·ã\83¥ ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\81«ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93。アプリケーションがクラッシュする前に作業内容を保存します。</translation>
</message>
<message>
<source>SMESH_VOLUME</source>
</message>
<message>
<source>SMESH_VOLUMES</source>
- <translation>SMESH_VOLUMES</translation>
+ <translation>ボリューム</translation>
</message>
<message>
<source>SMESH_WARNING</source>
</message>
<message>
<source>SMESH_WRN_HYPOTHESIS_NOTEXIST</source>
- <translation>仮説やアルゴリズムは存在しません。</translation>
+ <translation>詳細設定やアルゴリズムは存在しません。</translation>
</message>
<message>
<source>SMESH_WRN_MISSING_PARAMETERS</source>
</message>
<message>
<source>SMESH_WRN_SIZE_LIMIT_EXCEEDED</source>
- <translation>presentationは自動更新されておりません。: 新しいメッシュサイズ(%1 要素)は現在のサイズ制限(%2 要素)を越えております。メッシュモジュール設定を確認してください。</translation>
+ <translation>プレゼンテーションが更新されていない最後に自動的に: メッシュ (%1 項目) の新しいサイズが現在のサイズ制限 (%2 要素) を超えています。メッシュのモジュール設定の制限を確認してください。</translation>
</message>
<message>
<source>SMESH_WRN_SIZE_INC_LIMIT_EXCEEDED</source>
- <translation>SMESH_WRN_SIZE_INC_LIMIT_EXCEEDED</translation>
+ <translation>新しいメッシュ サイズ (%1 項目) 自動更新 (%2 項目) の現在のサイズ制限を超えています。次の要素が表示されない: 3%。「エンティティの表示」メニューを使用して表示します。</translation>
</message>
<message>
<source>SMESH_WRN_WARNING</source>
</message>
<message>
<source>STB_COMPUTE</source>
- <translation>計算</translation>
+ <translation>計算します。</translation>
</message>
<message>
<source>STB_PRECOMPUTE</source>
</message>
<message>
<source>STB_CONV_TO_QUAD</source>
- <translation>二次メッシュの作成</translation>
+ <translation>2次要素の追加</translation>
</message>
<message>
<source>STB_2D_FROM_3D</source>
- <translation>Border 要素を作成します。</translation>
+ <translation>境界要素の作成</translation>
</message>
<message>
<source>STB_MESH_ORDER</source>
</message>
<message>
<source>STB_0D_ON_ALL_NODES</source>
- <translation>0 D 要素の要素ノードを</translation>
+ <translation>ノードに d の要素を作成します。</translation>
</message>
<message>
<source>STB_ELEMS0D</source>
</message>
<message>
<source>STB_EDGE</source>
- <translation>エッジを作成</translation>
+ <translation>Edge</translation>
</message>
<message>
<source>STB_EDGES</source>
</message>
<message>
<source>STB_EXPORT_GMF</source>
- <translation>çµ\84ã\81¿æ\8f\9bã\81\88ã\83\95ã\82¡ã\82¤ã\83«ã\81«エクスポートします。</translation>
+ <translation>çµ\84ã\81¿æ\8f\9bã\81\88ã\82\92エクスポートします。</translation>
</message>
<message>
<source>STB_EXPORT_SAUV</source>
</message>
<message>
<source>STB_EXTRUSION</source>
- <translation>押し出しを作成</translation>
+ <translation>Extrusion</translation>
</message>
<message>
<source>STB_EXTRUSION_ALONG</source>
</message>
<message>
<source>STB_FACES</source>
- <translation>フェース</translation>
+ <translation>Faces</translation>
</message>
<message>
<source>STB_BARE_BORDER_VOLUME</source>
</message>
<message>
<source>STB_BARE_BORDER_FACE</source>
- <translation>顔の皮膚 1 d 要素が不足しています。</translation>
+ <translation>むき出しの境界線をもつフェース</translation>
</message>
<message>
<source>STB_OVER_CONSTRAINED_VOLUME</source>
</message>
<message>
<source>STB_MAP</source>
- <translation>軸に目盛り付け</translation>
+ <translation>パターンマッピング</translation>
</message>
<message>
<source>STB_MAX_ELEMENT_LENGTH_2D</source>
</message>
<message>
<source>STB_REVOLUTION</source>
- <translation>公転を作成</translation>
+ <translation>Revolution</translation>
</message>
<message>
<source>STB_ROT</source>
</message>
<message>
<source>STB_TAPER</source>
- <translation>コーン</translation>
+ <translation>Cone</translation>
</message>
<message>
<source>STB_TETRA</source>
</message>
<message>
<source>STB_SCALE</source>
- <translation>ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\81®ã\82µã\82¤ã\82ºã\82\92å¤\89æ\9b´</translation>
+ <translation>ã\82¹ã\82±ã\83¼ã\83ªã\83³ã\82°</translation>
</message>
<message>
<source>STB_DUPLICATE_NODES</source>
</message>
<message>
<source>STB_WHAT_IS</source>
- <translation>Whatis</translation>
+ <translation>要素またはメッシュ ノードについて</translation>
</message>
<message>
<source>STB_WIRE</source>
- <translation>ワイヤーを構築</translation>
+ <translation>ワイヤー</translation>
</message>
<message>
<source>TAPER_ELEMENTS</source>
- <translation>コーン</translation>
+ <translation>Cone</translation>
</message>
<message>
<source>TB_ADD</source>
- <translation>TB_ADD</translation>
+ <translation>要素追加ツールバー</translation>
</message>
<message>
<source>TB_ADDNON</source>
- <translation>TB_ADDNON</translation>
+ <translation>非線形要素追加ツールバー</translation>
</message>
<message>
<source>TB_REM</source>
- <translation>TB_REM</translation>
+ <translation>削除ツールバー</translation>
</message>
<message>
<source>TB_RENUMBER</source>
- <translation>TB_RENUMBER</translation>
+ <translation>番号変更ツールバー</translation>
</message>
<message>
<source>TB_TRANSFORM</source>
- <translation>TB_TRANSFORM</translation>
+ <translation>変換ツールバー</translation>
</message>
<message>
<source>TB_CTRL0D</source>
- <translation>TB_CTRL0D</translation>
+ <translation>節点制御ツールバー</translation>
</message>
<message>
<source>TB_CTRL1D</source>
- <translation>TB_CTRL1D</translation>
+ <translation>エッジ 制御ツールバー</translation>
</message>
<message>
<source>TB_CTRL2D</source>
- <translation>TB_CTRL2D</translation>
+ <translation>面制御ツールバー</translation>
</message>
<message>
<source>TB_CTRL3D</source>
- <translation>TB_CTRL3D</translation>
+ <translation>ボリューム 制御 ツールバー</translation>
</message>
<message>
<source>TB_MEASUREM</source>
- <translation>TB_MEASUREM</translation>
+ <translation>測定ツールバー</translation>
</message>
<message>
<source>TB_DISP_MODE</source>
- <translation>可視化モード バー</translation>
+ <translation>表示モード バー</translation>
</message>
<message>
<source>TB_HYPO</source>
</message>
<message>
<source>TB_MESH</source>
- <translation>メッシュのバー</translation>
+ <translation>メッシュ ツールバー</translation>
</message>
<message>
<source>TB_GROUP</source>
- <translation>TB_GROUP</translation>
+ <translation>グループツールバー</translation>
</message>
<message>
<source>TB_INFO</source>
- <translation>TB_INFO</translation>
+ <translation>情報ツールバー</translation>
</message>
<message>
<source>TB_ADD1D</source>
- <translation>TB_ADD1D</translation>
+ <translation>メッシュのバー</translation>
</message>
<message>
<source>TB_MODIFY</source>
- <translation>変更バー</translation>
+ <translation>å¤\89æ\9b´ã\83\84ã\83¼ã\83«ã\83\90ã\83¼</translation>
</message>
<message>
<source>TOP_ADV_INFO</source>
</message>
<message>
<source>TOP_COMPUTE</source>
- <translation>計算</translation>
+ <translation>計算します。</translation>
</message>
<message>
<source>TOP_PRECOMPUTE</source>
</message>
<message>
<source>TOP_CONNECTION</source>
- <translation>境界線上の複数の接続</translation>
+ <translation>複数の面に属する</translation>
</message>
<message>
<source>TOP_CONNECTION_2D</source>
- <translation>境界線上の複数の接続 2 D</translation>
+ <translation>複数の面に属する 2D</translation>
</message>
<message>
<source>TOP_CONSTRUCT_GROUP</source>
</message>
<message>
<source>TOP_CONV_TO_QUAD</source>
- <translation>二次メッシュの作成</translation>
+ <translation>2次要素の追加</translation>
</message>
<message>
<source>TOP_2D_FROM_3D</source>
- <translation>Border 要素を作成します。</translation>
+ <translation>境界要素の作成</translation>
</message>
<message>
<source>TOP_MESH_ORDER</source>
</message>
<message>
<source>TOP_0D_ON_ALL_NODES</source>
- <translation>0 D 要素の要素ノードを</translation>
+ <translation>ノードに d の要素を作成します。</translation>
</message>
<message>
<source>TOP_ELEM0D</source>
</message>
<message>
<source>TOP_BALL</source>
- <translation>粒子</translation>
+ <translation>要素粒子</translation>
</message>
<message>
<source>TOP_BALLS</source>
</message>
<message>
<source>TOP_EDGE</source>
- <translation>エッジを構築</translation>
+ <translation>Edge</translation>
</message>
<message>
<source>TOP_EDGES</source>
</message>
<message>
<source>TOP_EXTRUSION</source>
- <translation>押し出しを作成</translation>
+ <translation>Extrusion</translation>
</message>
<message>
<source>TOP_EXTRUSION_ALONG</source>
</message>
<message>
<source>TOP_FACES</source>
- <translation>フェース</translation>
+ <translation>Faces</translation>
</message>
<message>
<source>TOP_BARE_BORDER_VOLUME</source>
</message>
<message>
<source>TOP_BARE_BORDER_FACE</source>
- <translation>顔の皮膚 1 d 要素が不足しています。</translation>
+ <translation>むき出しの境界線をもつフェース</translation>
</message>
<message>
<source>TOP_OVER_CONSTRAINED_VOLUME</source>
</message>
<message>
<source>TOP_MAP</source>
- <translation>軸に目盛り付け</translation>
+ <translation>パターンマッピング</translation>
</message>
<message>
<source>TOP_MAX_ELEMENT_LENGTH_2D</source>
</message>
<message>
<source>TOP_IMPORT_GMF</source>
- <translation>çµ\84ã\81¿æ\8f\9bã\81\88ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82¤ã\83³ã\83\9dã\83¼ã\83\88</translation>
+ <translation>çµ\84ã\81¿æ\8f\9bã\81\88ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\82¤ã\83³ã\83\9dã\83¼ã\83\88ã\81\97ã\81¾ã\81\99ã\80\82</translation>
</message>
<message>
<source>TOP_GMF</source>
</message>
<message>
<source>TOP_REVOLUTION</source>
- <translation>公転を作成</translation>
+ <translation>Revolution</translation>
</message>
<message>
<source>TOP_ROT</source>
</message>
<message>
<source>TOP_TAPER</source>
- <translation>コーン</translation>
+ <translation>Cone</translation>
</message>
<message>
<source>TOP_TETRA</source>
</message>
<message>
<source>TOP_SCALE</source>
- <translation>ã\82µã\82¤ã\82ºã\82\92å¤\89æ\9b´</translation>
+ <translation>ã\82¹ã\82±ã\83¼ã\83ªã\83³ã\82°</translation>
</message>
<message>
<source>TOP_DUPLICATE_NODES</source>
</message>
<message>
<source>TOP_WHAT_IS</source>
- <translation>Whatis</translation>
+ <translation>メッシュの要素に関する情報</translation>
</message>
<message>
<source>TOP_WIRE</source>
- <translation>ワイヤーを構築</translation>
+ <translation>Wires</translation>
</message>
<message>
<source>UNKNOWN_CONTROL</source>
</message>
<message>
<source>UPDATE_DESTINATION</source>
- <translation>UPDATE_DESTINATION</translation>
+ <translation>宛先を更新します。</translation>
</message>
<message>
<source>VOLUME_3D_ELEMENTS</source>
</message>
<message>
<source>FULL_RECOMPUTE_QUESTION</source>
- <translation>\n ワークフロー メッシュ、最後の完全計算後編集されて、\nceci は、正しい計算を防ぐことができます変更を拒否するには、全体のメッシュを再計算しますか?。</translation>
+ <translation>メッシュは、最後の完全な計算後編集されています、これは正しい計算を防ぐことができます。変更を破棄するメッシュ全体を再計算しますか。</translation>
</message>
<message>
<source>SMESH_PREF_vol_precision</source>
</message>
<message>
<source>SMESH_PRECISION_HINT</source>
- <translation>ã\83¡ã\83\83ã\82·ã\83¥ã\83¢ã\82¸ã\83¥ã\83¼ã\83«è¨å®\9aã\81®ä¸ã\81®'%1'ã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\82\92ç\94¨ã\81\84ã\81¦å\85¥å\8a\9bã\81\97ã\81\9få\80¤ã\81®ç²¾åº¦ã\82\92調æ\95´ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99。</translation>
+ <translation>ã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\83¼ã\81®å\85¥å\8a\9bå\80¤ã\81®æ\9c\89å\8a¹æ¡\81æ\95°ã\82\92å¤\89æ\9b´ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ 'ã\83¡ã\83\83ã\82·ã\83¥ ã\83¢ã\82¸ã\83¥ã\83¼ã\83« ã\83\97ã\83ªã\83\95ã\82¡ã\83¬ã\83³ã\82¹ã\81® 1' %。</translation>
</message>
<message>
<source>REMOVE_ORPHAN_NODES_QUESTION</source>
</message>
<message>
<source>DEP_OBJECT</source>
- <translation>選択したオブジェクトは、別のオブジェクトの作成に使用されました。 削除することはできません。</translation>
+ <translation>選択したオブジェクトは、新しいものの作成に使用されました。このファイルは削除できません。</translation>
</message>
<message>
<source>SMESH_FREERAM</source>
- <translation>SMESH_FREERAM</translation>
+ <translation>Ram の空き容量</translation>
</message>
<message>
<source>SMESH_GIGABYTE</source>
- <translation>SMESH_GIGABYTE</translation>
+ <translation>%1 GB</translation>
</message>
<message>
<source>MEN_SORT_CHILD_ITEMS</source>
- <translation>MEN_SORT_CHILD_ITEMS</translation>
+ <translation>並べ替えの子供</translation>
</message>
<message>
<source>STB_SORT_CHILD_ITEMS</source>
- <translation>STB_SORT_CHILD_ITEMS</translation>
+ <translation>子アイテムを並べ替える</translation>
</message>
</context>
<context>
<name>SMESHGUI</name>
<message>
<source>NOT_A_VTK_VIEWER</source>
- <translation>このコマンドは、VTK ウィンドウからのみです。VTK ウィンドウを開き、もう一度やり直してください。</translation>
+ <translation>このコマンドは、VTK ウィンドウからのみ使用できます。VTK ウィンドウを開き、もう一度やり直してください。</translation>
</message>
<message>
<source>PREF_AUTO_GROUPS</source>
</message>
<message>
<source>PREF_INCREMENTAL_LIMIT</source>
- <translation>PREF_INCREMENTAL_LIMIT</translation>
+ <translation>増分限度額の確認</translation>
</message>
<message>
<source>PREF_BACKFACE</source>
- <translation>背面の色</translation>
+ <translation>カラー フロント バック</translation>
</message>
<message>
<source>PREF_VOLUME</source>
</message>
<message>
<source>PREF_REVERSEDVOLUME</source>
- <translation>逆ボリューム ・ カラー</translation>
+ <translation>ボリューム ・ カラーを反転します。</translation>
</message>
<message>
<source>PREF_WIREFRAME</source>
</message>
<message>
<source>PREF_PREVIEW_COLOR</source>
- <translation>PREF_PREVIEW_COLOR</translation>
+ <translation>プレビュー色</translation>
</message>
<message>
<source>PREF_NOTIFY_MODE</source>
</message>
<message>
<source>PREF_ELEM_INFO_GRP_DETAILS</source>
- <translation>PREF_ELEM_INFO_GRP_DETAILS</translation>
+ <translation>Dl 情報 page'element のグループの詳細を見る</translation>
</message>
<message>
<source>PREF_DUMP_BASE_INFO</source>
- <translation>PREF_DUMP_BASE_INFO</translation>
+ <translation>基本情報の書き出し</translation>
</message>
<message>
<source>PREF_DUMP_ELEM_INFO</source>
- <translation>PREF_DUMP_ELEM_INFO</translation>
+ <translation>要素情報の書き出し</translation>
</message>
<message>
<source>PREF_DUMP_ADD_INFO</source>
- <translation>PREF_DUMP_ADD_INFO</translation>
+ <translation>追加情報の書き出し</translation>
</message>
<message>
<source>PREF_DUMP_CTRL_INFO</source>
- <translation>PREF_DUMP_CTRL_INFO</translation>
+ <translation>品質情報の書き出し</translation>
</message>
<message>
<source>PREF_GPP_NODES_LIMIT</source>
</message>
<message>
<source>PREF_CTRL_LIMIT</source>
- <translation>PREF_CTRL_LIMIT</translation>
+ <translation>自動制御計算の制限</translation>
</message>
<message>
<source>SMESH_PREF_GROUP_PRECISION</source>
</message>
<message>
<source>PREF_WIDTH</source>
- <translation>ç·\9aã\81®å¹\85</translation>
+ <translation>ç·\9aã\81®å¤ªã\81\95</translation>
</message>
<message>
<source>PREF_OUTLINE_WIDTH</source>
- <translation>ã\82¢ã\82¦ã\83\88ã\83©ã\82¤ã\83³ã\81®å¹\85</translation>
+ <translation>ã\82¢ã\82¦ã\83\88ã\83©ã\82¤ã\83³ã\81®å¤ªã\81\95</translation>
</message>
<message>
<source>PREF_PREVIEW_CHUNK_SIZE</source>
<name>SMESHGUI_Add0DElemsOnAllNodesDlg</name>
<message>
<source>CAPTION</source>
- <translation>0 D 要素の要素ノードを</translation>
+ <translation>ノードに d の要素を作成します。</translation>
</message>
<message>
<source>OBJ_BTN</source>
</message>
<message>
<source>NB_NEW_0D</source>
- <translation>%1 0 D 要素の作成</translation>
+ <translation>作成された %1 項目 d</translation>
</message>
</context>
<context>
<name>SMESHGUI_Add0DElemsOnAllNodesOp</name>
<message>
<source>NB_NEW_0D</source>
- <translation>%1 0 D 要素の作成</translation>
+ <translation>作成された %1 項目 d</translation>
</message>
</context>
<context>
</message>
<message>
<source>SMESH_ADD_BIQUADRATIC_TRIANGLE</source>
- <translation>SMESH_ADD_BIQUADRATIC_TRIANGLE</translation>
+ <translation>バイカッド三角形を追加します。</translation>
</message>
<message>
<source>SMESH_CORNER_NODES</source>
<name>SMESHGUI_BuildCompoundDlg</name>
<message>
<source>COMPOUND</source>
- <translation>コンパウンド</translation>
+ <translation>Compound</translation>
</message>
<message>
<source>COMPOUND_MESH</source>
</message>
<message>
<source>GROUP_OF_BAD_MESH</source>
- <translation>GROUP_OF_BAD_MESH</translation>
+ <translation>グループに不正メッシュ</translation>
</message>
</context>
<context>
<name>SMESHGUI_ComputeDlg_QThreadQDialog</name>
<message>
<source>CANCEL</source>
- <translation>CANCEL</translation>
+ <translation>キャンセル</translation>
</message>
<message>
<source>CANCELING</source>
- <translation>CANCELING</translation>
+ <translation>キャンセルしています.</translation>
</message>
<message>
<source>TITLE</source>
- <translation>TITLE</translation>
+ <translation>計算</translation>
</message>
</context>
<context>
</message>
<message>
<source>COMPUTE</source>
- <translation>計算</translation>
+ <translation>計算します。</translation>
</message>
</context>
<context>
<name>SMESHGUI_PrecomputeOp</name>
<message>
<source>CLEAR_SUBMESH_QUESTION</source>
- <translation>一時 sous-maillages は、選択したジオメトリのプレビューの操作を作成しています。すべてのこれらの sous maillages を削除しますか。</translation>
+ <translation>一時的なサブメッシュを作成されている、選択したジオメトリのプレビュー中に。これらのすべてのサブ メッシュを削除しますか。</translation>
</message>
<message>
<source>SMESH_WRN_NOTHING_PREVIEW</source>
</message>
<message>
<source>SMESH_REJECT_MESH_ORDER</source>
- <translation>Sous maillages の優先順位は、プレビューで変更されています。初期の優先度を復元しますか。</translation>
+ <translation>サブメッシュの優先順位は、プレビュー時に変更されました。初期の優先度を復元しますか。</translation>
</message>
</context>
<context>
<name>SMESHGUI_ConvToQuadDlg</name>
<message>
<source>CAPTION</source>
- <translation>二次要素への変換/二次要素からの変換</translation>
+ <translation>2次要素の追加</translation>
</message>
<message>
<source>MEDIUMNDS</source>
</message>
<message>
<source>RADIOBTN_3</source>
- <translation>RADIOBTN_3</translation>
+ <translation>Bi quadratique への変換します。</translation>
</message>
<message>
<source>NON_CONFORM_WARNING</source>
<name>SMESHGUI_ConvToQuadOp</name>
<message>
<source>MESH_IS_NOT_SELECTED</source>
- <translation>選択したメッシュはありません。メッシュを選択し、もう一度やり直してください。</translation>
+ <translation>メッシュが選択されていないこのことを示すしてくださいもう一度やり直してください</translation>
</message>
<message>
<source>REF_IS_NULL</source>
<name>SMESHGUI_CreatePatternDlg</name>
<message>
<source>CAPTION</source>
- <translation>ã\83\91ã\82¿ã\83¼ã\83³ã\81®ä½\9cæ\88\90</translation>
+ <translation>ã\83\91ã\82¿ã\83¼ã\83³ã\83\9eã\83\83ã\83\94ã\83³ã\82°</translation>
</message>
<message>
<source>DEFAULT_2D</source>
</message>
<message>
<source>ERROR_OF_CREATION</source>
- <translation>æ\83\85å ±ã\81®æ\9c\89å\8a¹æ\80§ã\82\92確èª\8dã\81\99ã\82\8bã\81«ã\81¯ã\80\81å\9c°ä¸\8aã\81®ä½\9cæ\88\90ä¸ã\81«å\86\85é\83¨ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9f</translation>
+ <translation>ã\82°ã\83©ã\82¦ã\83³ã\83\89 ã\83\81ã\82§ã\83\83ã\82¯ã\80\81æ\83\85å ±ã\81®å¦¥å½\93æ\80§ã\81®ä½\9cæ\88\90ä¸ã\81«å\86\85é\83¨ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9f</translation>
</message>
<message>
<source>ERROR_OF_SAVING</source>
- <translation>フィルターのライブラリの保護でにエラーが発生しました。情報の有効性をチェックします。</translation>
+ <translation>地面の記録中に内部エラーが発生しました。ディスクの空き領域と、このファイルへの書き込み権限を確認してください。</translation>
</message>
<message>
<source>ERR_LOADF_CANT_PROJECT</source>
</message>
<message>
<source>TO_4_TRIA</source>
- <translation>TO_4_TRIA</translation>
+ <translation>4 三角形にカットします。</translation>
</message>
</context>
<context>
<name>SMESHGUI_DeleteGroupDlg</name>
<message>
<source>CAPTION</source>
- <translation>中身ごとグループの削除</translation>
+ <translation>グループとその内容を削除します。</translation>
</message>
<message>
<source>NO_SELECTED_GROUPS</source>
- <translation>選択したグループがない、グループを選択し、もう一度やり直してください。</translation>
+ <translation>あるなし選択したグループをグループを選択し、もう一度やり直してください</translation>
</message>
<message>
<source>SELECTED_GROUPS</source>
</message>
<message>
<source>SHOW_NODES_IDS</source>
- <translation>SHOW_NODES_IDS</translation>
+ <translation>二重ノード Id を表示します。</translation>
</message>
<message>
<source>SHOW_ELEMS_IDS</source>
- <translation>SHOW_ELEMS_IDS</translation>
+ <translation>二重要素の Id を表示します。</translation>
</message>
<message>
<source>EXCLUDE_GROUPS</source>
</message>
<message>
<source>EXTRUSION_ALONG_PATH</source>
- <translation>経路に沿って押出し</translation>
+ <translation>経路に沿って押し出し</translation>
</message>
<message>
<source>EXTR_BAD_STARTING_NODE</source>
<name>SMESHGUI_FilterDlg</name>
<message>
<source>BAD_SHAPE_NAME</source>
- <translation>現在のstudyではジオメトリオブジェクト"%1"はありません、有効なオブジェクトを選択し、もう一度やり直してください。</translation>
+ <translation>本研究ではないオブジェクト ジオメトリ '%' がある、有効なオブジェクトを選択して、もう一度やり直してください。</translation>
</message>
<message>
<source>CURRENT_DIALOG</source>
</message>
<message>
<source>SHAPE_IS_NOT_A_CYLINDER</source>
- <translation>"%1" 円筒面選択ではない円筒サーフェスともう一度やり直してください</translation>
+ <translation>"%1"は、円筒面を選択していないが、円筒面ともう一度やり直してください。</translation>
</message>
<message>
<source>SHAPE_IS_NOT_A_FACE</source>
- <translation>"%1" は面ではありません。\n面を選択してもう一度やり直してください。</translation>
+ <translation>"%1"は、顔を選択していないが、顔ともう一度やり直してください。</translation>
</message>
<message>
<source>SHAPE_IS_NOT_A_PLANE</source>
- <translation>"%1" は平面ではありません\n平面を選択し、もう一度やり直してください。</translation>
+ <translation>"%1"は計画を選択していないが、平面ともう一度やり直してください。</translation>
</message>
<message>
<source>FACE_ID_NOT_SELECTED</source>
- <translation>メッシュフェースが選択されていません。\nもう一度指定してやり直してください</translation>
+ <translation>標準顔メッシュが選択されていません。それを入力し、もう一度やり直してください。</translation>
</message>
<message>
<source>NOT_FACE_ID</source>
- <translation>"%1" では、顔、メッシュ内の有効な ID は一致しません。アドレスを選択し、もう一度やり直してください。</translation>
+ <translation>'%' は、メッシュの側の任意の有効な ID と一致します。面を選択し、もう一度やり直してください。</translation>
</message>
<message>
<source>SOURCE</source>
</message>
<message>
<source>ASSIGN_NEW_NAME</source>
- <translation>ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81«æ\97¢ã\81«"%1"追å\8a ã\83\95ã\82£ã\83«ã\82¿ã\83¼ã\81«èµ·å\9b ã\81\99ã\82\8b"%2"ã\81®æ\96°ã\81\97ã\81\84å\90\8då\89\8då\90\8då\89\8dã\83\95ã\82£ã\83«ã\82¿ã\83¼ã\81\8cå\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99</translation>
+ <translation>ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81¯ã\81\99ã\81§ã\81«ã\83\95ã\82£ã\83«ã\82¿ã\83¼ã\81\8cå\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\82\8bå\90\8då\89\8d '%' ã\81§æ\96°ã\81\97ã\81\84å\90\8då\89\8d '%' ã\81¯ã\80\81追å\8a ã\81®ã\83\95ã\82£ã\83«ã\82¿ã\83¼ã\81«èµ·å\9b ã\81\97ã\81¾ã\81\99ã\80\82</translation>
</message>
<message>
<source>COPY_FROM_TLT</source>
</message>
<message>
<source>EDGE</source>
- <translation>エッジ</translation>
+ <translation>Edge</translation>
</message>
<message>
<source>EDIT_LIB_TLT</source>
</message>
<message>
<source>EMPTY_FILTER_NAME</source>
- <translation>フィルターの名前を空の空でない名前です。</translation>
+ <translation>フィルター名を空が空でない名前を指定します。</translation>
</message>
<message>
<source>ERROR_FILTER_NAME</source>
- <translation>ã\83\95ã\82£ã\83«ã\82¿ã\83¼å\90\8dã\81¯ä¸\80æ\84\8fã\81§ã\81¯ã\81ªã\81\84å\88¥ã\81®å\90\8då\89\8dã\82\92å\85¥å\8a\9b</translation>
+ <translation>ã\83\95ã\82£ã\83«ã\82¿ã\83¼å\90\8dã\81\8cä¸\80æ\84\8fã\81§ã\81ªã\81\84å\88¥ã\81®å\90\8då\89\8dã\82\92å\85¥å\8a\9bã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84</translation>
</message>
<message>
<source>ERROR_LOAD</source>
- <translation>ã\83\81ã\82§ã\83\83ã\82¯ ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81¨ã\81\9dã\81®ã\83\97ã\83ã\83\91ã\83\86ã\82£ã\81®å\90\8då\89\8dã\82\92èªã\81¿è¾¼ã\82\80ã\81\93ã\81¨ã\81\8cできません。</translation>
+ <translation>ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81®ã\83\81ã\82§ã\83\83ã\82¯ã\80\81ã\83©ã\82¤ã\83\96ã\83©ã\83ª ã\83\95ã\82¡ã\82¤ã\83«ã\81\8aã\82\88ã\81³ã\81\9dã\81®ã\83\97ã\83ã\83\91ã\83\86ã\82£ã\81®å\90\8då\89\8dã\82\92ã\83ã\83¼ã\83\89ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯できません。</translation>
</message>
<message>
<source>ERROR_OF_ADDING</source>
- <translation>また、ライブラリに新しいフィルターの内部エラーが発生しました。情報の有効性をチェックします。</translation>
+ <translation>本屋で新しいフィルターのさらに内部エラーが発生しました。情報の有効性を確認します。</translation>
</message>
<message>
<source>ERROR_OF_COPYING</source>
- <translation>å\86\85é\83¨ã\82¨ã\83©ã\83¼ã\82\92ã\83\95ã\82£ã\83«ã\82¿ã\83¼ã\81®ã\82³ã\83\94ã\83¼ã\81«ã\81¯ã\80\81æ\9b¸åº\97ã\81\8bã\82\89ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9fã\80\82æ\83\85å ±ã\81®æ\9c\89å\8a¹æ\80§ã\82\92ã\83\81ã\82§ã\83\83ã\82¯します。</translation>
+ <translation>å\86\85é\83¨ã\82¨ã\83©ã\83¼ã\81\8cæ\9c¬å±\8bã\81\8bã\82\89ã\83\95ã\82£ã\83«ã\82¿ã\83¼ã\81®ã\82³ã\83\94ã\83¼ã\81«ç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9fã\80\82æ\83\85å ±ã\81®æ\9c\89å\8a¹æ\80§ã\82\92確èª\8dします。</translation>
</message>
<message>
<source>ERROR_OF_DELETING</source>
- <translation>æ\9b¸åº\97ã\81\8bã\82\89ã\83\95ã\82£ã\83«ã\82¿ã\83¼ã\82\92å\89\8aé\99¤ä¸ã\81«å\86\85é\83¨ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9fã\80\82æ\83\85å ±ã\81®æ\9c\89å\8a¹æ\80§ã\82\92ã\83\81ã\82§ã\83\83ã\82¯します。</translation>
+ <translation>æ\9c¬å±\8bã\81\8bã\82\89ã\83\95ã\82£ã\83«ã\82¿ã\83¼ã\82\92å\89\8aé\99¤ã\81\99ã\82\8bã\81¨å\86\85é\83¨ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9fã\80\82æ\83\85å ±ã\81®æ\9c\89å\8a¹æ\80§ã\82\92確èª\8dします。</translation>
</message>
<message>
<source>ERROR_OF_EDITING</source>
- <translation>ライブラリ内のフィルターの編集で内部エラーが発生しました。情報の有効性をチェックします。</translation>
+ <translation>本屋でフィルターの版で内部エラーが発生しました。情報の有効性を確認します。</translation>
</message>
<message>
<source>ERROR_OF_SAVING</source>
- <translation>フィルターのライブラリの保護でにエラーが発生しました。情報の有効性をチェックします。</translation>
+ <translation>フィルターのライブラリの保全にエラーが発生しました。情報の有効性を確認します。</translation>
</message>
<message>
<source>FACE</source>
- <translation>顔</translation>
+ <translation>Face</translation>
</message>
<message>
<source>FILTER</source>
</message>
<message>
<source>CONNECTED_ELEMS</source>
- <translation>CONNECTED_ELEMS</translation>
+ <translation>ドメインの要素</translation>
</message>
<message>
<source>NUMBEROFNODESINELEMENT</source>
- <translation>NUMBEROFNODESINELEMENT</translation>
+ <translation>要素内のノード数</translation>
</message>
<message>
<source>COPY_FROM</source>
</message>
<message>
<source>ERROR</source>
- <translation>しきい値が無効です \n 有効な値を入力し、もう一度やり直してください。</translation>
+ <translation>しきい値が無効です。有効な値を入力し、もう一度やり直してください。</translation>
</message>
<message>
<source>FACES</source>
- <translation>フェース</translation>
+ <translation>Faces</translation>
</message>
<message>
<source>FILTER</source>
</message>
<message>
<source>MULTIEDGES_ERROR</source>
- <translation>接続されている複数のしきい値値ありますに等しいないエッジ 1 正しい値を入力し、もう一度やり直してください</translation>
+ <translation>マルチ接続されたエッジのしきい値値を等しくすることはできません 1 に正しい値を入力して、もう一度やり直して</translation>
</message>
<message>
<source>GROUPCOLOR_ERROR</source>
- <translation>è\98å\88¥ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\81ã\82«ã\83©ã\83¼ ã\82°ã\83«ã\83¼ã\83\97ã\81®æ£ã\81\97ã\81\84å\80¤ã\82\92å\85¥å\8a\9bã\81\97ã\81¦å\86\8d試è¡\8cしてください。</translation>
+ <translation>è\98å\88¥ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\81ã\82°ã\83«ã\83¼ã\83\97ã\81®è\89²æ£ã\81\97ã\81\84å\80¤ã\82\92å\85¥å\8a\9bã\82\84ã\82\8aç\9b´してください。</translation>
</message>
<message>
<source>MULTI_BORDERS</source>
</message>
<message>
<source>TAPER</source>
- <translation>テーパー</translation>
+ <translation>Cone</translation>
</message>
<message>
<source>THRESHOLD_VALUE</source>
</message>
<message>
<source>ENTITY_TYPE_0</source>
- <translation>ENTITY_TYPE_0</translation>
+ <translation>POINT1</translation>
</message>
<message>
<source>ENTITY_TYPE_1</source>
- <translation>ENTITY_TYPE_1</translation>
+ <translation>POINT1</translation>
</message>
<message>
<source>ENTITY_TYPE_2</source>
- <translation>ENTITY_TYPE_2</translation>
+ <translation>SEG2</translation>
</message>
<message>
<source>ENTITY_TYPE_3</source>
- <translation>ENTITY_TYPE_3</translation>
+ <translation>SEG3</translation>
</message>
<message>
<source>ENTITY_TYPE_4</source>
- <translation>ENTITY_TYPE_4</translation>
+ <translation>TRIA3</translation>
</message>
<message>
<source>ENTITY_TYPE_5</source>
- <translation>ENTITY_TYPE_5</translation>
+ <translation>TRIA6</translation>
</message>
<message>
<source>ENTITY_TYPE_6</source>
- <translation>ENTITY_TYPE_6</translation>
+ <translation>QUAD4</translation>
</message>
<message>
<source>ENTITY_TYPE_7</source>
- <translation>ENTITY_TYPE_7</translation>
+ <translation>QUAD8</translation>
</message>
<message>
<source>ENTITY_TYPE_8</source>
- <translation>ENTITY_TYPE_8</translation>
+ <translation>QUAD9</translation>
</message>
<message>
<source>ENTITY_TYPE_9</source>
- <translation>ENTITY_TYPE_9</translation>
+ <translation>TETRA4</translation>
</message>
<message>
<source>ENTITY_TYPE_10</source>
- <translation>ENTITY_TYPE_10</translation>
+ <translation>TETRA10</translation>
</message>
<message>
<source>ENTITY_TYPE_11</source>
- <translation>ENTITY_TYPE_11</translation>
+ <translation>PYRA5</translation>
</message>
<message>
<source>ENTITY_TYPE_12</source>
- <translation>ENTITY_TYPE_12</translation>
+ <translation>PYRA13</translation>
</message>
<message>
<source>ENTITY_TYPE_13</source>
- <translation>ENTITY_TYPE_13</translation>
+ <translation>PENTA6</translation>
</message>
<message>
<source>ENTITY_TYPE_14</source>
- <translation>ENTITY_TYPE_14</translation>
+ <translation>PENTA15</translation>
</message>
<message>
<source>ENTITY_TYPE_15</source>
- <translation>ENTITY_TYPE_15</translation>
+ <translation>HEXA8</translation>
</message>
<message>
<source>ENTITY_TYPE_16</source>
- <translation>ENTITY_TYPE_16</translation>
+ <translation>HEXA20</translation>
</message>
<message>
<source>ENTITY_TYPE_17</source>
- <translation>ENTITY_TYPE_17</translation>
+ <translation>HEXA27</translation>
</message>
<message>
<source>ENTITY_TYPE_18</source>
- <translation>ENTITY_TYPE_18</translation>
+ <translation>OCTA12</translation>
</message>
<message>
<source>ENTITY_TYPE_19</source>
- <translation>ENTITY_TYPE_19</translation>
+ <translation>ポリゴン</translation>
</message>
<message>
<source>ENTITY_TYPE_20</source>
- <translation>ENTITY_TYPE_20</translation>
+ <translation>POLYEDRE</translation>
</message>
<message>
<source>ENTITY_TYPE_21</source>
- <translation>ENTITY_TYPE_21</translation>
+ <translation>[なし]</translation>
</message>
<message>
<source>ENTITY_TYPE_22</source>
- <translation>ENTITY_TYPE_22</translation>
+ <translation>ボール</translation>
</message>
<message>
<source>ENTITY_TYPE_23</source>
- <translation>ENTITY_TYPE_23</translation>
+ <translation>QPOLYEDRE</translation>
</message>
<message>
<source>ENTITY_TYPE_24</source>
- <translation>ENTITY_TYPE_24</translation>
+ <translation>ボール</translation>
</message>
<message>
<source>GEOM_TYPE</source>
</message>
<message>
<source>GEOM_TYPE_1</source>
- <translation>エッジ</translation>
+ <translation>Edge</translation>
</message>
<message>
<source>GEOM_TYPE_2</source>
</message>
<message>
<source>GEOM_TYPE_11</source>
- <translation>粒子</translation>
+ <translation>要素粒子</translation>
</message>
</context>
<context>
</message>
<message>
<source>DIFF_MESHES</source>
- <translation>グループ別のメッシュを有効な引数に対応して再度操作の引数が正しく示されない</translation>
+ <translation>グループ異なるメッシュを与える有効な引数に対応し、もう一度やり直してください、操作の引数が正しく示されていません。</translation>
</message>
<message>
<source>DIFF_TYPES</source>
- <translation>グループの種類を有効な引数の要素を含む、やり直して操作の引数が正しく示されない</translation>
+ <translation>グループのさまざまな種類を与える有効な引数の要素を含めるし、もう一度やり直してください、操作の引数が正しく示されていません。</translation>
</message>
<message>
<source>EMPTY_NAME</source>
- <translation>グループ名は無効な空でない名前で、もう一度やり直してください。</translation>
+ <translation>グループの名前は有効な空でない名を指定し、もう一度やり直してください</translation>
</message>
<message>
<source>INCORRECT_ARGUMENTS</source>
- <translation>æ\93\8dä½\9cã\81®å¼\95æ\95°ã\81\8c表示ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\82\92å\85¥å\8a\9bã\81\97ã\81¦もう一度やり直してください</translation>
+ <translation>æ\93\8dä½\9cã\81®å¼\95æ\95°ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\81\9dã\82\8cã\82\89ã\82\92å\85¥å\8a\9bã\81\97ã\80\81もう一度やり直してください</translation>
</message>
<message>
<source>NAME</source>
<name>SMESHGUI_GroupDlg</name>
<message>
<source>SELECT_ALL</source>
- <translation>すべてを選択します。</translation>
+ <translation>すべて選択します。</translation>
</message>
</context>
<context>
</message>
<message>
<source>EDGE</source>
- <translation>エッジ</translation>
+ <translation>Edge</translation>
</message>
<message>
<source>FACE</source>
- <translation>顔</translation>
+ <translation>Face</translation>
</message>
<message>
<source>VOLUME</source>
</message>
<message>
<source>CAPTION</source>
- <translation>節点移動</translation>
+ <translation>ノードを移動</translation>
</message>
<message>
<source>DESTINATION</source>
</message>
<message>
<source>CAPTION</source>
- <translation>点から要素探索</translation>
+ <translation>ポイントで要素を見つける</translation>
</message>
<message>
<source>CREATE_NEW_METHOD</source>
</message>
<message>
<source>HYPOTHESES_SETS</source>
- <translation>前提条件のセットを割り当てる</translation>
+ <translation>詳細設定セットの割当て</translation>
</message>
<message>
<source>MESH</source>
</message>
<message>
<source>EDIT_SUBMESH_QUESTION</source>
- <translation>Sous maillage はこの sous maillage を編集する選択したジオメトリに既に存在するか?</translation>
+ <translation>サブ メッシュは、選択したジオメトリに既に存在するこのサブ メッシュを編集したいですか?</translation>
</message>
<message>
<source>SUBMESH_NOT_ALLOWED</source>
</message>
<message>
<source>GEOMETRY_OBJECT_IS_NOT_DEFINED</source>
- <translation>幾何学的オブジェクトが設定されていないを入力して、もう一度やり直してください</translation>
+ <translation>幾何学的オブジェクトが定義されてそれを言及し、もう一度やり直してください</translation>
</message>
<message>
<source>GEOMETRY_OBJECT_IS_NULL</source>
</message>
<message>
<source>MESH_IS_NOT_DEFINED</source>
- <translation>メッシュが定義されていない指定、もう一度やり直してください</translation>
+ <translation>メッシュが定義されていないを指定し、もう一度やり直してくださいすることができます</translation>
</message>
<message>
<source>MESH_IS_NULL</source>
</message>
<message>
<source>NAME_OF_MESH_IS_EMPTY</source>
- <translation>ã\83¡ã\83\83ã\82·ã\83¥ã\81®å\90\8då\89\8dã\81\8c空ã\81§ã\81\82ã\82\8bã\80\81æ\9c\89å\8a¹ã\81ªå\90\8då\89\8dã\82\92æ\8c\87å®\9aã\81\97ã\81¦ã\80\81やり直してください</translation>
+ <translation>ã\83¡ã\83\83ã\82·ã\83¥ã\81®å\90\8då\89\8dã\81¯ç©ºã\81§ã\81\99æ\9c\89å\8a¹ã\81ªå\90\8då\89\8dã\82\92å\85¥å\8a\9bã\81\97ã\80\81ã\82\82ã\81\86ä¸\80度やり直してください</translation>
</message>
<message>
<source>NAME_OF_SUBMESH_IS_EMPTY</source>
- <translation>Sous maillage の名前が空である、有効な名前を指定して、やり直してください</translation>
+ <translation>サブ メッシュの名前は空です有効な名前を入力し、もう一度やり直してください</translation>
</message>
<message>
<source>THERE_IS_NO_OBJECT_FOR_EDITING</source>
- <translation>編集するオブジェクトはありません。メッシュまたは sous maillage を選択し、もう一度やり直してください。</translation>
+ <translation>編集するオブジェクトはありません。メッシュまたはサブメッシュを選択し、もう一度やり直してください。</translation>
</message>
</context>
<context>
</message>
<message>
<source>ERROR_OF_LOADING</source>
- <translation>地面をロードできませんでした。ファイルが壊れているか、他のタイプの理由が含まれていることは</translation>
+ <translation>地面をロードできませんでした。ファイルが壊れているか、他の種類のパターンが含まれている可能性が高いです。</translation>
</message>
<message>
<source>ERROR_OF_OPENING</source>
- <translation>ã\83\95ã\82¡ã\82¤ã\83«ã\82\92é\96\8bã\81\8fã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82ã\81\8bã\81©ã\81\86ã\81\8bã\82\92確èª\8dã\81\97ã\80\81ã\82¢ã\82¯ã\82»ã\82¹è¨±å\8f¯ã\81\8cã\81\82ã\82\8bå ´å\90\88</translation>
+ <translation>ã\83\95ã\82¡ã\82¤ã\83«ã\82\92é\96\8bã\81\8fã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82ã\81\9dã\82\8cã\81\8cå\98å\9c¨ã\81\99ã\82\8bå ´å\90\88ã\80\81ã\82¢ã\82¯ã\82»ã\82¹è¨±å\8f¯ã\81\8cã\81\82ã\82\8bå ´å\90\88ã\82\92確èª\8dã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82</translation>
</message>
<message>
<source>ERROR_OF_READING</source>
- <translation>接地のチェック、ファイルの内容をロードすることはできません。</translation>
+ <translation>地面のチェック、ファイルの内容をロードすることはできません。</translation>
</message>
<message>
<source>ERR_READ_3D_COORD</source>
- <translation>3 D の点の座標が [0, 1] の範囲外であるためにをロードすることはできません。</translation>
+ <translation>3D ポイントの座標は間隔 [0, 1] の外の地面をロードすることはできません。</translation>
</message>
<message>
<source>ERR_READ_BAD_INDEX</source>
- <translation>無効なポイントのインデックスが検出されましたが、地面を読み込むことができません。</translation>
+ <translation>無効なポイント インデックスが検出されました地面をロードすることはできません。</translation>
</message>
<message>
<source>ERR_READ_BAD_KEY_POINT</source>
- <translation>ポイントの境界線に存在しないために読み込むことができません。</translation>
+ <translation>重要なポイント上にある罫線パターンをロードすることはできません。</translation>
</message>
<message>
<source>ERR_READ_ELEM_POINTS</source>
- <translation>ポイント要素の数が無効であるためにをロードすることはできません。</translation>
+ <translation>要素の点の数が無効です理由をロードすることはできません。</translation>
</message>
<message>
<source>ERR_READ_NB_POINTS</source>
- <translation>ファイル内のポイント数を読み取ることできないためにをロードすることはできません。</translation>
+ <translation>ファイル内のポイントの番号を読み取ることはできません。 のでロードすることはできません。</translation>
</message>
<message>
<source>ERR_READ_NO_ELEMS</source>
- <translation>要素が含まれていないために読み込むことができません。</translation>
+ <translation>要素が含まれていないために、読み込みすることはできません。</translation>
</message>
<message>
<source>ERR_READ_NO_KEYPOINT</source>
- <translation>2D ポイント キーではないため、地面を読み込むことができません。</translation>
+ <translation>二次元パターンはしなかった地面をロードすることはできませんポイント キー</translation>
</message>
<message>
<source>ERR_READ_POINT_COORDS</source>
- <translation>ã\83\95ã\82¡ã\82¤ã\83«å\86\85ã\81®ç\82¹ã\81®åº§æ¨\99ã\82\92èªã\81¿å\8f\96ã\82\8bã\81\93ã\81¨ã\81§ã\81\8dã\81ªã\81\84ã\81\9fã\82\81ã\81«ã\82\92ロードすることはできません。</translation>
+ <translation>ã\83\95ã\82¡ã\82¤ã\83«å\86\85ã\81®ç\82¹ã\81®åº§æ¨\99ã\82\92èªã\81¿å\8f\96ã\82\8bã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82 ã\81®ã\81§ロードすることはできません。</translation>
</message>
<message>
<source>ERR_READ_TOO_FEW_POINTS</source>
- <translation>地面を読み込むことはできません。ファイルにあまりにも少ないです。</translation>
+ <translation>地面をロードすることはできません。ファイルにあまりにもいくつかのポイントがあります。</translation>
</message>
<message>
<source>FACE</source>
- <translation>顔</translation>
+ <translation>Face</translation>
</message>
<message>
<source>LOAD_PATTERN</source>
<name>SMESHGUI_MeshTab</name>
<message>
<source>ADD_HYPOTHESIS</source>
- <translation>前提条件を追加</translation>
+ <translation>詳細設定の追加項目</translation>
</message>
<message>
<source>ALGORITHM</source>
</message>
<message>
<source>HYPOTHESIS</source>
- <translation>前提条件</translation>
+ <translation>詳細設定</translation>
</message>
<message>
<source>NONE</source>
</message>
<message>
<source>MAX_ASPECT_RATIO</source>
- <translation>最大比</translation>
+ <translation>最大アスペクト比</translation>
</message>
<message>
<source>METHOD</source>
<name>SMESHGUI_UnionOfTrianglesDlg</name>
<message>
<source>CAPTION</source>
- <translation>三角形要素の結合</translation>
+ <translation>三角形の結合</translation>
</message>
<message>
<source>MAXIMUM_ANGLE</source>
<name>SMESHGUI_UnionOfTwoTrianglesDlg</name>
<message>
<source>CAPTION</source>
- <translation>2つの三角形要素を結合</translation>
+ <translation>2 つの三角形の結合</translation>
</message>
</context>
<context>
<source>CLIP_PLANES</source>
<translation>切断の計画</translation>
</message>
+ <message>
+ <source>IS_OPENGL_CLIPPING</source>
+ <translation>OpenGL クリッピング</translation>
+ </message>
<message>
<source>MESHES_SUBMESHES_GROUPS</source>
<translation>メッシュ、サブメッシュ、グループ</translation>
</message>
<message>
<source>PLANE_NUM</source>
- <translation>平面 #%1</translation>
+ <translation>Plan# %1</translation>
</message>
<message>
<source>NO_PLANES</source>
<translation>計画の手順</translation>
</message>
+ <message>
+ <source>ABSOLUTE</source>
+ <translation>絶対</translation>
+ </message>
+ <message>
+ <source>RELATIVE</source>
+ <translation>相対</translation>
+ </message>
+ <message>
+ <source>BASE_POINT</source>
+ <translation>基準点</translation>
+ </message>
+ <message>
+ <source>DIRECTION</source>
+ <translation>方向</translation>
+ </message>
+ <message>
+ <source>RESET</source>
+ <translation>リセット</translation>
+ </message>
+ <message>
+ <source>INVERT</source>
+ <translation>反転</translation>
+ </message>
</context>
<context>
<name>SMESHGUI_DuplicateNodesDlg</name>
</message>
<message>
<source>DUPLICATION_ONLY_ELEMS</source>
- <translation>DUPLICATION_ONLY_ELEMS</translation>
+ <translation>重複する要素のみ</translation>
</message>
<message>
<source>GROUP_ELEMS_TO_DUPLICATE</source>
</message>
<message>
<source>WRONG_GROUPS</source>
- <translation>次のグループ traités\nen は、incompatibles:\n%1 型のためでした。</translation>
+ <translation>次のグループを互換性のないタイプのため扱われなかった: %1</translation>
</message>
<message>
<source>SMESH_ERR_NO_INPUT_MESH</source>
<name>SMESHGUI_MeshInfo</name>
<message>
<source>BASE_INFO</source>
- <translation>BASE_INFO</translation>
+ <translation>基本情報</translation>
</message>
<message>
<source>NAME_LAB</source>
</message>
<message>
<source>CTRL_INFO</source>
- <translation>CTRL_INFO</translation>
+ <translation>品質情報</translation>
</message>
<message>
<source>NODE_MODE</source>
</message>
<message>
<source>BUT_DUMP_MESH</source>
- <translation>BUT_DUMP_MESH</translation>
+ <translation>書き出し(&D)</translation>
</message>
<message>
<source>TEXT_FILES</source>
- <translation>TEXT_FILES</translation>
+ <translation>テキスト ファイル (*.txt)</translation>
</message>
<message>
<source>SAVE_INFO</source>
- <translation>SAVE_INFO</translation>
+ <translation>情報を保存します。</translation>
</message>
<message>
<source>X_FROM_Y_ITEMS_SHOWN</source>
<name>SMESHGUI_ElemInfo</name>
<message>
<source>ELEM_INFO</source>
- <translation>ELEM_INFO</translation>
+ <translation>要素情報</translation>
</message>
<message>
<source>COORDINATES</source>
</message>
<message>
<source>FACE</source>
- <translation>顔</translation>
+ <translation>Face</translation>
</message>
<message>
<source>FACES</source>
- <translation>フェース</translation>
+ <translation>Faces</translation>
</message>
<message>
<source>VOLUME</source>
</message>
<message>
<source>BALL_DIAMETER</source>
- <translation>BALL_DIAMETER</translation>
+ <translation>直径</translation>
</message>
<message>
<source>GEOM_VERTEX</source>
- <translation>GEOM_VERTEX</translation>
+ <translation>Vertex</translation>
</message>
<message>
<source>GEOM_EDGE</source>
- <translation>GEOM_EDGE</translation>
+ <translation>Edge</translation>
</message>
<message>
<source>GEOM_FACE</source>
- <translation>GEOM_FACE</translation>
+ <translation>Face</translation>
</message>
<message>
<source>GEOM_SOLID</source>
- <translation>GEOM_SOLID</translation>
+ <translation>ソリッド</translation>
</message>
<message>
<source>GEOM_SHELL</source>
- <translation>GEOM_SHELL</translation>
+ <translation>シェル</translation>
</message>
<message>
<source>GEOM_SHAPE</source>
- <translation>GEOM_SHAPE</translation>
+ <translation>形状</translation>
</message>
<message>
<source>POSITION</source>
- <translation>POSITION</translation>
+ <translation>位置</translation>
</message>
<message>
<source>U_POSITION</source>
- <translation>U_POSITION</translation>
+ <translation>U</translation>
</message>
<message>
<source>V_POSITION</source>
- <translation>V_POSITION</translation>
+ <translation>V</translation>
</message>
<message>
<source>CONTROLS</source>
- <translation>CONTROLS</translation>
+ <translation>品質コントロール</translation>
</message>
</context>
<context>
<name>SMESHGUI_TreeElemInfo</name>
<message>
<source>SHOW_ITEM_INFO</source>
- <translation>SHOW_ITEM_INFO</translation>
+ <translation>情報を表示します。</translation>
</message>
<message>
<source>PROPERTY</source>
- <translation>PROPERTY</translation>
+ <translation>プロパティ</translation>
</message>
<message>
<source>VALUE</source>
- <translation>VALUE</translation>
+ <translation>値</translation>
</message>
</context>
<context>
<name>SMESHGUI_AddInfo</name>
<message>
<source>ADDITIONAL_INFO</source>
- <translation>ADDITIONAL_INFO</translation>
+ <translation>追加情報</translation>
</message>
<message>
<source>NAME</source>
</message>
<message>
<source>GROUPS_3</source>
- <translation>フェース</translation>
+ <translation>Faces</translation>
</message>
<message>
<source>GROUPS_4</source>
</message>
<message>
<source>GROUP_ON_GEOMETRY</source>
- <translation>ã\82°ã\83«ã\83¼ã\83\97ã\81¯ã\80\81ã\82¸ã\82ªã\83¡ã\83\88ã\83ªã\81«ã\83ªã\83³ã\82¯</translation>
+ <translation>ã\82¸ã\82ªã\83¡ã\83\88ã\83ªä¸\8aã\81®ã\82°ã\83«ã\83¼ã\83\97</translation>
</message>
<message>
<source>GROUP_ON_FILTER</source>
</message>
<message>
<source>EDGE</source>
- <translation>エッジ</translation>
+ <translation>Edge</translation>
</message>
<message>
<source>FACE</source>
- <translation>顔</translation>
+ <translation>Face</translation>
</message>
<message>
<source>VOLUME</source>
</message>
<message>
<source>COMPUTE</source>
- <translation>計算</translation>
+ <translation>計算します。</translation>
</message>
<message>
<source>LOAD</source>
</message>
<message>
<source>SUBMESHES_0</source>
- <translation>アセンブリ</translation>
+ <translation>Compound</translation>
</message>
<message>
<source>SUBMESHES_2</source>
</message>
<message>
<source>SUBMESHES_4</source>
- <translation>フェース</translation>
+ <translation>Face</translation>
</message>
<message>
<source>SUBMESHES_5</source>
<name>SMESHGUI_CtrlInfo</name>
<message>
<source>CTRL_INFO</source>
- <translation>CTRL_INFO</translation>
+ <translation>品質情報</translation>
</message>
<message>
<source>NAME_LAB</source>
- <translation>NAME_LAB</translation>
+ <translation>名前:</translation>
</message>
<message>
<source>VALUE</source>
- <translation>VALUE</translation>
+ <translation>値</translation>
</message>
<message>
<source>BUT_COMPUTE</source>
- <translation>BUT_COMPUTE</translation>
+ <translation>計算</translation>
</message>
<message>
<source>NODES_INFO</source>
- <translation>NODES_INFO</translation>
+ <translation>ノード情報:</translation>
</message>
<message>
<source>NUMBER_OF_THE_FREE_NODES</source>
- <translation>NUMBER_OF_THE_FREE_NODES</translation>
+ <translation>空きノードの数</translation>
</message>
<message>
<source>DOUBLE_NODES_TOLERANCE</source>
- <translation>DOUBLE_NODES_TOLERANCE</translation>
+ <translation>重複節点の許容値</translation>
</message>
<message>
<source>NUMBER_OF_THE_DOUBLE_NODES</source>
- <translation>NUMBER_OF_THE_DOUBLE_NODES</translation>
+ <translation>重複節点の数</translation>
</message>
<message>
<source>EDGES_INFO</source>
- <translation>EDGES_INFO</translation>
+ <translation>エッジ情報:</translation>
</message>
<message>
<source>NUMBER_OF_THE_DOUBLE_EDGES</source>
- <translation>NUMBER_OF_THE_DOUBLE_EDGES</translation>
+ <translation>重複エッジの数</translation>
</message>
<message>
<source>FACES_INFO</source>
- <translation>FACES_INFO</translation>
+ <translation>顔情報:</translation>
</message>
<message>
<source>NUMBER_OF_THE_DOUBLE_FACES</source>
- <translation>NUMBER_OF_THE_DOUBLE_FACES</translation>
+ <translation>重複面の数</translation>
</message>
<message>
<source>ASPECT_RATIO_HISTOGRAM</source>
- <translation>ASPECT_RATIO_HISTOGRAM</translation>
+ <translation>アスペクト比のヒストグラム</translation>
</message>
<message>
<source>VOLUMES_INFO</source>
- <translation>VOLUMES_INFO</translation>
+ <translation>ボリューム情報:</translation>
</message>
<message>
<source>NUMBER_OF_THE_DOUBLE_VOLUMES</source>
- <translation>NUMBER_OF_THE_DOUBLE_VOLUMES</translation>
+ <translation>重複ボリュームの数</translation>
</message>
<message>
<source>NUMBER_OF_THE_OVER_CONSTRAINED</source>
- <translation>NUMBER_OF_THE_OVER_CONSTRAINED</translation>
+ <translation>過剰制約の数</translation>
</message>
<message>
<source>ASPECT_RATIO_3D_HISTOGRAM</source>
- <translation>ASPECT_RATIO_3D_HISTOGRAM</translation>
+ <translation>アスペクト比 3 D ヒストグラム</translation>
</message>
</context>
<context>
<name>SMESHGUI_CtrlInfoDlg</name>
<message>
<source>CTRL_INFO</source>
- <translation>CTRL_INFO</translation>
+ <translation>品質情報</translation>
</message>
<message>
<source>BUT_DUMP_MESH</source>
- <translation>BUT_DUMP_MESH</translation>
+ <translation>書き出し(&D)</translation>
</message>
<message>
<source>TEXT_FILES</source>
- <translation>TEXT_FILES</translation>
+ <translation>テキスト ファイル (*.txt)</translation>
</message>
<message>
<source>SAVE_INFO</source>
- <translation>SAVE_INFO</translation>
+ <translation>情報を保存します。</translation>
</message>
</context>
<context>
</message>
<message>
<source>COMPUTE</source>
- <translation>計算</translation>
+ <translation>計算します。</translation>
</message>
<message>
<source>RESULT</source>
<name>SMESHGUI_BasicProperties</name>
<message>
<source>PROPERTY</source>
- <translation>PROPERTY</translation>
+ <translation>プロパティ</translation>
</message>
<message>
<source>LENGTH</source>
- <translation>LENGTH</translation>
+ <translation>長さ</translation>
</message>
<message>
<source>AREA</source>
- <translation>AREA</translation>
+ <translation>エリア</translation>
</message>
<message>
<source>VOLUME</source>
- <translation>VOLUME</translation>
+ <translation>ボリューム</translation>
</message>
<message>
<source>SOURCE_MESH_SUBMESH_GROUP</source>
- <translation>SOURCE_MESH_SUBMESH_GROUP</translation>
+ <translation>ソース メッシュ、サブメッシュ (グループ)</translation>
</message>
<message>
<source>COMPUTE</source>
- <translation>COMPUTE</translation>
+ <translation>計算</translation>
</message>
</context>
<context>
</message>
<message>
<source>BASIC_PROPERTIES</source>
- <translation>BASIC_PROPERTIES</translation>
+ <translation>基本的なプロパティ</translation>
</message>
</context>
<context>
</message>
<message>
<source>COMPUTE</source>
- <translation>計算</translation>
+ <translation>計算します。</translation>
</message>
<message>
<source>RESULT</source>
</message>
<message>
<source>FACE</source>
- <translation>顔</translation>
+ <translation>Face</translation>
</message>
<message>
<source>FACES</source>
</message>
<message>
<source>NODES</source>
- <translation>ノード</translation>
+ <translation>節点</translation>
</message>
<message>
<source>EDGES</source>
- <translation>エッジ</translation>
+ <translation>エッジ/ワイヤ フレーム モード</translation>
</message>
<message>
<source>FACES</source>
- <translation>フェース</translation>
+ <translation>Faces</translation>
</message>
<message>
<source>VOLUMES</source>
</message>
<message>
<source>OUTLINES</source>
- <translation>概要</translation>
+ <translation>Wires</translation>
</message>
<message>
<source>0D_ELEMENTS</source>
- <translation>0D要素</translation>
+ <translation>0D要素</translation>
</message>
<message>
<source>BALLS</source>
</message>
<message>
<source>WIDTH</source>
- <translation>å¹\85ï¼\9a</translation>
+ <translation>å\8e\9aã\81\95:</translation>
</message>
<message>
<source>FACE_FRONT</source>
- <translation>フロント:</translation>
+ <translation>フロント:</translation>
</message>
<message>
<source>FACE_BACK</source>
- <translation>戻る:</translation>
+ <translation>リア:</translation>
</message>
<message>
<source>VOLUME_NORMAL</source>
</message>
<message>
<source>VOLUME_REVERSED</source>
- <translation>元に戻します。</translation>
+ <translation>逆。</translation>
</message>
<message>
<source>SIZE</source>
</message>
<message>
<source>SHRINK</source>
- <translation>縮小係数:</translation>
+ <translation>減少係数:</translation>
</message>
</context>
</TS>
}
SetPredicate( aResPredicate );
-
- aResPredicate->UnRegister();
+ if ( !aResPredicate->_is_nil() )
+ aResPredicate->UnRegister();
return !aResPredicate->_is_nil();
}
}
myMesh = mesh;
myMeshPartIOR = meshPartIOR;
- if ( SMESH_subMesh* myMainSubMesh = mesh->GetSubMeshContaining(1) ) {
- const TDependsOnMap & subMeshes = myMainSubMesh->DependsOn();
- TDependsOnMap::const_iterator sm;
- for (sm = subMeshes.begin(); sm != subMeshes.end(); sm++)
- sm->second->SetEventListener( this, 0, sm->second );
+ SMESH_subMesh* sm = mesh->GetSubMesh( mesh->GetShapeToMesh() );
+ SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator( /*includeSelf=*/true );
+ while ( smIt->more() )
+ {
+ sm = smIt->next();
+ sm->SetEventListener( this, 0, sm );
}
}
}
//!< delete self from all submeshes
void Unset(SMESH_Mesh* mesh)
{
- if ( SMESH_subMesh* myMainSubMesh = mesh->GetSubMeshContaining(1) ) {
- const TDependsOnMap & subMeshes = myMainSubMesh->DependsOn();
- TDependsOnMap::const_iterator sm;
- for (sm = subMeshes.begin(); sm != subMeshes.end(); sm++)
- sm->second->DeleteEventListener( this );
+ if ( SMESH_subMesh* sm = mesh->GetSubMeshContaining(1) ) {
+ SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator( /*includeSelf=*/true );
+ while ( smIt->more() )
+ smIt->next()->DeleteEventListener( this );
}
myMesh = 0;
}
if ( !myIsPreviewMode ) {
// Update Python script
TPythonDump() << "isDone = " << this << ".TriToQuad( "
- << IDsOfElements << ", " << aNumericalFunctor << ", " << TVar( MaxAngle ) << " )";
+ << IDsOfElements << ", " << aNumericalFunctor << ", " << TVar( MaxAngle ) << " )";
}
bool stat = getEditor().TriToQuad( *workElements, aCrit, MaxAngle );
// Update Python script
aTPythonDump << "isDone = " << this << ".TriToQuadObject("
- << theObject << ", " << aNumericalFunctor << ", " << TVar( MaxAngle ) << " )";
+ << theObject << ", " << aNumericalFunctor << ", " << TVar( MaxAngle ) << " )";
}
return isDone;
import salome
from salome import *
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+import geompy
+
import SMESH, SALOMEDS
from salome.smesh import smeshBuilder
try:
exec( "from salome.%s.%s import *" % (pluginName, pluginBuilderName))
except Exception, e:
- print "Exception while loading %s: %s" % ( pluginBuilderName, e )
+ from salome_utils import verbose
+ if verbose(): print "Exception while loading %s: %s" % ( pluginBuilderName, e )
continue
exec( "from salome.%s import %s" % (pluginName, pluginBuilderName))
plugin = eval( pluginBuilderName )
try:
exec( "from salome.%s.%s import *" % (pluginName, pluginBuilderName))
except Exception, e:
- print "Exception while loading %s: %s" % ( pluginBuilderName, e )
+ from salome_utils import verbose
+ if verbose(): print "Exception while loading %s: %s" % ( pluginBuilderName, e )
continue
exec( "from salome.%s import %s" % (pluginName, pluginBuilderName))
plugin = eval( pluginBuilderName )
SWIG_ADD_MODULE(libSMESH_Swig python ${SMESH_Swig_SOURCES})
SWIG_LINK_LIBRARIES(libSMESH_Swig ${_link_LIBRARIES})
+IF(WIN32)
+ SET_TARGET_PROPERTIES(_libSMESH_Swig PROPERTIES DEBUG_OUTPUT_NAME _libSMESH_Swig_d)
+ENDIF(WIN32)
+
INSTALL(TARGETS _libSMESH_Swig DESTINATION ${SALOME_INSTALL_LIBS})
INSTALL(FILES ${SMESH_Swig_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
#include <GeomAdaptor_Curve.hxx>
#include <Geom_Curve.hxx>
#include <Poly_Array1OfTriangle.hxx>
+#include <Poly_PolygonOnTriangulation.hxx>
#include <Poly_Triangulation.hxx>
#include <TColgp_Array1OfPnt.hxx>
#include <TopExp.hxx>
SegSizeTree* mySizeTree;
};
+ //================================================================================
+ /*!
+ * \brief Segment of Poly_PolygonOnTriangulation
+ */
+ struct Segment
+ {
+ gp_XYZ myPos, myDir;
+ double myLength;
+
+ void Init( const gp_Pnt& p1, const gp_Pnt& p2 )
+ {
+ myPos = p1.XYZ();
+ myDir = p2.XYZ() - p1.XYZ();
+ myLength = myDir.Modulus();
+ if ( myLength > std::numeric_limits<double>::min() )
+ myDir /= myLength;
+ }
+ bool Distance( const gp_Pnt& P, double& dist ) const // returns length of normal projection
+ {
+ gp_XYZ p = P.XYZ();
+ p.Subtract( myPos );
+ double proj = p.Dot( myDir );
+ if ( 0 < proj && proj < myLength )
+ {
+ p.Cross( myDir );
+ dist = p.Modulus();
+ return true;
+ }
+ return false;
+ }
+ };
//================================================================================
/*!
* \brief Data of triangle used to locate it in an octree and to find distance
*/
struct Triangle
{
- Bnd_B3d myBox;
- bool myIsChecked; // to mark treated trias instead of using std::set
+ Bnd_B3d myBox;
+ bool myIsChecked; // to mark treated trias instead of using std::set
+ bool myHasNodeOnVertex;
+ Segment* mySegments[3];
// data for DistToProjection()
- gp_XYZ myN0, myEdge1, myEdge2, myNorm, myPVec;
- double myInvDet, myMaxSize2;
+ gp_XYZ myN0, myEdge1, myEdge2, myNorm, myPVec;
+ double myInvDet, myMaxSize2;
void Init( const gp_Pnt& n1, const gp_Pnt& n2, const gp_Pnt& n3 );
bool DistToProjection( const gp_Pnt& p, double& dist ) const;
+ bool DistToSegment ( const gp_Pnt& p, double& dist ) const;
};
//================================================================================
/*!
struct TriaTreeData : public ElemTreeData
{
vector< Triangle > myTrias;
+ vector< Segment > mySegments;
double myFaceTol;
double myTriasDeflection;
BBox myBBox;
return bb;
}
};
+ //================================================================================
+ /*!
+ * \brief Link of two nodes
+ */
+ struct NLink : public std::pair< int, int >
+ {
+ NLink( int n1, int n2 )
+ {
+ if ( n1 < n2 )
+ {
+ first = n1;
+ second = n2;
+ }
+ else
+ {
+ first = n2;
+ second = n1;
+ }
+ }
+ int N1() const { return first; }
+ int N2() const { return second; }
+ };
//================================================================================
/*!
}
for ( int i = myNodes->Lower(); i <= myNodes->Upper(); ++i )
myBBox.Add( myNodes->Value(i).XYZ() );
-
}
}
+ //================================================================================
+ /*!
+ * \brief Prepare data for search of trinagles in GetMinDistInSphere()
+ */
+ //================================================================================
+
void TriaTreeData::PrepareToTriaSearch()
{
if ( !myTrias.empty() ) return; // already done
if ( !myPolyTrias ) return;
+ // get all boundary links and nodes on VERTEXes
+ map< NLink, Segment* > linkToSegMap;
+ map< NLink, Segment* >::iterator l2s;
+ set< int > vertexNodes;
+ TopLoc_Location loc;
+ Handle(Poly_Triangulation) tr = BRep_Tool::Triangulation( mySurface.Face(), loc );
+ if ( !tr.IsNull() )
+ {
+ TopTools_IndexedMapOfShape edgeMap;
+ TopExp::MapShapes( mySurface.Face(), TopAbs_EDGE, edgeMap );
+ for ( int iE = 1; iE <= edgeMap.Extent(); ++iE )
+ {
+ const TopoDS_Edge& edge = TopoDS::Edge( edgeMap( iE ));
+ Handle(Poly_PolygonOnTriangulation) polygon =
+ BRep_Tool::PolygonOnTriangulation( edge, tr, loc );
+ if ( polygon.IsNull() )
+ continue;
+ const TColStd_Array1OfInteger& nodes = polygon->Nodes();
+ for ( int i = nodes.Lower(); i < nodes.Upper(); ++i )
+ linkToSegMap.insert( make_pair( NLink( nodes(i), nodes(i+1)), (Segment*)0 ));
+ vertexNodes.insert( nodes( nodes.Lower()));
+ vertexNodes.insert( nodes( nodes.Upper()));
+ }
+ // fill mySegments by boundary links
+ mySegments.resize( linkToSegMap.size() );
+ int iS = 0;
+ for ( l2s = linkToSegMap.begin(); l2s != linkToSegMap.end(); ++l2s, ++iS )
+ {
+ const NLink& link = (*l2s).first;
+ (*l2s).second = & mySegments[ iS ];
+ mySegments[ iS ].Init( myNodes->Value( link.N1() ),
+ myNodes->Value( link.N2() ));
+ }
+ }
+
+ // initialize myTrias
myTrias.resize( myPolyTrias->Length() );
Standard_Integer n1,n2,n3;
for ( int i = 1; i <= myPolyTrias->Upper(); ++i )
{
+ Triangle & t = myTrias[ i-1 ];
myPolyTrias->Value( i ).Get( n1,n2,n3 );
- myTrias[ i-1 ].Init( myNodes->Value( n1 ),
- myNodes->Value( n2 ),
- myNodes->Value( n3 ));
+ t.Init( myNodes->Value( n1 ),
+ myNodes->Value( n2 ),
+ myNodes->Value( n3 ));
+ int nbSeg = 0;
+ if (( l2s = linkToSegMap.find( NLink( n1, n2 ))) != linkToSegMap.end())
+ t.mySegments[ nbSeg++ ] = l2s->second;
+ if (( l2s = linkToSegMap.find( NLink( n2, n3 ))) != linkToSegMap.end())
+ t.mySegments[ nbSeg++ ] = l2s->second;
+ if (( l2s = linkToSegMap.find( NLink( n3, n1 ))) != linkToSegMap.end())
+ t.mySegments[ nbSeg++ ] = l2s->second;
+ while ( nbSeg < 3 )
+ t.mySegments[ nbSeg++ ] = NULL;
+
+ t.myIsChecked = false;
+ t.myHasNodeOnVertex = ( vertexNodes.count( n1 ) ||
+ vertexNodes.count( n2 ) ||
+ vertexNodes.count( n3 ));
}
- myTree->FillIn();
- // TODO: mark triangles with nodes on VERTEXes to
- // less frequently compare with avoidPnt in GetMinDistInSphere()
- //
- // Handle(Poly_PolygonOnTriangulation) polygon =
- // BRep_Tool::PolygonOnTriangulation( edge, tr, loc );
- // if ( polygon.IsNull() || !pologon.HasParameters() )
- // continue;
- // Handle(TColStd_Array1OfInteger) nodeIDs = polygon->Nodes();
+ // fill the tree of triangles
+ myTree->FillIn();
}
//================================================================================
isConstSize = false;
}
- typedef std::pair<int,int> TLink;
- TLink link;
- map< TLink, double > lenOfDoneLink;
- map< TLink, double >::iterator link2len;
+ map< NLink, double > lenOfDoneLink;
+ map< NLink, double >::iterator link2len;
Standard_Integer n[4];
gp_Pnt p[4];
maxLinkLen = 0;
for ( int j = 0; j < 3; ++j )
{
- if ( n[j] < n[j+1] )
- link = TLink( n[j], n[j+1] );
- else
- link = TLink( n[j+1], n[j] );
- link2len = lenOfDoneLink.insert( make_pair( link, -1. )).first;
+ link2len = lenOfDoneLink.insert( make_pair( NLink( n[j], n[j+1] ), -1. )).first;
isDone[j] = !((*link2len).second < 0 );
a[j] = isDone[j] ? (*link2len).second : (*link2len).second = p[j].Distance( p[j+1] );
if ( isDone[j] )
{
double minDist2 = 1e100;
const double tol2 = myFaceTol * myFaceTol;
+ const double dMin2 = myTriasDeflection * myTriasDeflection;
TriaTreeData* me = const_cast<TriaTreeData*>( this );
me->myFoundTriaIDs.clear();
myTree->GetElementsInSphere( p.XYZ(), radius, me->myFoundTriaIDs );
+ if ( myFoundTriaIDs.empty() )
+ return minDist2;
Standard_Integer n[ 3 ];
for ( size_t i = 0; i < myFoundTriaIDs.size(); ++i )
t.myIsChecked = true;
double d, minD2 = minDist2;
- bool avoidTria = false;
myPolyTrias->Value( myFoundTriaIDs[i]+1 ).Get( n[0],n[1],n[2] );
- for ( int i = 0; i < 3; ++i )
+ if ( avoidPnt && t.myHasNodeOnVertex )
{
- const gp_Pnt& pn = myNodes->Value(n[i]);
- if ( avoidTria = ( avoidPnt && pn.SquareDistance(*avoidPnt) <= tol2 ))
- break;
- if ( !projectedOnly )
- minD2 = Min( minD2, pn.SquareDistance( p ));
+ bool avoidTria = false;
+ for ( int i = 0; i < 3; ++i )
+ {
+ const gp_Pnt& pn = myNodes->Value(n[i]);
+ if ( avoidTria = ( pn.SquareDistance( *avoidPnt ) <= tol2 ))
+ break;
+ if ( !projectedOnly )
+ minD2 = Min( minD2, pn.SquareDistance( p ));
+ }
+ if ( avoidTria )
+ continue;
+ if (( projectedOnly || minD2 < t.myMaxSize2 ) &&
+ ( t.DistToProjection( p, d ) || t.DistToSegment( p, d )))
+ minD2 = Min( minD2, d*d );
+ minDist2 = Min( minDist2, minD2 );
+ }
+ else if ( projectedOnly )
+ {
+ if ( t.DistToProjection( p, d ) && d*d > dMin2 )
+ minDist2 = Min( minDist2, d*d );
}
- if ( !avoidTria )
+ else
{
- if ( minD2 < t.myMaxSize2 && t.DistToProjection( p, d ))
+ for ( int i = 0; i < 3; ++i )
+ minD2 = Min( minD2, p.SquareDistance( myNodes->Value(n[i]) ));
+ if ( minD2 < t.myMaxSize2 && ( t.DistToProjection( p, d ) || t.DistToSegment( p, d )))
minD2 = Min( minD2, d*d );
minDist2 = Min( minDist2, minD2 );
}
return true;
}
+ //================================================================================
+ /*!
+ * \brief Compute distance from a point to either of mySegments. Return false if the point
+ * is not projected on a segment
+ */
+ //================================================================================
+
+ bool Triangle::DistToSegment( const gp_Pnt& p, double& dist ) const
+ {
+ dist = 1e100;
+ bool res = false;
+ double d;
+ for ( int i = 0; i < 3; ++i )
+ {
+ if ( !mySegments[ i ])
+ break;
+ if ( mySegments[ i ]->Distance( p, d ))
+ {
+ res = true;
+ dist = Min( dist, d );
+ }
+ }
+ return res;
+ }
+
//================================================================================
/*!
* \brief Consturct ElementBndBoxTree of Poly_Triangulation of a FACE
bool AdaptiveAlgo::Compute(SMESH_Mesh & theMesh,
const TopoDS_Shape & theShape)
{
- //*theProgress = 0.01;
+ // *theProgress = 0.01;
if ( myHyp->GetMinSize() > myHyp->GetMaxSize() )
return error( "Bad parameters: min size > max size" );
IncrementalMesh im( theMesh.GetShapeToMesh(), myHyp->GetDeflection(), /*Relatif=*/false);
box = im.GetBox();
}
- //*theProgress = 0.3;
+ // *theProgress = 0.3;
// holder of segment size at each point
SegSizeTree sizeTree( box, grading, myHyp->GetMinSize(), myHyp->GetMaxSize() );
double distToFace =
triaSearcher->GetMinDistInSphere( pIt1->myP, pIt1->mySegSize, isAdjFace, avoidPnt );
double allowedSize = Max( minSize, distToFace*( 1. + grading ));
- if ( 1.1 * allowedSize < pIt1->mySegSize )
+ if ( allowedSize < pIt1->mySegSize )
{
- sizeDecreased = true;
- sizeTree.SetSize( pIt1->myP, allowedSize );
// cout << "E " << theMesh.GetMeshDS()->ShapeToIndex( eData.Edge() )
- // << "\t SetSize " << allowedSize << " at "
- // << pIt1->myP.X() <<", "<< pIt1->myP.Y()<<", "<<pIt1->myP.Z() << endl;
- pIt2 = pIt1;
- if ( --pIt2 != eData.myPoints.end() && pIt2->mySegSize > allowedSize )
- sizeTree.SetSize( eData.myC3d.Value( 0.6*pIt2->myU + 0.4*pIt1->myU ), allowedSize );
- pIt2 = pIt1;
- if ( ++pIt2 != eData.myPoints.end() && pIt2->mySegSize > allowedSize )
- sizeTree.SetSize( eData.myC3d.Value( 0.6*pIt2->myU + 0.4*pIt1->myU ), allowedSize );
+ // << "\t closure detected " << endl;
+ if ( 1.1 * allowedSize < pIt1->mySegSize )
+ {
+ sizeDecreased = true;
+ sizeTree.SetSize( pIt1->myP, allowedSize );
+ // cout << "E " << theMesh.GetMeshDS()->ShapeToIndex( eData.Edge() )
+ // << "\t SetSize " << allowedSize << " at "
+ // << pIt1->myP.X() <<", "<< pIt1->myP.Y()<<", "<<pIt1->myP.Z() << endl;
+ pIt2 = pIt1;
+ if ( --pIt2 != eData.myPoints.end() && pIt2->mySegSize > allowedSize )
+ sizeTree.SetSize( eData.myC3d.Value( 0.6*pIt2->myU + 0.4*pIt1->myU ), allowedSize );
+ pIt2 = pIt1;
+ if ( ++pIt2 != eData.myPoints.end() && pIt2->mySegSize > allowedSize )
+ sizeTree.SetSize( eData.myC3d.Value( 0.6*pIt2->myU + 0.4*pIt1->myU ), allowedSize );
+ }
pIt1->mySegSize = allowedSize;
}
++pIt1;
} // while ( sizeDecreased )
} // loop on myEdges
- //*theProgress = 0.3 + 0.3 * iF / double( faceMap.Extent() );
+ // *theProgress = 0.3 + 0.3 * iF / double( faceMap.Extent() );
} // loop on faceMap
{
EdgeData& eData = myEdges[ iE ];
- // estimate roughly min segement size on the EDGE
+ // estimate roughly min segment size on the EDGE
double edgeMinSize = myHyp->GetMaxSize();
EdgeData::TPntIter pIt1 = eData.myPoints.begin();
for ( ; pIt1 != eData.myPoints.end(); ++pIt1 )
- edgeMinSize = Min( edgeMinSize, mySizeTree->GetSize( pIt1->myP ));
+ edgeMinSize = Min( edgeMinSize,
+ Min( pIt1->mySegSize, mySizeTree->GetSize( pIt1->myP )));
const double f = eData.myC3d.FirstParameter(), l = eData.myC3d.LastParameter();
const double parLen = l - f;
// compute nb of segments
bool toRecompute = true;
double maxSegSize = 0;
+ size_t i = 1, segCount;
//cout << "E " << theMesh.GetMeshDS()->ShapeToIndex( eData.Edge() ) << endl;
while ( toRecompute ) // recompute if segment size at some point is less than edgeMinSize/nbDivSeg
{
nbSegs[0] = 0;
toRecompute = false;
+ // fill nbSegs with segment size stored in EdgeData::ProbePnt::mySegSize which can
+ // be less than size in mySizeTree
+ pIt1 = eData.myPoints.begin();
+ EdgeData::ProbePnt* pp1 = &(*pIt1), *pp2;
+ for ( ++pIt1; pIt1 != eData.myPoints.end(); ++pIt1 )
+ {
+ pp2 = &(*pIt1);
+ double size1 = Min( pp1->mySegSize, myHyp->GetMaxSize() );
+ double size2 = Min( pp2->mySegSize, myHyp->GetMaxSize() );
+ double r, u, du = pp2->myU - pp1->myU;
+ while(( u = f + parLen * i / nbDiv ) < pp2->myU )
+ {
+ r = ( u - pp1->myU ) / du;
+ nbSegs[i] = (1-r) * size1 + r * size2;
+ ++i;
+ }
+ if ( i < nbSegs.size() )
+ nbSegs[i] = size2;
+ pp1 = pp2;
+ }
+ // fill nbSegs with local nb of segments
gp_Pnt p1 = eData.First().myP, p2, pDiv = p1;
- for ( size_t i = 1, segCount = 1; i < nbSegs.size(); ++i )
+ for ( i = 1, segCount = 1; i < nbSegs.size(); ++i )
{
p2 = eData.myC3d.Value( f + parLen * i / nbDiv );
- double locSize = Min( mySizeTree->GetSize( p2 ), myHyp->GetMaxSize() );
+ double locSize = Min( mySizeTree->GetSize( p2 ), nbSegs[i] );
double nb = p1.Distance( p2 ) / locSize;
// if ( nbSegs.size() < 30 )
// cout << "locSize " << locSize << " nb " << nb << endl;
fact = ++nbSegFinal / nbSegs.back();
//cout << "nbSegs.back() " << nbSegs.back() << " nbSegFinal " << nbSegFinal << endl;
params.clear();
- for ( int i = 0, segCount = 1; segCount < nbSegFinal; ++segCount )
+ for ( i = 0, segCount = 1; segCount < nbSegFinal; ++segCount )
{
while ( nbSegs[i] * fact < segCount )
++i;
helper.SetElementsOnShape( true );
const int ID = 0;
const SMDS_MeshNode *n1 = nf, *n2;
- for ( size_t i = 0; i < params.size(); ++i, n1 = n2 )
+ for ( i = 0; i < params.size(); ++i, n1 = n2 )
{
gp_Pnt p2 = eData.myC3d.Value( params[i] );
n2 = helper.AddNode( p2.X(), p2.Y(), p2.Z(), ID, params[i] );
return false;
myQuadStruct = quad;
- bool ok = false;
+ updateDegenUV( quad );
+
+ enum { NOT_COMPUTED = -1, COMPUTE_FAILED = 0, COMPUTE_OK = 1 };
+ int res = NOT_COMPUTED;
if (myQuadranglePreference)
{
int n1 = quad->side[0]->NbPoints();
if (nfull == ntmp && ((n1 != n3) || (n2 != n4)))
{
// special path genarating only quandrangle faces
- ok = computeQuadPref( aMesh, F, quad );
+ res = computeQuadPref( aMesh, F, quad );
}
}
else if (myQuadType == QUAD_REDUCED)
if ((n1 == n3 && n2 != n4 && n24tmp == n24) ||
(n2 == n4 && n1 != n3 && n13tmp == n13))
{
- ok = computeReduced( aMesh, F, quad );
+ res = computeReduced( aMesh, F, quad );
}
else
{
}
}
- ok = computeQuadDominant( aMesh, F, quad );
+ if ( res == NOT_COMPUTED )
+ {
+ res = computeQuadDominant( aMesh, F, quad );
+ }
- if ( ok && myNeedSmooth )
+ if ( res == COMPUTE_OK && myNeedSmooth )
smooth( quad );
- return ok;
+ return ( res == COMPUTE_OK );
}
//================================================================================
ignoreMediumNodes, myProxyMesh));
++iSide;
}
+ if ( quad->side.size() == 4 )
+ break;
if ( nbLoops > 8 )
{
error(TComm("Bug: infinite loop in StdMeshers_Quadrangle_2D::CheckNbEdges()"));
// =down
//
- updateDegenUV( quad );
-
int nbhoriz = Min(quad->side[0]->NbPoints(), quad->side[2]->NbPoints());
int nbvertic = Min(quad->side[1]->NbPoints(), quad->side[3]->NbPoints());
bool WisF = true;
int i,j,geomFaceID = meshDS->ShapeToIndex(aFace);
- updateDegenUV( quad );
-
int nb = quad->side[0]->NbPoints();
int nr = quad->side[1]->NbPoints();
int nt = quad->side[2]->NbPoints();
if (uv_eb.size() != nb || uv_er.size() != nr || uv_et.size() != nt || uv_el.size() != nl)
return error(COMPERR_BAD_INPUT_MESH);
- updateDegenUV( quad );
-
// arrays for normalized params
TColStd_SequenceOfReal npb, npr, npt, npl;
for (j = 0; j < nb; j++) {
uv1.v = uv2.v = 0.5 * ( uv1.v + uv2.v );
}
- else if ( quad->side.size() == 4 )
+ else if ( quad->side.size() == 4 && myQuadType == QUAD_STANDARD)
// Set number of nodes on a degenerated side to be same as on an opposite side
// ----------------------------------------------------------------------------
while ( fIt->more() )
{
const SMDS_MeshElement* face = fIt->next();
- const int nbN = face->NbCornerNodes();
- const int nInd = face->GetNodeIndex( node );
+ const int nbN = face->NbCornerNodes();
+ const int nInd = face->GetNodeIndex( node );
const int prevInd = myHelper->WrapIndex( nInd - 1, nbN );
const int nextInd = myHelper->WrapIndex( nInd + 1, nbN );
const SMDS_MeshNode* prevNode = face->GetNode( prevInd );
if ( sNode._triangles.empty() )
continue; // not movable node
- // compute a new XYZ
- gp_XYZ newXYZ (0,0,0);
- for ( unsigned i = 0; i < sNode._triangles.size(); ++i )
- newXYZ += sNode._triangles[i]._n1->_xyz;
- newXYZ /= sNode._triangles.size();
-
- // compute a new UV by projection
gp_XY newUV;
- proj.Perform( newXYZ );
- bool isValid = ( proj.IsDone() && proj.NbPoints() > 0 );
- if ( isValid )
+ bool isValid = false;
+ bool use3D = ( iLoop > 2 ); // 3 loops in 2D and 2, in 3D
+
+ if ( use3D )
{
- // check validity of the newUV
- Quantity_Parameter u,v;
- proj.LowerDistanceParameters( u, v );
- newUV.SetCoord( u, v );
- for ( unsigned i = 0; i < sNode._triangles.size() && isValid; ++i )
- isValid = ( sNode._triangles[i].IsForward( newUV ) == refForward );
+ // compute a new XYZ
+ gp_XYZ newXYZ (0,0,0);
+ for ( unsigned i = 0; i < sNode._triangles.size(); ++i )
+ newXYZ += sNode._triangles[i]._n1->_xyz;
+ newXYZ /= sNode._triangles.size();
+
+ // compute a new UV by projection
+ proj.Perform( newXYZ );
+ isValid = ( proj.IsDone() && proj.NbPoints() > 0 );
+ if ( isValid )
+ {
+ // check validity of the newUV
+ Quantity_Parameter u,v;
+ proj.LowerDistanceParameters( u, v );
+ newUV.SetCoord( u, v );
+ for ( unsigned i = 0; i < sNode._triangles.size() && isValid; ++i )
+ isValid = ( sNode._triangles[i].IsForward( newUV ) == refForward );
+ }
}
if ( !isValid )
{
theVertices.clear();
vector< double > angles;
vector< TopoDS_Edge > edgeVec;
- vector< int > cornerInd;
+ vector< int > cornerInd, nbSeg;
angles.reserve( vertexByAngle.size() );
edgeVec.reserve( vertexByAngle.size() );
+ nbSeg.reserve( vertexByAngle.size() );
cornerInd.reserve( nbCorners );
for ( edge = theWire.begin(); edge != theWire.end(); ++edge )
{
}
angles.push_back( angleByVertex.IsBound( v ) ? angleByVertex( v ) : -M_PI );
edgeVec.push_back( *edge );
+ if ( theConsiderMesh && isThereVariants )
+ {
+ if ( SMESHDS_SubMesh* sm = helper.GetMeshDS()->MeshElements( *edge ))
+ nbSeg.push_back( sm->NbNodes() + 1 );
+ else
+ nbSeg.push_back( 0 );
+ }
}
// refine the result vector - make sides elual by length if
//vector<const SMDS_MeshNode*> _nodesAround;
vector<_Simplex> _simplices; // for quality check
- enum SmoothType { LAPLACIAN, CENTROIDAL, ANGULAR };
+ enum SmoothType { LAPLACIAN, CENTROIDAL, ANGULAR, TFI };
bool Smooth(int& badNb,
Handle(Geom_Surface)& surface,
bool prepareEdgeToShrink( _LayerEdge& edge, const TopoDS_Face& F,
SMESH_MesherHelper& helper,
const SMESHDS_SubMesh* faceSubMesh );
- void fixBadFaces(const TopoDS_Face& F, SMESH_MesherHelper& helper);
+ void fixBadFaces(const TopoDS_Face& F,
+ SMESH_MesherHelper& helper,
+ const bool is2D,
+ const int step,
+ set<const SMDS_MeshNode*> * involvedNodes=NULL);
bool addBoundaryElements();
bool error( const string& text, int solidID=-1 );
virtual vtkIdType GetVtkType() const { return -1; }
virtual SMDSAbs_EntityType GetEntityType() const { return SMDSEntity_Last; }
virtual SMDSAbs_GeometryType GetGeomType() const { return SMDSGeom_TRIANGLE; }
-virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType type) const
+ virtual SMDS_ElemIteratorPtr elementsIterator(SMDSAbs_ElementType) const
{ return SMDS_ElemIteratorPtr( new SMDS_NodeVectorElemIterator( _nn.begin(), _nn.end()));}
};
//--------------------------------------------------------------------------------
_nn[3]=_le2->_nodes[0];
}
};
+ //--------------------------------------------------------------------------------
+ /*!
+ * \brief Retriever of node coordinates either directly of from a surface by node UV.
+ * \warning Location of a surface is ignored
+ */
+ struct NodeCoordHelper
+ {
+ SMESH_MesherHelper& _helper;
+ const TopoDS_Face& _face;
+ Handle(Geom_Surface) _surface;
+ gp_XYZ (NodeCoordHelper::* _fun)(const SMDS_MeshNode* n) const;
+
+ NodeCoordHelper(const TopoDS_Face& F, SMESH_MesherHelper& helper, bool is2D)
+ : _helper( helper ), _face( F )
+ {
+ if ( is2D )
+ {
+ TopLoc_Location loc;
+ _surface = BRep_Tool::Surface( _face, loc );
+ }
+ if ( _surface.IsNull() )
+ _fun = & NodeCoordHelper::direct;
+ else
+ _fun = & NodeCoordHelper::byUV;
+ }
+ gp_XYZ operator()(const SMDS_MeshNode* n) const { return (this->*_fun)( n ); }
+
+ private:
+ gp_XYZ direct(const SMDS_MeshNode* n) const
+ {
+ return SMESH_TNodeXYZ( n );
+ }
+ gp_XYZ byUV (const SMDS_MeshNode* n) const
+ {
+ gp_XY uv = _helper.GetNodeUV( _face, n );
+ return _surface->Value( uv.X(), uv.Y() ).XYZ();
+ }
+ };
} // namespace VISCOUS_3D
//================================================================================
double u1 = intervals( i );
double u2 = intervals( i+1 );
curve.D2( 0.5*( u1+u2 ), p, drv1, drv2 );
- double cross = drv2 * drv1; //drv2 ^ drv1;
+ double cross = drv2 ^ drv1;
if ( E.Orientation() == TopAbs_REVERSED )
cross = -cross;
- isConvex = ( cross > -1e-9 );
+ isConvex = ( cross > 0.1 ); //-1e-9 );
}
// check if concavity is strong enough to care about it
//const double maxAngle = 5 * Standard_PI180;
}
void Finish() {
if (py)
- *py << "mesh.MakeGroup('Viscous Prisms',VOLUME,FT_ElemGeomType,'=',Geom_PENTA)"<<endl;
+ *py << "mesh.MakeGroup('Viscous Prisms',SMESH.VOLUME,SMESH.FT_ElemGeomType,'=',SMESH.Geom_PENTA)"<<endl;
delete py; py=0;
}
~PyDump() { Finish(); }
if ( s.IsNull() || s.ShapeType() != TopAbs_FACE || !subIds.count( *id ))
continue;
totalNbFaces++;
- //nbLayerFaces += subIds.count( *id );
F = TopoDS::Face( s );
+ // IDEA: if there is a problem with finding a normal,
+ // we can compute an area-weighted sum of normals of all faces sharing the node
gp_XY uv = helper.GetNodeUV( F, node, 0, &normOK );
Handle(Geom_Surface) surface = BRep_Tool::Surface( F );
- surface->D1( uv.X(),uv.Y(), p, du,dv );
+ surface->D1( uv.X(), uv.Y(), p, du,dv );
geomNorm = du ^ dv;
double size2 = geomNorm.SquareMagnitude();
+ if ( size2 < 1e-10 ) // singularity
+ {
+ SMDS_ElemIteratorPtr fIt = node->GetInverseElementIterator(SMDSAbs_Face);
+ while ( fIt->more() )
+ {
+ const SMDS_MeshElement* f = fIt->next();
+ if ( editor.FindShape( f ) == *id )
+ {
+ SMESH_MeshAlgos::FaceNormal( f, (gp_XYZ&) geomNorm.XYZ(), /*normalized=*/false );
+ size2 = geomNorm.SquareMagnitude();
+ break;
+ }
+ }
+ // double ddu = 0, ddv = 0;
+ // if ( du.SquareMagnitude() > dv.SquareMagnitude() )
+ // ddu = 1e-3;
+ // else
+ // ddv = 1e-3;
+ // surface->D1( uv.X()+ddu, uv.Y()+ddv, p, du,dv );
+ // geomNorm = du ^ dv;
+ // size2 = geomNorm.SquareMagnitude();
+ // if ( size2 < 1e-10 )
+ // {
+ // surface->D1( uv.X()-ddu, uv.Y()-ddv, p, du,dv );
+ // geomNorm = du ^ dv;
+ // size2 = geomNorm.SquareMagnitude();
+ // }
+ }
if ( size2 > numeric_limits<double>::min() )
geomNorm /= sqrt( size2 );
else
const _SolidData* dataToCheckOri,
const bool toSort)
{
+ simplices.clear();
SMDS_ElemIteratorPtr fIt = node->GetInverseElementIterator(SMDSAbs_Face);
while ( fIt->more() )
{
const SMDS_MeshElement* f = fIt->next();
- const TGeomID shapeInd = f->getshapeId();
+ const TGeomID shapeInd = f->getshapeId();
if ( ingnoreShapes.count( shapeInd )) continue;
const int nbNodes = f->NbCornerNodes();
- int srcInd = f->GetNodeIndex( node );
+ const 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 ));
}
}
+ dumpFunction(SMESH_Comment("beforeShrinkFace")<<f2sd->first); // debug
+ SMDS_ElemIteratorPtr fIt = smDS->GetElements();
+ while ( fIt->more() )
+ if ( const SMDS_MeshElement* f = fIt->next() )
+ dumpChangeNodes( f );
+
// Replace source nodes by target nodes in mesh faces to shrink
const SMDS_MeshNode* nodes[20];
for ( unsigned i = 0; i < lEdges.size(); ++i )
const SMDS_MeshElement* f = fIt->next();
if ( !smDS->Contains( f ))
continue;
- SMDS_ElemIteratorPtr nIt = f->nodesIterator();
- for ( int iN = 0; iN < f->NbNodes(); ++iN )
+ SMDS_NodeIteratorPtr nIt = f->nodeIterator();
+ for ( int iN = 0; nIt->more(); ++iN )
{
- const SMDS_MeshNode* n = static_cast<const SMDS_MeshNode*>( nIt->next() );
+ const SMDS_MeshNode* n = nIt->next();
nodes[iN] = ( n == srcNode ? tgtNode : n );
}
helper.GetMeshDS()->ChangeElementNodes( f, nodes, f->NbNodes() );
// Create _SmoothNode's on face F
vector< _SmoothNode > nodesToSmooth( smoothNodes.size() );
{
- dumpFunction(SMESH_Comment("beforeShrinkFace")<<f2sd->first); // debug
const bool sortSimplices = isConcaveFace;
for ( unsigned i = 0; i < smoothNodes.size(); ++i )
{
helper.GetNodeUV( F, n, 0, &isOkUV);
dumpMove( n );
}
- dumpFunctionEnd();
}
//if ( nodesToSmooth.empty() ) continue;
- // Find EDGE's to shrink
+ // Find EDGE's to shrink and set simpices to LayerEdge's
set< _Shrinker1D* > eShri1D;
{
for ( unsigned i = 0; i < lEdges.size(); ++i )
// srinked while srinking another FACE
srinker.RestoreParams();
}
+ getSimplices( /*tgtNode=*/edge->_nodes.back(), edge->_simplices, ignoreShapes );
+ }
+ }
+
+ bool toFixTria = false; // to improve quality of trias by diagonal swap
+ if ( isConcaveFace )
+ {
+ const bool hasTria = _mesh->NbTriangles(), hasQuad = _mesh->NbQuadrangles();
+ if ( hasTria != hasQuad ) {
+ toFixTria = hasTria;
+ }
+ else {
+ set<int> nbNodesSet;
+ SMDS_ElemIteratorPtr fIt = smDS->GetElements();
+ while ( fIt->more() && nbNodesSet.size() < 2 )
+ nbNodesSet.insert( fIt->next()->NbCornerNodes() );
+ toFixTria = ( *nbNodesSet.begin() == 3 );
}
}
bool shrinked = true;
int badNb, shriStep=0, smooStep=0;
_SmoothNode::SmoothType smoothType
- = isConcaveFace ? _SmoothNode::CENTROIDAL : _SmoothNode::LAPLACIAN;
+ = isConcaveFace ? _SmoothNode::ANGULAR : _SmoothNode::LAPLACIAN;
while ( shrinked )
{
shriStep++;
// -----------------------------------------------
dumpFunction(SMESH_Comment("moveBoundaryOnF")<<f2sd->first<<"_st"<<shriStep ); // debug
shrinked = false;
- for ( unsigned i = 0; i < lEdges.size(); ++i )
+ for ( size_t i = 0; i < lEdges.size(); ++i )
{
shrinked |= lEdges[i]->SetNewLength2d( surface,F,helper );
}
// Smoothing in 2D
// -----------------
int nbNoImpSteps = 0;
- bool moved = true;
+ bool moved = true;
badNb = 1;
while (( nbNoImpSteps < 5 && badNb > 0) && moved)
{
return error(SMESH_Comment("Can't shrink 2D mesh on face ") << f2sd->first );
if ( shriStep > 200 )
return error(SMESH_Comment("Infinite loop at shrinking 2D mesh on face ") << f2sd->first );
- }
+
+ // Fix narrow triangles by swapping diagonals
+ // ---------------------------------------
+ if ( toFixTria )
+ {
+ set<const SMDS_MeshNode*> usedNodes;
+ fixBadFaces( F, helper, /*is2D=*/true, shriStep, & usedNodes); // swap diagonals
+
+ // update working data
+ set<const SMDS_MeshNode*>::iterator n;
+ for ( size_t i = 0; i < nodesToSmooth.size() && !usedNodes.empty(); ++i )
+ {
+ n = usedNodes.find( nodesToSmooth[ i ]._node );
+ if ( n != usedNodes.end())
+ {
+ getSimplices( nodesToSmooth[ i ]._node,
+ nodesToSmooth[ i ]._simplices,
+ ignoreShapes, NULL,
+ /*sortSimplices=*/ smoothType == _SmoothNode::ANGULAR );
+ usedNodes.erase( n );
+ }
+ }
+ for ( size_t i = 0; i < lEdges.size() && !usedNodes.empty(); ++i )
+ {
+ n = usedNodes.find( /*tgtNode=*/ lEdges[i]->_nodes.back() );
+ if ( n != usedNodes.end())
+ {
+ getSimplices( lEdges[i]->_nodes.back(),
+ lEdges[i]->_simplices,
+ ignoreShapes );
+ usedNodes.erase( n );
+ }
+ }
+ }
+ } // while ( shrinked )
// No wrongly shaped faces remain; final smooth. Set node XYZ.
bool isStructuredFixed = false;
isStructuredFixed = algo->FixInternalNodes( *data._proxyMesh, F );
if ( !isStructuredFixed )
{
- if ( isConcaveFace )
- fixBadFaces( F, helper ); // fix narrow faces by swapping diagonals
- for ( int st = /*highQuality ? 10 :*/ 3; st; --st )
+ if ( isConcaveFace ) // fix narrow faces by swapping diagonals
+ fixBadFaces( F, helper, /*is2D=*/false, ++shriStep );
+
+ for ( int st = 3; st; --st )
{
+ switch( st ) {
+ case 1: smoothType = _SmoothNode::LAPLACIAN; break;
+ case 2: smoothType = _SmoothNode::LAPLACIAN; break;
+ case 3: smoothType = _SmoothNode::ANGULAR; break;
+ }
dumpFunction(SMESH_Comment("shrinkFace")<<f2sd->first<<"_st"<<++smooStep); // debug
for ( unsigned i = 0; i < nodesToSmooth.size(); ++i )
{
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* > proj2node;
- SMDS_ElemIteratorPtr fIt = srcNode->GetInverseElementIterator(SMDSAbs_Face);
- while ( fIt->more() )
- {
- const SMDS_MeshElement* f = fIt->next();
- if ( faceSubMesh->Contains( f ))
- faces.push_back( f );
- }
- for ( unsigned i = 0; i < faces.size(); ++i )
- {
- const int nbNodes = faces[i]->NbCornerNodes();
- for ( int j = 0; j < nbNodes; ++j )
- {
- const SMDS_MeshNode* n = faces[i]->GetNode(j);
- if ( n == srcNode ) continue;
- if ( n->GetPosition()->GetTypeOfPosition() != SMDS_TOP_FACE &&
- ( faces.size() > 1 || nbNodes > 3 ))
- continue;
- gp_Pnt2d uv = helper.GetNodeUV( F, n );
- gp_Vec2d uvDirN( srcUV, uv );
- double proj = uvDirN * uvDir;
- proj2node.insert( make_pair( proj, n ));
- }
- }
+ // // IMPORTANT to have src nodes NOT yet REPLACED by tgt nodes in shrinked faces
+ // vector<const SMDS_MeshElement*> faces;
+ // multimap< double, const SMDS_MeshNode* > proj2node;
+ // SMDS_ElemIteratorPtr fIt = srcNode->GetInverseElementIterator(SMDSAbs_Face);
+ // while ( fIt->more() )
+ // {
+ // const SMDS_MeshElement* f = fIt->next();
+ // if ( faceSubMesh->Contains( f ))
+ // faces.push_back( f );
+ // }
+ // for ( unsigned i = 0; i < faces.size(); ++i )
+ // {
+ // const int nbNodes = faces[i]->NbCornerNodes();
+ // for ( int j = 0; j < nbNodes; ++j )
+ // {
+ // const SMDS_MeshNode* n = faces[i]->GetNode(j);
+ // if ( n == srcNode ) continue;
+ // if ( n->GetPosition()->GetTypeOfPosition() != SMDS_TOP_FACE &&
+ // ( faces.size() > 1 || nbNodes > 3 ))
+ // continue;
+ // gp_Pnt2d uv = helper.GetNodeUV( F, n );
+ // gp_Vec2d uvDirN( srcUV, uv );
+ // double proj = uvDirN * uvDir;
+ // proj2node.insert( make_pair( proj, n ));
+ // }
+ // }
- multimap< double, const SMDS_MeshNode* >::iterator p2n = proj2node.begin(), p2nEnd;
- const double minProj = p2n->first;
- const double projThreshold = 1.1 * uvLen;
- if ( minProj > projThreshold )
- {
- // tgtNode is located so that it does not make faces with wrong orientation
- return true;
- }
+ // multimap< double, const SMDS_MeshNode* >::iterator p2n = proj2node.begin(), p2nEnd;
+ // const double minProj = p2n->first;
+ // const double projThreshold = 1.1 * uvLen;
+ // if ( minProj > projThreshold )
+ // {
+ // // tgtNode is located so that it does not make faces with wrong orientation
+ // return true;
+ // }
edge._pos.resize(1);
edge._pos[0].SetCoord( tgtUV.X(), tgtUV.Y(), 0 );
// store most risky nodes in _simplices
- p2nEnd = proj2node.lower_bound( projThreshold );
- int nbSimpl = ( std::distance( p2n, p2nEnd ) + 1) / 2;
- edge._simplices.resize( nbSimpl );
- for ( int i = 0; i < nbSimpl; ++i )
- {
- edge._simplices[i]._nPrev = p2n->second;
- if ( ++p2n != p2nEnd )
- edge._simplices[i]._nNext = p2n->second;
- }
+ // p2nEnd = proj2node.lower_bound( projThreshold );
+ // int nbSimpl = ( std::distance( p2n, p2nEnd ) + 1) / 2;
+ // edge._simplices.resize( nbSimpl );
+ // for ( int i = 0; i < nbSimpl; ++i )
+ // {
+ // edge._simplices[i]._nPrev = p2n->second;
+ // if ( ++p2n != p2nEnd )
+ // edge._simplices[i]._nNext = p2n->second;
+ // }
// set UV of source node to target node
SMDS_FacePosition* pos = static_cast<SMDS_FacePosition*>( tgtNode->GetPosition() );
pos->SetUParameter( srcUV.X() );
*/
//================================================================================
-void _ViscousBuilder::fixBadFaces(const TopoDS_Face& F, SMESH_MesherHelper& helper)
+void _ViscousBuilder::fixBadFaces(const TopoDS_Face& F,
+ SMESH_MesherHelper& helper,
+ const bool is2D,
+ const int step,
+ set<const SMDS_MeshNode*> * involvedNodes)
{
SMESH::Controls::AspectRatio qualifier;
SMESH::Controls::TSequenceOfXYZ points(3), points1(3), points2(3);
- const double maxAspectRatio = 4.;
+ const double maxAspectRatio = is2D ? 4. : 2;
+ NodeCoordHelper xyz( F, helper, is2D );
// find bad triangles
vector< const SMDS_MeshElement* > badTrias;
vector< double > badAspects;
- SMESHDS_SubMesh* sm = helper.GetMeshDS()->MeshElements( F );
+ SMESHDS_SubMesh* sm = helper.GetMeshDS()->MeshElements( F );
SMDS_ElemIteratorPtr fIt = sm->GetElements();
while ( fIt->more() )
{
const SMDS_MeshElement * f = fIt->next();
if ( f->NbCornerNodes() != 3 ) continue;
- for ( int iP = 0; iP < 3; ++iP ) points(iP+1) = SMESH_TNodeXYZ( f->GetNode(iP));
+ for ( int iP = 0; iP < 3; ++iP ) points(iP+1) = xyz( f->GetNode(iP));
double aspect = qualifier.GetValue( points );
if ( aspect > maxAspectRatio )
{
badAspects.push_back( aspect );
}
}
+ if ( step == 1 )
+ {
+ dumpFunction(SMESH_Comment("beforeSwapDiagonals_F")<<helper.GetSubShapeID());
+ SMDS_ElemIteratorPtr fIt = sm->GetElements();
+ while ( fIt->more() )
+ {
+ const SMDS_MeshElement * f = fIt->next();
+ if ( f->NbCornerNodes() == 3 )
+ dumpChangeNodes( f );
+ }
+ dumpFunctionEnd();
+ }
if ( badTrias.empty() )
return;
double aspRatio [3];
int i1, i2, i3;
- involvedFaces.insert( badTrias[iTia] );
+ if ( !involvedFaces.insert( badTrias[iTia] ).second )
+ continue;
for ( int iP = 0; iP < 3; ++iP )
- points(iP+1) = SMESH_TNodeXYZ( badTrias[iTia]->GetNode(iP));
+ points(iP+1) = xyz( badTrias[iTia]->GetNode(iP));
// find triangles adjacent to badTrias[iTia] with better aspect ratio after diag-swaping
int bestCouple = -1;
// aspect ratio of an adjacent tria
for ( int iP = 0; iP < 3; ++iP )
- points2(iP+1) = SMESH_TNodeXYZ( trias[iSide].second->GetNode(iP));
+ points2(iP+1) = xyz( trias[iSide].second->GetNode(iP));
double aspectInit = qualifier.GetValue( points2 );
// arrange nodes as after diag-swaping
if ( aspRatio[ iSide ] > aspectInit + badAspects[ iTia ] )
continue;
+ // prevent inversion of a triangle
+ gp_Vec norm1 = gp_Vec( points1(1), points1(3) ) ^ gp_Vec( points1(1), points1(2) );
+ gp_Vec norm2 = gp_Vec( points2(1), points2(3) ) ^ gp_Vec( points2(1), points2(2) );
+ if ( norm1 * norm2 < 0. && norm1.Angle( norm2 ) > 70./180.*M_PI )
+ continue;
+
if ( bestCouple < 0 || aspRatio[ bestCouple ] > aspRatio[ iSide ] )
bestCouple = iSide;
}
// swap diagonals
SMESH_MeshEditor editor( helper.GetMesh() );
- dumpFunction(SMESH_Comment("beforeSwapDiagonals_F")<<helper.GetSubShapeID());
+ dumpFunction(SMESH_Comment("beforeSwapDiagonals_F")<<helper.GetSubShapeID()<<"_"<<step);
for ( size_t i = 0; i < triaCouples.size(); ++i )
{
dumpChangeNodes( triaCouples[i].first );
dumpChangeNodes( triaCouples[i].second );
editor.InverseDiag( triaCouples[i].first, triaCouples[i].second );
}
- dumpFunctionEnd();
+
+ if ( involvedNodes )
+ for ( size_t i = 0; i < triaCouples.size(); ++i )
+ {
+ involvedNodes->insert( triaCouples[i].first->begin_nodes(),
+ triaCouples[i].first->end_nodes() );
+ involvedNodes->insert( triaCouples[i].second->begin_nodes(),
+ triaCouples[i].second->end_nodes() );
+ }
// just for debug dump resulting triangles
- dumpFunction(SMESH_Comment("swapDiagonals_F")<<helper.GetSubShapeID());
+ dumpFunction(SMESH_Comment("swapDiagonals_F")<<helper.GetSubShapeID()<<"_"<<step);
for ( size_t i = 0; i < triaCouples.size(); ++i )
{
dumpChangeNodes( triaCouples[i].first );
if ( _sWOL.ShapeType() == TopAbs_FACE )
{
gp_XY curUV = helper.GetNodeUV( F, tgtNode );
- gp_Pnt2d tgtUV( _pos[0].X(), _pos[0].Y());
+ gp_Pnt2d tgtUV( _pos[0].X(), _pos[0].Y() );
gp_Vec2d uvDir( _normal.X(), _normal.Y() );
const double uvLen = tgtUV.Distance( curUV );
+ const double kSafe = Max( 0.5, 1. - 0.1 * _simplices.size() );
// Select shrinking step such that not to make faces with wrong orientation.
- const double kSafe = 0.8;
- const double minStepSize = uvLen / 10;
double stepSize = uvLen;
- for ( unsigned i = 0; i < _simplices.size(); ++i )
+ for ( size_t i = 0; i < _simplices.size(); ++i )
{
- const SMDS_MeshNode* nn[2] = { _simplices[i]._nPrev, _simplices[i]._nNext };
- for ( int j = 0; j < 2; ++j )
- if ( const SMDS_MeshNode* n = nn[j] )
- {
- gp_XY uv = helper.GetNodeUV( F, n );
- gp_Vec2d uvDirN( curUV, uv );
- double proj = uvDirN * uvDir * kSafe;
- if ( proj < stepSize && proj > minStepSize )
- stepSize = proj;
- else if ( proj < minStepSize )
- stepSize = minStepSize;
- }
+ // find intersection of 2 lines: curUV-tgtUV and that connecting simplex nodes
+ gp_XY uvN1 = helper.GetNodeUV( F, _simplices[i]._nPrev );
+ gp_XY uvN2 = helper.GetNodeUV( F, _simplices[i]._nNext );
+ gp_XY dirN = uvN2 - uvN1;
+ double det = uvDir.Crossed( dirN );
+ if ( Abs( det ) < std::numeric_limits<double>::min() ) continue;
+ gp_XY dirN2Cur = curUV - uvN1;
+ double step = dirN.Crossed( dirN2Cur ) / det;
+ if ( step > 0 )
+ stepSize = Min( step, stepSize );
}
-
gp_Pnt2d newUV;
- if ( uvLen - stepSize < _len / 20. )
+ if ( uvLen - stepSize < _len / 200. )
{
newUV = tgtUV;
_pos.clear();
}
+ else if ( stepSize > 0 )
+ {
+ newUV = curUV + uvDir.XY() * stepSize * kSafe;
+ }
else
{
- newUV = curUV + uvDir.XY() * stepSize;
+ return true;
}
-
SMDS_FacePosition* pos = static_cast<SMDS_FacePosition*>( tgtNode->GetPosition() );
pos->SetUParameter( newUV.X() );
pos->SetVParameter( newUV.Y() );
// compute new UV for the node
gp_XY newPos (0,0);
-/* if ( how == ANGULAR && _simplices.size() == 4 )
+ if ( how == TFI && _simplices.size() == 4 )
{
- vector<gp_XY> corners; corners.reserve(4);
+ gp_XY corners[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 );
+ corners[i] = helper.GetNodeUV( face, _simplices[i]._nOpp, _node );
+ else
+ throw SALOME_Exception(LOCALIZED("TFI smoothing: _Simplex::_nOpp not set!"));
+
+ newPos = helper.calcTFI ( 0.5, 0.5,
+ corners[0], corners[1], corners[2], corners[3],
+ uv[1], uv[2], uv[3], uv[0] );
+ }
+ else if ( how == ANGULAR )
+ {
+ newPos = computeAngularPos( uv, helper.GetNodeUV( face, _node ), refSign );
}
- else*/ if ( how == CENTROIDAL && _simplices.size() > 3 )
+ else if ( how == CENTROIDAL && _simplices.size() > 3 )
{
// average centers of diagonals wieghted with their reciprocal lengths
if ( _simplices.size() == 4 )
else
{
// Laplacian smooth
- //isCentroidal = false;
for ( size_t i = 0; i < _simplices.size(); ++i )
newPos += uv[i];
newPos /= _simplices.size();
if ( nbOkAfter < nbOkBefore )
{
- // if ( isCentroidal )
- // return Smooth( badNb, surface, helper, refSign, !isCentroidal, set3D );
badNb += _simplices.size() - nbOkBefore;
return false;
}
{
uv.push_back( uv.front() );
- vector< gp_XY > edgeDir( uv.size() );
+ 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];
+ 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();
+ edgeDir.back() = edgeDir.front();
edgeSize.back() = edgeSize.front();
- gp_XY newPos(0,0);
- int nbEdges = 0;
+ gp_XY newPos(0,0);
+ int nbEdges = 0;
double sumSize = 0;
for ( size_t i = 1; i < edgeDir.size(); ++i )
{
}
bisec /= bisecSize;
- gp_XY dirToN = uvToFix - p;
+ gp_XY dirToN = uvToFix - p;
double distToN = dirToN.Modulus();
if ( bisec * dirToN < 0 )
distToN = -distToN;
<TS version="2.0" language="fr_FR">
<context>
<name>@default</name>
+ <message>
+ <source>SMESH_EDGES_WITH_LAYERS</source>
+ <translation type="unfinished">Edges with layers</translation>
+ </message>
+ <message>
+ <source>SMESH_FACES_WITH_LAYERS</source>
+ <translation type="unfinished">Faces with layers
+(walls)</translation>
+ </message>
+ <message>
+ <source>SMESH_ADAPTIVE1D_TITLE</source>
+ <translation type="unfinished">Hypothesis Construction</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX_SIZE</source>
+ <translation type="unfinished">Max size</translation>
+ </message>
+ <message>
+ <source>SMESH_MIN_SIZE</source>
+ <translation type="unfinished">Min size</translation>
+ </message>
+ <message>
+ <source>SMESH_ADAPTIVE1D_HYPOTHESIS</source>
+ <translation type="unfinished">Adaptive</translation>
+ </message>
<message>
<source>SMESH_ARITHMETIC_1D_HYPOTHESIS</source>
<translation>Arithmétique 1D</translation>
<translation>Pas</translation>
</message>
</context>
+<context>
+ <name>StdMeshersGUI_StdHypothesisCreator</name>
+ <message>
+ <source>TO_IGNORE_EDGES</source>
+ <translation type="unfinished">Edges without layers (inlets and oulets)</translation>
+ </message>
+ <message>
+ <source>NOT_TO_IGNORE_EDGES</source>
+ <translation type="unfinished">Edges with layers (walls)</translation>
+ </message>
+ <message>
+ <source>TO_IGNORE_EDGES_OR_NOT</source>
+ <translation type="unfinished">Specified edges are</translation>
+ </message>
+</context>
</TS>
<name>StdMeshersGUI_StdHypothesisCreator</name>
<message>
<source>TO_IGNORE_EDGES_OR_NOT</source>
- <translation>TO_IGNORE_EDGES_OR_NOT</translation>
+ <translation>指定したエッジが</translation>
</message>
<message>
<source>NOT_TO_IGNORE_EDGES</source>
- <translation>NOT_TO_IGNORE_EDGES</translation>
+ <translation>エッジ層 (壁)</translation>
</message>
<message>
<source>TO_IGNORE_EDGES</source>
- <translation>TO_IGNORE_EDGES</translation>
+ <translation>エッジ層 (入り江および oulets) なし</translation>
</message>
</context>
<context>
<source>SMESH_CUT_NEG_MODE</source>
<translation>負のセクション</translation>
</message>
+ <message>
+ <source>SMESH_ADAPTIVE1D_HYPOTHESIS</source>
+ <translation>アダプティブ1次元Hypothesis</translation>
+ </message>
+ <message>
+ <source>SMESH_MIN_SIZE</source>
+ <translation>最小サイズ</translation>
+ </message>
+ <message>
+ <source>SMESH_MAX_SIZE</source>
+ <translation>最大サイズ</translation>
+ </message>
+ <message>
+ <source>SMESH_ADAPTIVE1D_TITLE</source>
+ <translation>Hypothesis構造</translation>
+ </message>
<message>
<source>SMESH_DEFLECTION1D_HYPOTHESIS</source>
<translation>変形 d</translation>
</message>
<message>
<source>SMESH_MAX_LENGTH_HYPOTHESIS</source>
- <translation>最大長</translation>
+ <translation>最大要素長</translation>
</message>
<message>
<source>SMESH_CARTESIAN_PARAMS_HYPOTHESIS</source>
</message>
<message>
<source>SMESH_VISCOUS_LAYERS_HYPOTHESIS</source>
- <translation>境界層</translation>
+ <translation>境界層設定</translation>
</message>
<message>
<source>SMESH_VISCOUS_LAYERS_TITLE</source>
- <translation>仮定の構成</translation>
+ <translation>詳細設定</translation>
</message>
<message>
<source>SMESH_TOTAL_THICKNESS</source>
</message>
<message>
<source>SMESH_FACES_WO_LAYERS</source>
- <translation>顔なし層 limite\n (入力と出力)</translation>
+ <translation>境界層 (入力と出力) のない顔</translation>
</message>
<message>
<source>SMESH_EDGES_WO_LAYERS</source>
- <translation>ã\82¨ã\83\83ã\82¸å±¤ limite\n (入力と出力) なし</translation>
+ <translation>ã\82¨ã\83\83ã\82¸å¢\83ç\95\8c層 (入力と出力) なし</translation>
</message>
<message>
<source>SMESH_FACES_WITH_LAYERS</source>
- <translation>SMESH_FACES_WITH_LAYERS</translation>
+ <translation>面層 (壁)</translation>
</message>
<message>
<source>SMESH_EDGES_WITH_LAYERS</source>
- <translation>SMESH_EDGES_WITH_LAYERS</translation>
+ <translation>レイヤーのエッジ</translation>
</message>
<message>
<source>SMESH_MAX_LENGTH_TITLE</source>
- <translation>仮定の構成</translation>
+ <translation>要素長設定</translation>
</message>
<message>
<source>SMESH_CARTESIAN_PARAMS_TITLE</source>
</message>
<message>
<source>SMESH_MAX_ELEMENT_VOLUME_TITLE</source>
- <translation>仮定の構成</translation>
+ <translation>詳細設定</translation>
</message>
<message>
<source>SMESH_NB_SEGMENTS_HYPOTHESIS</source>
</message>
<message>
<source>SMESH_SOURCE_EDGE</source>
- <translation>エッジ</translation>
+ <translation>Edge</translation>
</message>
<message>
<source>SMESH_SOURCE_EDGES</source>
</message>
<message>
<source>SMESH_SOURCE_FACE</source>
- <translation>フェース</translation>
+ <translation>Face</translation>
</message>
<message>
<source>SMESH_SOURCE_FACES</source>
self.connect(self.CB_ComputedOverlapDistance,SIGNAL("stateChanged(int)"),self.SP_OverlapDistance.setDisabled)
def PBHelpPressed(self):
+ import SalomePyQt
+ sgPyQt = SalomePyQt.SalomePyQt()
try:
mydir=os.environ["SMESH_ROOT_DIR"]
except Exception:
QMessageBox.warning( self, "Help", "Help unavailable $SMESH_ROOT_DIR not found")
return
- maDoc=mydir+"/share/doc/salome/gui/SMESH/MGCleaner/_downloads/mg-cleaner_user_manual.pdf"
- command="xdg-open "+maDoc+";"
- subprocess.call(command, shell=True)
+
+ maDoc=mydir+"/share/doc/salome/gui/SMESH/MGCleaner/index.html"
+ sgPyQt.helpContext(maDoc,"")
+
+ #maDoc=mydir+"/share/doc/salome/gui/SMESH/MGCleaner/_downloads/mg-cleaner_user_manual.pdf"
+ #command="xdg-open "+maDoc+";"
+ #subprocess.call(command, shell=True)
def PBOKPressed(self):
if not(self.PrepareLigneCommande()):
<rect>
<x>0</x>
<y>0</y>
- <width>800</width>
- <height>500</height>
+ <width>791</width>
+ <height>593</height>
</rect>
</property>
<property name="windowTitle">
</rect>
</property>
<property name="toolTip">
- <string>If the Units parameter is relative, epsilon max correspond to (per thousand) s*Tolerance/1000, where s is the size of the bounding box of the domain.
+ <string>If the Units parameter is relative, epsilon max correspond to s*Tolerance, where s is the size of the bounding box of the domain.
If the Units parameter is absolute, the tolerance parameter is expressed in model units:
if P=2 and point coordinates are given in millimeters, the maximal chordal deviation is 2 mm.</string>
</property>
</rect>
</property>
<property name="maximum">
- <double>0.890000000000000</double>
+ <double>90.000000000000000</double>
</property>
<property name="singleStep">
- <double>0.010000000000000</double>
+ <double>1.000000000000000</double>
</property>
<property name="value">
- <double>0.040000000000000</double>
+ <double>15.000000000000000</double>
</property>
</widget>
<widget class="QLabel" name="label_2">
Advanced Remeshing Options
==========================
-** be aware that no control of coherency is done when you set these parameters : for instance, geometrical approximation is only allowed when yams compute a mesh for finite elements but the GUI will let you choose geometrical approximation and compute a visualisation mesh. read DISTENE documentation **
+.. note::
+ Be aware that no control of coherency is done when you set these parameters : for instance, geometrical approximation is only allowed when SurfOpt computes a mesh for finite elements but the GUI will let you choose geometrical approximation and compute a visualisation mesh. See Distene's documentation for more details :
+ :download:`MeshGems-SurfOpt: The automatic surface remeshing tool of the MeshGems Suite <files/mg-surfopt_user_manual.pdf>`.
- - **Ridge detection**
+
+- **Ridge detection**
if not set (ridge detection disabled ), MeshGems-SurfOpt will not try to detect any new ridge edge by its own mechanism :
it will consider as ridge only the ridges given in the mesh. All non-ridge edges that would have been detected as ridge by the Ridge angle paramaeter (see below split edge) will be considered as part of the same continuous patch. This option should not be checked when all the known ridges of the mesh are given and when all other possible ridges are not geometric ridges to take into account.
- - **Point smoothing**
+- **Point smoothing**
When not set (point smoothing is disabled), MeshGems-SurfOpt will not try to move the initial given vertices (along an edge, a ridge or onto the surface), hence MeshGems-SurfOpt will only swap edges, remove vertices or add vertices (refines) to change the mesh.
- - **Geometrical approximation**
+- **Geometrical approximation**
this field as well as the Chordal deviation tolerance parameter,enables the user to bound the maximal chordal deviation allowed. it avoids having sharp angles. , that is, the maximal distance allowed between the detected curve and the plane of the corresponding mesh face. It avoids having faces too far away from the curve they represent.
.. image:: images/Tolerance.png
This parameter P enables the user to specify the maximal chordal deviation E relatively to the local curvature. the maximal chordal deviation will be set to E=P x r (r is the radius of the circumcercle) if the units parameter is set to relative or E=P if the units parameter is set to absolute.
- - **Ridge angle**
+- **Ridge angle**
This parameter specifies the angular values for the automatic detection of ridges and corners. A ridge is automatically detected if the angle between the normal vectors of two adjacent faces exceeds this value.
- - **Maximal/Minimal size around vertices**
+- **Maximal/Minimal size around vertices**
These two parameters allow the user to prescribe a Maximal/Minimal size for the mesh elements, ie the lengths of the edges.
- - **Mesh gradation**
+- **Mesh gradation**
This paramater P controls the element size variation : MeshGems-SurfOpt will avoid having two adjacent egdes which sizes vary more than th given gradation. a size correction is applied to the size map : if two adjacent edges are respectively e1 and e2 long and e2 > Pxe1, then, the new size for the second edge will be set to P x e1.
-**This procedure is desactived if P=-1***
+**This procedure is desactived if P=-1**
- - **Split edge**
+- **Split edge**
If this option is activated, MeshGems-SurfOpt creates new vertices placed on the curved surface and adds them to elements.
It may be used to obtain higher order elements.
- **Memory Size**
-You usually don't have to set this parameter but you can choose to limit the amount of memory used by MeshGems-SurfOpt. - It requires 370 bytes per node -. Or, if you try to enrich a already big mesh (up to 2 millions nodes), you exceptionally, need to allocate more memory.
+You usually don't have to set this parameter but you can choose to limit the amount of memory used by MeshGems-SurfOpt -- It requires 370 bytes per node. Or, if you try to enrich a already big mesh (up to 2 millions nodes), you exceptionally, need to allocate more memory.
- **File**
-You can change the file used to store remeshing hypotheses. see paragraph :ref:`hypothesis-label` for further informations.
+You can change the file used to store remeshing hypotheses, see :ref:`hypothesis-label` for further informations.
.. image:: images/Generic.png
:align: center
Simple Remeshing Options
=========================
-simple case
+Simple case
-----------
All options, but the input mesh, have default values. however, **you have to specify these
It is equivalent to SurfOpt's batch option *- - uniform_flat_subdivision yes*.
- - **Smoothing**
+ - **Sandpapering**
A surface sandpapering without shrinkage of the given surface triangulation is performed, i.e., the high curvature variations of the given surface will be smoothed out without shrinking the volume in doing so. If ridges are defined, they will be kept as they are in the resulting mesh. It could modify the geometry.
It is equivalent to SurfOpt's batch option *- - sand_paper yes*.
v1=QDoubleValidator(self)
v1.setBottom(0.)
#v1.setTop(1000.) #per thousand... only if relative
- v1.setDecimals(2)
+ v1.setDecimals(3)
self.SP_Tolerance.setValidator(v1)
self.SP_Tolerance.titleForWarning="Chordal Tolerance"
self.connect(self.LE_ParamsFile,SIGNAL("returnPressed()"),self.paramsFileNameChanged)
def PBHelpPressed(self):
+ import SalomePyQt
+ sgPyQt = SalomePyQt.SalomePyQt()
try :
mydir=os.environ["SMESH_ROOT_DIR"]
except Exception:
QMessageBox.warning(self, "Help", "Help unavailable $SMESH_ROOT_DIR not found")
return
- maDoc=mydir+"/share/doc/salome/gui/SMESH/yams/_downloads/mg-surfopt_user_manual.pdf"
- command="xdg-open "+maDoc+";"
- subprocess.call(command, shell=True)
+
+ maDoc=mydir+"/share/doc/salome/gui/SMESH/yams/index.html"
+ sgPyQt.helpContext(maDoc,"")
+
+ #maDoc=mydir+"/share/doc/salome/gui/SMESH/yams/_downloads/mg-surfopt_user_manual.pdf"
+ #command="xdg-open "+maDoc+";"
+ #subprocess.call(command, shell=True)
def PBOKPressed(self):
if not(self.PrepareLigneCommande()):
mySObject, myEntry = guihelper.getSObjectSelected()
if CORBA.is_nil(mySObject) or mySObject==None:
- QMessageBox.critical(self, "Mesh", "select an input mesh")
+ #QMessageBox.critical(self, "Mesh", "select an input mesh")
+ self.LE_MeshSmesh.setText("")
+ self.MeshIn=""
+ self.LE_MeshFile.setText("")
+ self.fichierIn=""
return
self.smeshStudyTool = SMeshStudyTools()
try:
if self.SP_MinSize.value() != 5 : self.commande+=" --min_size %f" %self.SP_MinSize.value()
if self.SP_Gradation.value() != 1.3 : self.commande+=" --gradation %f" %self.SP_MaxSize.value()
if self.SP_Memory.value() != 0 : self.commande+=" --max_memory %d" %self.SP_Memory.value()
- if self.SP_Verbosity.value() != 3 : self.commande+=" --max_memory %d" %self.SP_Verbosity.value()
+ if self.SP_Verbosity.value() != 3 : self.commande+=" --verbose %d" %self.SP_Verbosity.value()
self.commande+=" --in " + self.fichierIn
self.commande+=" --out " + self.fichierOut
self.CB_Ridge.setChecked(True)
self.CB_Point.setChecked(True)
self.CB_SplitEdge.setChecked(False)
- self.SP_MaxSize.setProperty("value", -2.0)
- self.SP_MinSize.setProperty("value", -2.0)
+ self.SP_MaxSize.setProperty("value", 100)
+ self.SP_MinSize.setProperty("value", 5)
self.SP_Verbosity.setProperty("value", 3)
self.SP_Memory.setProperty("value", 0)
+ self.PBMeshSmeshPressed()
+ self.TWOptions.setCurrentIndex(0) # Reset current active tab to the first tab
__dialog=None
def getDialog():
"""
This function returns a singleton instance of the plugin dialog.
- c est obligatoire pour faire un show sans parent...
+ It is mandatory in order to call show without a parent ...
"""
global __dialog
if __dialog is None:
__dialog = MonYamsPlugDialog()
- #else :
- # __dialog.clean()
+ else :
+ __dialog.clean()
return __dialog
#