[vtkusers] Efficiency problem in mesh display script ; TCL - VTK
Vincent Magnotta
vincent-magnotta at uiowa.edu
Mon Jan 25 16:04:55 EST 2010
I believe that you want to use vtkUnstructuredGrid to represent the object.
Vince
On 1/25/10 2:46 PM, "Rafal Robak" <rafalrobak at gmail.com> wrote:
> Hi,
> I'm looking for 3d engine to display a mesh from FEM softwares like ANSYS cdb
> file / Nastran bdf file. First of all i would like to display FEM model in 3D
> interactive GL window. I choose TCL and VTK and i create following code. In
> entry widget i define a quantity of nodes and elements in node and element
> file and then based on function invoked from 'Render' button model is
> displayed.
> Problem is in efficiency. Because each element is created as separate object
> (i would like to display models above 1000000 elements) VTK has big problem.
> VTK has possibility to create something like poly vtkHexahedron object ?
> in vertex is polyvertex and therefore i'm wondering about poly hex object ?
> Do you have any idea ?
> Best regards,
>
> ####### CODE #######
> package require vtk
> package require vtkinteraction
> package require vtktesting
> package require Tcl
> package require Tk
>
> global qty
>
> # Main code
> vtkRenderer model_renderer
> [model_renderer GetCullers] RemoveAllItems
>
> vtkRenderWindow model_window
> model_window AddRenderer model_renderer
>
> model_renderer SetBackground .5 .5 .5
>
> model_renderer ResetCamera
> [model_renderer GetActiveCamera] Dolly 2.5
> model_renderer ResetCameraClippingRange
>
> vtkRenderWindowInteractor iaction
> iaction SetRenderWindow model_window
>
> wm title . "CDB reader"
> label .l1 -text "OpenGL module ver 0.1 - CDB Reader"
> frame .f1
> entry .e1 -textvariable node_qty
> entry .e2 -textvariable elem_qty
> button .b1 -text "Open node" -command "open_model_node node_qty"
> button .b2 -text "Open elem" -command "open_model_elem elem_qty"
> button .b3 -text "Render" -command "render elem_qty"
> button .b4 -text "Close" -command "destroy ."
> set render_widget [vtkTkRenderWidget .f1.r -width 800 -height 600 -rw
> model_window]
> iaction Initialize
> ::vtk::bind_tk_render_widget $render_widget
>
> grid .l1 -row 1 -column 1 -columnspan 7
> grid .f1 -row 2 -column 1 -columnspan 7
> grid .e1 -row 3 -column 2
> grid .e2 -row 3 -column 3
> grid .b1 -row 3 -column 4
> grid .b2 -row 3 -column 5
> grid .b3 -row 3 -column 6
> grid .b4 -row 3 -column 7
> grid .f1.r -row 1 -column 1
>
> .b3 configure -state disabled
>
> #$render_widget Render
>
> proc generate {qty} {
> upvar 1 $qty qty_loc
> set fw [open node_file.txt w]
> for {set i 1} {$i <= $qty_loc} {incr i} {
> puts $fw "$i [expr rand()] [expr rand()] [expr rand()]"
> }
> close $fw
> }
>
>
> proc open_model_node {node_qty} {
> global ndata
> upvar 1 $node_qty node_qty_loc
>
> set file_select [tk_getOpenFile -initialdir [pwd]]
> set fr_node [open $file_select r]
>
> for {set i 1} {$i <= $node_qty_loc} {incr i} {
> set line [gets $fr_node]
> lappend ndata([lindex $line 0]) [lindex $line 1]
> lappend ndata([lindex $line 0]) [lindex $line 2]
> lappend ndata([lindex $line 0]) [lindex $line 3]
> }
> close $fr_node
> }
>
> proc open_model_elem {elem_qty} {
> global edata
> upvar 1 $elem_qty elem_qty_loc
>
> set file_select [tk_getOpenFile -initialdir [pwd]]
> set fr_elem [open $file_select r]
>
> for {set i 1} {$i <= $elem_qty_loc} {incr i} {
> set line [gets $fr_elem]
> lappend edata($i) [lindex $line 13]
> lappend edata($i) [lindex $line 0]
> lappend edata($i) [lindex $line 1]
> lappend edata($i) [lindex $line 2]
> lappend edata($i) [lindex $line 3]
> lappend edata($i) [lindex $line 4]
> lappend edata($i) [lindex $line 5]
> lappend edata($i) [lindex $line 6]
> lappend edata($i) [lindex $line 7]
> }
>
>
> .b3 configure -state normal
> }
>
> proc clear {} {
> model_renderer Clear
> model_window Clear
> }
>
> proc element {eid n1 n2 n3 n4 n5 n6 n7 n8} {
> global ndata
>
> vtkPoints hexahedronPoints_$eid
> hexahedronPoints_$eid SetNumberOfPoints 8
> hexahedronPoints_$eid InsertPoint 0 [lindex $ndata($n1) 0] [lindex
> $ndata($n1) 1] [lindex $ndata($n1) 2]
> hexahedronPoints_$eid InsertPoint 1 [lindex $ndata($n2) 0] [lindex
> $ndata($n2) 1] [lindex $ndata($n2) 2]
> hexahedronPoints_$eid InsertPoint 2 [lindex $ndata($n3) 0] [lindex
> $ndata($n3) 1] [lindex $ndata($n3) 2]
> hexahedronPoints_$eid InsertPoint 3 [lindex $ndata($n4) 0] [lindex
> $ndata($n4) 1] [lindex $ndata($n4) 2]
> hexahedronPoints_$eid InsertPoint 4 [lindex $ndata($n5) 0] [lindex
> $ndata($n5) 1] [lindex $ndata($n5) 2]
> hexahedronPoints_$eid InsertPoint 5 [lindex $ndata($n6) 0] [lindex
> $ndata($n6) 1] [lindex $ndata($n6) 2]
> hexahedronPoints_$eid InsertPoint 6 [lindex $ndata($n7) 0] [lindex
> $ndata($n7) 1] [lindex $ndata($n7) 2]
> hexahedronPoints_$eid InsertPoint 7 [lindex $ndata($n8) 0] [lindex
> $ndata($n8) 1] [lindex $ndata($n8) 2]
> vtkHexahedron aHexahedron_$eid
> [aHexahedron_$eid GetPointIds] SetId 0 0
> [aHexahedron_$eid GetPointIds] SetId 1 1
> [aHexahedron_$eid GetPointIds] SetId 2 2
> [aHexahedron_$eid GetPointIds] SetId 3 3
> [aHexahedron_$eid GetPointIds] SetId 4 4
> [aHexahedron_$eid GetPointIds] SetId 5 5
> [aHexahedron_$eid GetPointIds] SetId 6 6
> [aHexahedron_$eid GetPointIds] SetId 7 7
> vtkUnstructuredGrid aHexahedronGrid_$eid
> aHexahedronGrid_$eid Allocate 1 1
> aHexahedronGrid_$eid InsertNextCell [aHexahedron_$eid GetCellType]
> [aHexahedron_$eid GetPointIds]
> aHexahedronGrid_$eid SetPoints hexahedronPoints_$eid
> vtkDataSetMapper aHexahedronMapper_$eid
> aHexahedronMapper_$eid SetInput aHexahedronGrid_$eid
> vtkActor aHexahedronActor_$eid
> aHexahedronActor_$eid SetMapper aHexahedronMapper_$eid
> [aHexahedronActor_$eid GetProperty] SetColor 0.5 1 1
>
> model_renderer AddActor aHexahedronActor_$eid
> }
>
> proc render {elem_qty} {
> global ndata
> global edata
> upvar 1 $elem_qty elem_qty_loc
>
> for {set i 1} {$i <= $elem_qty_loc} {incr i} {
> element [lindex $edata($i) 0] [lindex $edata($i) 1] [lindex $edata($i) 2]
> [lindex $edata($i) 3] [lindex $edata($i) 4] [lindex $edata($i) 5] [lindex
> $edata($i) 6] [lindex $edata($i) 7] [lindex $edata($i) 8]
> }
>
> model_renderer ResetCamera
> }
>
> ####### CODE #######
----------------------
Associate Professor
Department of Radiology
0453-D JCP
200 Hawkins Drive
Iowa City, IA 52242
E-mail: vincent-magnotta at uiowa.edu
Phone: 319-356-8255 Fax: 319-353-6275
Website: http://www.radiology.uiowa.edu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100125/7fd120b7/attachment.htm>
More information about the vtkusers
mailing list