From 69e7a358b872c72857cfb8aa56d9c0bda27fc945 Mon Sep 17 00:00:00 2001 From: dmv Date: Wed, 12 May 2010 05:49:38 +0000 Subject: [PATCH] 0020868: EDF 1251 SMESH: Pattern 3D mapping Add documentation and sample scripts for 3D pattern mapping --- doc/salome/gui/SMESH/images/image94.gif | Bin 5678 -> 0 bytes doc/salome/gui/SMESH/images/pattern2d.png | Bin 0 -> 578 bytes .../gui/SMESH/input/pattern_mapping.doc | 210 +++++++++++------- .../gui/SMESH/input/tui_modifying_meshes.doc | 90 +++++++- 4 files changed, 219 insertions(+), 81 deletions(-) delete mode 100755 doc/salome/gui/SMESH/images/image94.gif create mode 100644 doc/salome/gui/SMESH/images/pattern2d.png diff --git a/doc/salome/gui/SMESH/images/image94.gif b/doc/salome/gui/SMESH/images/image94.gif deleted file mode 100755 index 7313f5deb3336d5476d340d3b3c36047754adfbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5678 zcmeH~=Q|q=!^L&!KzrBTU1lX(ds9_2=s=C2RjrxO+a_r3t@cQaqE=#LATn!{-*}(%;aunI`CZrfa14zNR8^dO&eG59v;0T%^Yct5^Z(+1?Y{*6e-Qxu zr|y5Yz;cPna^XC`5&C0m)FrOF_B3=!d)z;FObU!JrJYIq3LdjGOj-Abn|g`D2T$Jj zWJ+1U#d@&ieYy9Ydkc(l6$1!W4diUXubV8Zc?Pr;YB+!1~ie_`QEe$WdSeQ31lQVJ{K-g+6ky_xjYEh511WDKLp( z<;X0Sk^AdA-}50U2ddKGIraf{PG3aG`}_W{{HS@*d;|SE3#-)P`wKC-oTi!nIgX)! zoG#}1c5Upx4CS0(6LLCokP?Xy4p?^zWc{N!>aecl_9{V2_VtT*JnC*sKES#vC%*%S zwO0W*R;!j%U1EYpgU|;tc2*%LF4LZmMlU{3HUnm+QtnVgg_d`pR;W?OuC?e zpQgOFcJPq_Y~Pw!My0(7>lL6?!e-N!SKKyL<~w;-4zxtst#uJI0RIAg|4f?!ZMN(J z*S*bV&eZ%UJ4?@7dfRb=7jr%F2zV2DxnfeRs}i{VZv|EzbRX5CM!)%bt@_fxy*|3z zUxGQ`0dRy{%Uf@wcb41=2d@+3yx#zQ1a|u$F$BEz+X<%fLm-PP#bIgX!nY%q^rJNO1` zU)rCAXlr8NQaoRH(3j+8O3-o|-$~F)7ECkvYu*?vc(nk}Sf>`ooz|B~CwURqlybul zH&-&e6t>W?Beiu5y=Vs$#;AkUx2{r;zBgrPtN!RXA_o7Y;X^`y^}i4b+8q{RhW;ME zs1vp~CG#%q&#cCG=l#VpqNbtAHxTUA+KV?&50@%6s0L1Ys#qsvV9M{UowB2FLrEP6 z@QEH_;rJJwxN~dU@wAMC1@>I@`1)J>qo`sWrz+xtd6jk)X7L=Jr#0#pTAfNtVAYXt zpg8Oo>zAe92qV*cm@;s3yw|64ZC;!lyh9 zS-8VS&x_UOcT7w27F*`N{##f5wo6LD>zATQR$Z(aiIItCR&KR6;B;j@KSXYn-PY$f zN{=2+ueke3K-|_?Er3%jx8u|PLq*JkDPCti7@eL9E$yo{Iy2VW$X_?CIs&PNp0XQFf)U$ z2vR2W40xSI!UcL(&$Lg|60*h$!X8#$Y_!e!w->1Q1CXtGuas#H|80?ca6GPUK{J2M z`#VPIiqv9k^@IDpBP9(c3@kvilZN?82kHe;Vw>noXmM6#3u0W zfm|WdmN636L{EbS&3v z;Devbh`P<^X4n*zxXSNoBT;Mfp1oR-m6V;JHXo6^SLujxX}36=m6T7BC1YhAGcxdG zNv(S!R>=81gAv@f6p_&7KH|aXzMoW>`z!#p&>N0VVNkw9AB7mO4)E5M@YH$o0T!p4 z=P+y_331#c-MUL+=_{;^YN$$HAB@9&3ZMG;iPfz?0I(n>U zRsj6B(;)PI%A3$doW$SuJ}cQ&wsPnEj4qPkH(68g)*#C@0l7b6J}aewuU$_Gy$K}w z93JZxph{DpV=N%AU2|G4cMWS~?(+^Y?v$Tl%S;gX24!-yo3DSwbeF9BK)7N@)y~-t zvhw~)gpt><9ja~72KP%Zg!Q=a&fFJ|nYr@Vl*+xEH?m)lR&-;4^DJF;go~cBXFWZ*`!X|(#-Anc`(FE}6Pf~;~9S<%lVjsMWb z8(lSXdV&g=OPR-zIp!dH)j?yO1Dl`oO=mT}F>+2=<)|E+UIAN2i_Sm)d>GIg(&$F? z{9_nIbdUE`-rc87Og27NkmYsDJO)cJbqMS#bw2CmaIh727Ykcxc#|$-09)o12AQ7ugg!d zjJkJLd=BXt_;+eK(m&88#P#((7z>d))_g=-3fM=_^7#f}Vo$be9Gm^`QTL7av|ilA z@72adPiqPheiUkJuJASO_Us~m<$UH@Rd|6K@IAFEVv_&7l?@pzgj${{mSW@|_Tv+5 zM#>jx8%iJ;ABqwF_t<$G^h@LCg{PxObEb4m<{X6uj`{jz{u1wnN7f9HF z)g`|XK2As->$^y9dzZcYSF;peiQBQzo^Nz}GU)(WTnI;Hpwv05zhdFyW$tG#MMy`6 zkJDkOHqpLrL0?>0f47|PvVr7Oi1V_Ttc|wbNRZDt@$R)7ftkT2-6Go<*qlUggpZy< zcNF1E)I%FtHJj)>pJ*dDX_MyYjL~Rw8W5DF$EXOY=Zh&E1@arcS8s^2kplc26%5D< zZQPHkQ`9F&DtR|TT~tk2OW(e=w%#)gf>ud=DHRdVf^pcy`Ig4ev*NUHaiRQ@c2lNS zRgu=J@z0Dx5^a>8FsI^Q>PM&L0Y0cEgg#5isglggOE9>TP;e>sX0wb>d|ZZsr?q&z zRU4mmUi@HFc=5POl}&5|Pte;u|B^qi>w=!N#L0C8LObFjIltZz@Dm`ghTXiF>?4)T zYWS`#LR?Kxj(1sEAuo)cog_Iazbp~a78e+v8#lGDq!J&&rf7&<57D_}oE!0;;pWd`i7s9eZ&avTKy$XAt{9IsKq2P1xqvvg$jgO?sV#4!?lXw_Fhn z4K!)=`0+zA#k|O2rd!nB(^N0#&>@w`fxyuCpyVUDtZug`t0mC~0^R`=e1hMC+_6N_#oGVY#~?O2X5Zb{O8`b z#_s%?z8jDHd(3as5`*326cir@9^}@2i3_dvkCxVsaLAH69BI9>F(A+(}=Vj1l=h8oKb-yF1K4PgT1<7sh$+<#ZH{D zLNGVGe&UnIr!bj=abxWKb}8Cc)233A`=c13UF#A+=n?W?#2A@k}uOGpRq+Z zJ-BYGmnuFjmAK0#1uwPdD+VMw-8d|Lb%1EK_0vrFDBpWMR_!@hirYP}OiiM2_OhAI zl}~3M76YnG^fz)1dc7Zd=+s{>H$%d`rAm6-VRzNa8!%;K2QUs~IZ3}v&(=>nq3or4 z^ta#&%de##A$E|Nig`@wTjX^g^-BJyl>v!Jp&*f!%^v>{iKz1tpDOQ)Q)fIsBK>&PYYqt2xgKFO!GF{4 zmKV&_L?dg$t!qbTiW=_bm4wtz8Q0nhrq8O^HmLi(S5I6@tPKyTn-4~967#)h>f}aH z?S~S-?dt!8)c=Lo9}?@2Xa4uj)Uybo&uXC0gVC%o^d$uP3JJ~5KwmvV|09Iq)WC3q zF}yGgKLR62!U!`kqDPpULfG3HSTQhG0)~}BVDFN!00vg}2zy@$C$E811ml#MFq|p^ zr%u9YGH}{QxCcTF4>cMd$>3O?G#DWoOp-8$q=s7{ZgZi=XBv&?*cvVSFwbF)cBDr8 zK7K<+g98}zLa6CAxCzYG z5&m>jFcRDx%Z81BHJ`wn6B*5^edy$)=6yjz2AGhe(VUAQz)6Gx2BGMP@KK0ZszLk& zCRV_RRR|)IM07wjR%{V#gh(l%=1(9J7DkHkB$c8_%?wh&mLPhI&;lY*!DLqrG7UlQ zC6W6XJ8{LFC6E$|QsGhK(%CL{Z}VDDz-yEn8EoC-w^i^Bh54 zJ)&B$;kQVbT@>aQ+vmTiM!zlUV+6Jp{P{qrMO~x10O+_4`TX>_<9RYx zaJJ(wvNMy^X?@%&N$#}o?=U@Tb!P8!BiD zTx4`)Zg-}!^%mLpszADP3wkRdy*0@MR-xY41!#1CcddQjVQ*J6ppOXYBhPkXHM?52 zyWq2Z&yTz9L;EdE`+H6Md_cWcBw9PUUthD|*nS`%Ffb+Dntx0?qtRDdFtE5yOGu_g z2@N2G2iE~CtJ`ggvx6}OgX`o$z2t5`z|b1|&@^O7kG&h;-~N|<@KAH;z@zI-*btN4 ze}OVYh16e$4qr6u=NK4d9~iz~J9rH^z_T;lKidTg9r*{?u5~OipWG`t*CzlR6fPW< zw;#QsMHQNBkxUr{K>OsFg`A?AZFj(93Ijy-9a{R)m{#qu#$2y1a7-h;`A%WK9<*0~ zXYBp)_(k&gqn*!3C{ANw&$EGEv#@dHxru4Sgy{g*Hi-%zn0UF<^M+$0l&#q{W%3?~ z`f6^nP?O^4Ko1C`2NlwNpgr!j1Kt#R_AH%47#GPgl>?q~Iibgz(c+;K(Uhs=ld1cR zskGYWEa*7IVLBvq`k@FFPMOZAohmNuDySV1(VY3$euh_Ty2@;(WM{gTqYJ6UzyKNb zh0~1={df^Np_Wl|!l3MQG;qweY7LOWW;&rA?ZBCy+V(yU#=y>O_sPTvaIPbTF#&BG zN|~D;Xk{=57;_G73n{ZpJ9A?@pT7d<*HSt+p!0N&`5j8jvf12E;KG*3#2$3vyV?AK zNXu@@{0XonS%ycAGJjrlk&-l?H#ai8GgX+fsChE#OI}FeSh}7%b^=b1ltDyn<3 zuw64F?1fVSVsBCx@0=1vMZ5ZU=+db~9S5xB>Eb;{;<>A>f~ifn9hcRv(q(FwHp$$Y zMMMSJWj!y7{@@qGZzN;KMUW%e%Px#2~bQ_MF0Q*-rnB-|NmR3y&nJo010qNS#tmY3ljhU3ljkVnw%H_000McNliru z+64;_2s&jMi5~y}0l!H^K~z}7?bu6h#2^d+(5Op}!YM~yRh+`|3USJ|X=jGu502-v zsK{zm@fu>lSl(LTxok^4qVio;H>#b&kot5h3e7O4${W>|A}Y3CLG}Mn3OGkYuj-b4 z`~5oZ0fqZEnLoF2f6Du$*$ip^T`8a%pi99a^4}w}M`aomI25)~RfkGUwKP?=afMR_ zf@1L?;plS(6NODub)t%>#(0o$D+r2Abr{mAnk|(Swa;8rwP^|s1*$qO8L>RAC{PtP zT~$>jLmifkSS&P!iUL#h@gNopRe`9m*{X`FOjH*SI&NH3`F@Rx|6l3-qvGEneJfKe zUQ%3{VrwIm?wW6wB7bt44E%X{hQ)t#Zn)<1k@_7Yh z)N!h+R0675_35wj7QP?TcUga1YN@4`T574Mt4sE&OYT)JKDCd#&(Nvb8x`hr{SE0| zwM7(#RB4gOv!.smp file. The smp file contains 4 sections: -
    -
  1. The first line holds the number of nodes (N).
  2. -
  3. The next N lines describe nodes coordinates. Each line holds 2 -coordinates of a node.
  4. - -
  5. A key-points line: indices of nodes to be mapped on geometrical -vertices. An index n refers to a node described on an n-th line of -section 2. The first node index is zero.
  6. - -
  7. The rest lines describe nodal connectivity of elements, one line +-# The first line holds the total number of the pattern nodes (N). +-# The next N lines describe nodes coordinates. Each line holds 2 +coordinates of a node for 2D pattern or 3 cordinates for 3D pattern. +Note, that for 3D pattern only relateive values in range [0;1] are +valid for coordinates of the nodes. +-# A key-points line: indices of nodes to be mapped on geometrical +vertices (for 2D pattern only). An index n refers to a node described +on an n-th line of section 2. The first node index is zero. For 3D +pattern key points are not specified. +-# The rest lines describe nodal connectivity of elements, one line for an element. A line holds indices of nodes forming an element. An index n refers to a node described on an n-th line of the section 2. The first node index is zero. There must be 3 or 4 indices on a -line: only 2d elements are allowed.
  8. -
+line for 2D pattern (only 2d elements are allowed) and 4, 5, 6 or 8 +indices for 3D pattern (only 3d elements are allowed). The 2D pattern must contain at least one element and at least one key-point. All key-points must lay on boundaries. -An example of a simple smp file and a preview of a pattern described -in this file: - -\image html image94.gif +The 3D pattern must contain at least one element. + +An example of a simple 2D pattern smp file: + +\code +!!! SALOME 2D mesh pattern file +!!! +!!! Nb of points: +9 + 200 0 !- 0 + 100 0 !- 1 + 0 0 !- 2 + 0 -100 !- 3 + 0 -200 !- 4 + 100 -200 !- 5 + 200 -200 !- 6 + 200 -100 !- 7 + 100 -100 !- 8 +!!! Indices of 4 key-points + 2 0 4 6 +!!! Indices of points of 6 elements + 0 1 8 + 8 5 6 7 + 2 3 8 + 8 3 4 5 + 8 7 0 + 8 1 2 +\endcode + +The image below provides a preview of above described pattern: + +\image html pattern2d.png + +An example of a simple 3D pattern smp file: + +\code +!!! SALOME 3D mesh pattern file +!!! +!!! Nb of points: +9 + 0 0 0 !- 0 + 1 0 0 !- 1 + 0 1 0 !- 2 + 1 1 0 !- 3 + 0 0 1 !- 4 + 1 0 1 !- 5 + 0 1 1 !- 6 + 1 1 1 !- 7 + 0.5 0.5 0.5 !- 8 +!!! Indices of points of 6 elements: + 0 1 5 4 8 + 7 5 1 3 8 + 3 2 6 7 8 + 2 0 4 6 8 + 0 2 3 1 8 + 4 5 7 6 8 +\endcode

Application of pattern mapping

@@ -50,86 +103,89 @@ The following dialog box shall appear: \image html patternmapping1.png +
2D Pattern Mapping dialog box
+ \image html patternmapping2.png +
3D Pattern Mapping dialog box
+ To apply a pattern to a geometrical object, you should specify: -
    -
  • a face having the number of vertices equal to the number of -key-points in the pattern; the number of key-points on internal -boundaries of a pattern must also be equal to the number of vertices -on internal boundaries of a face;
  • -
  • a vertex to which the first key-point should be mapped;
  • -
  • reverse or not the order of key-points. (The order of vertices of -a face is counterclockwise looking from outside).
  • -
+ +-# For 2D pattern + - A face having the number of vertices equal to the number of + key-points in the pattern; the number of key-points on internal + boundaries of a pattern must also be equal to the number of vertices + on internal boundaries of a face; + - A vertex to which the first key-point should be mapped; + - Reverse or not the order of key-points. (The order of vertices of + a face is counterclockwise looking from outside). +-# For 3D pattern + - 3D block (Solid) object; + - Two vertices that specify the order of nodes in the resulting + mesh. Then you either load a .smp pattern file previously created manually by clicking on the "Load pattern" button, or click on the \b -New button for automatic generation. -\n For an automatic generation you just specify a geometrical face -having a mesh built on it. Mesh nodes lying on face vertices become -key-points. Additionally, you may choose the way of getting nodes -coordinates by projecting nodes on the face instead of using +New button for automatic generation of the pattern. + +For an automatic generation you just specify a geometrical face (for +2D) or solid (for 3d) having a mesh built on it. Mesh nodes lying on +face vertices become key-points of 2D pattern. Additionally, for 2D +pattern you may choose the way of getting nodes coordinates by +projecting nodes on the face instead of using "positions on face" generated by mesher (if there is any). Faces having a seam edge can't be used for automatic pattern creation. When creating a pattern from an existing mesh, there are two possible cases: -
    -
  1. A sub-mesh on face is selected. A pattern is created from the 2d -elements bound to a face by mesher. Node coordinates are either + +- A sub-mesh on face/solid is selected. A pattern is created from the 2d/3d +elements bound to a face/solid by mesher. For 2D pattern, node coordinates are either "positions on face" computed by mesher, or coordinates got by node -projection on a geometrical surface, according to your choice.
  2. -
  3. A mesh where the main shape is a face, is selected. A pattern is -created from all the 2d elements in a mesh. If all mesh elements are -build by mesher, the user can select the way of getting nodes -coordinates, else all nodes are projected on a face surface.
  4. -
+projection on a geometrical surface, according to the user choice. For +3D pattern, nodes coordinates correspond to the nodes computed by mesher. +- A mesh where the main shape is a face/solid, is selected. A pattern is +created from all the 2d/3d elements in a mesh. In addition, for 2D +pattern, if all mesh elements are build by mesher, the user can select +the way of getting nodes coordinates, else all nodes are projected on +a face surface. \image html a-patterntype.png +
2D Pattern Creation dialog box
+ \image html a-patterntype1.png +
3D Pattern Creation dialog box
+

Mapping algorithm

-The mapping algorithm is as follows: -
    -
  1. Key-points are set in the order that they are encountered when -walking along a pattern boundary so that elements are on the left. The -first key-point is preserved. -
  2. - -
  3. Find geometrical vertices corresponding to key-points by vertices -order in a face boundary; here, "Reverse order of key-points" flag is -taken into account. - -\image html image95.gif -
  4. - -
  5. Boundary nodes of a pattern are mapped onto edges of a face: a -node located between certain key-points on a pattern boundary is -mapped on a geometrical edge limited by corresponding geometrical -vertices. Node position on an edge reflects its distance from two -key-points. - -\image html image96.gif -
  6. - -
  7. Coordinates of a non-boundary node in a parametric space of a face -are defined as following. In a parametric space of a pattern, a node -lays at the intersection of two iso-lines, each of which intersects a -pattern boundary at least at two points. Knowing mapped positions of -boundary nodes, we find where isoline-boundary intersection points are -mapped to, and hence we can find mapped isolines direction and then, -two node positions on two mapped isolines. The eventual mapped -position of a node is found as an average of positions on mapped -isolines. - -\image html image97.gif -
  8. -
- -
See Also a sample TUI Script of a +The mapping algorithm for 2D case is as follows: + +- Key-points are set in the order that they are encountered when + walking along a pattern boundary so that elements are on the left. The + first key-point is preserved. +- Find geometrical vertices corresponding to key-points by vertices + order in a face boundary; here, "Reverse order of key-points" flag is + taken into account. \image html image95.gif +- Boundary nodes of a pattern are mapped onto edges of a face: a + node located between certain key-points on a pattern boundary is + mapped on a geometrical edge limited by corresponding geometrical + vertices. Node position on an edge reflects its distance from two + key-points. \image html image96.gif +- Coordinates of a non-boundary node in a parametric space of a face + are defined as following. In a parametric space of a pattern, a node + lays at the intersection of two iso-lines, each of which intersects a + pattern boundary at least at two points. Knowing mapped positions of + boundary nodes, we find where isoline-boundary intersection points are + mapped to, and hence we can find mapped isolines direction and then, + two node positions on two mapped isolines. The eventual mapped + position of a node is found as an average of positions on mapped + isolines. \image html image97.gif + +For 3D case the algorithm is similar. + +See Also a sample TUI Script of a \ref tui_pattern_mapping "Pattern Mapping" operation. */ diff --git a/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc b/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc index 66b6361fa..b0eaca1fb 100644 --- a/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc +++ b/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc @@ -768,7 +768,6 @@ mesh.RotationSweepObject(GroupRotate, axisXYZ, angle45, 4, 1e-5) \code import geompy - import smesh # define the geometry @@ -802,17 +801,100 @@ algo2D.MaxElementArea(240) isDone = Mesh_2.Compute() if not isDone: print 'Mesh Mesh_2 : computation failed' -# create a pattern +# create a 2d pattern pattern = smesh.GetPattern() isDone = pattern.LoadFromFace(Mesh_2.GetMesh(), Face_2, 0) if (isDone != 1): print 'LoadFromFace :', pattern.GetErrorCode() # apply the pattern to a face of the first mesh -pattern.ApplyToMeshFaces(Mesh_1.GetMesh(), [17], 0, 0) - +facesToSplit = Mesh_1.GetElementsByType(smesh.SMESH.FACE) +print "Splitting %d rectangular face(s) to %d triangles..."%(len(facesToSplit), 2*len(facesToSplit)) +pattern.ApplyToMeshFaces(Mesh_1.GetMesh(), facesToSplit, 0, 0) isDone = pattern.MakeMesh(Mesh_1.GetMesh(), 0, 0) if (isDone != 1): print 'MakeMesh :', pattern.GetErrorCode() + +# create quadrangle mesh +Mesh_3 = smesh.Mesh(Box_1) +Mesh_3.Segment().NumberOfSegments(1) +Mesh_3.Quadrangle() +Mesh_3.Hexahedron() +isDone = Mesh_3.Compute() +if not isDone: print 'Mesh Mesh_3 : computation failed' + +# create a 3d pattern (hexahedrons) +pattern_hexa = smesh.GetPattern() + +smp_hexa = """!!! Nb of points: +15 + 0 0 0 !- 0 + 1 0 0 !- 1 + 0 1 0 !- 2 + 1 1 0 !- 3 + 0 0 1 !- 4 + 1 0 1 !- 5 + 0 1 1 !- 6 + 1 1 1 !- 7 + 0.5 0 0.5 !- 8 + 0.5 0 1 !- 9 + 0.5 0.5 0.5 !- 10 + 0.5 0.5 1 !- 11 + 1 0 0.5 !- 12 + 1 0.5 0.5 !- 13 + 1 0.5 1 !- 14 + !!! Indices of points of 4 elements: + 8 12 5 9 10 13 14 11 + 0 8 9 4 2 10 11 6 + 2 10 11 6 3 13 14 7 + 0 1 12 8 2 3 13 10""" + +pattern_hexa.LoadFromFile(smp_hexa) + +# apply the pattern to a mesh +volsToSplit = Mesh_3.GetElementsByType(smesh.SMESH.VOLUME) +print "Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 4*len(volsToSplit)) +pattern_hexa.ApplyToHexahedrons(Mesh_3.GetMesh(), volsToSplit,0,3) +isDone = pattern_hexa.MakeMesh(Mesh_3.GetMesh(), True, True) +if (isDone != 1): print 'MakeMesh :', pattern_hexa.GetErrorCode() + +# create one more quadrangle mesh +Mesh_4 = smesh.Mesh(Box_1) +Mesh_4.Segment().NumberOfSegments(1) +Mesh_4.Quadrangle() +Mesh_4.Hexahedron() +isDone = Mesh_4.Compute() +if not isDone: print 'Mesh Mesh_4 : computation failed' + +# create another 3d pattern (pyramids) +pattern_pyra = smesh.GetPattern() + +smp_pyra = """!!! Nb of points: +9 + 0 0 0 !- 0 + 1 0 0 !- 1 + 0 1 0 !- 2 + 1 1 0 !- 3 + 0 0 1 !- 4 + 1 0 1 !- 5 + 0 1 1 !- 6 + 1 1 1 !- 7 + 0.5 0.5 0.5 !- 8 + !!! Indices of points of 6 elements: + 0 1 5 4 8 + 7 5 1 3 8 + 3 2 6 7 8 + 2 0 4 6 8 + 0 2 3 1 8 + 4 5 7 6 8""" + +pattern_pyra.LoadFromFile(smp_pyra) + +# apply the pattern to a face mesh +volsToSplit = Mesh_4.GetElementsByType(smesh.SMESH.VOLUME) +print "Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 6*len(volsToSplit)) +pattern_pyra.ApplyToHexahedrons(Mesh_4.GetMesh(), volsToSplit,1,0) +isDone = pattern_pyra.MakeMesh(Mesh_4.GetMesh(), True, True) +if (isDone != 1): print 'MakeMesh :', pattern_pyra.GetErrorCode() \endcode
-- 2.39.2