Jump to content
joseamirandavelez

Temporary nodes showing up in pictures

Recommended Posts

Hi,

 

I am making a big macro that basically hides and shows different FE models and geometries, re-orients the view, and take pictures. Since my models are cylindrical, I am taking square images by moving the model to the left side of the graphic window and saving only half of the window using hm_windowtofile. In order to move the model to the left I create some grids at certain distances from the model so that when I fit the view the model is put on the left, then I delete the temporary nodes. That's the only work around I found. My problem is that even after deleting the temporary nodes they appear in the photos. I even tried adding *nodecleartempmark to the beginning of my takePhoto procedure, but they still show. Sometimes I get stiff that is masked in the photo... If I run the macro line by line it works perfectly. It only happens when I run the macro from the script toolbar or menu. So I guess this must have to be some sort of screen update command I am missing. I tried to find any commands to update the screen in the API documentation but had no luck. Any ideas?

Here is a shorter version of my macro:

package require Img

catch {namespace delete ::miranda }

namespace eval ::miranda {
}

proc ::miranda::main {} {
    #photos are going to be stored here. Folder is created if it does not exist.
    set ::miranda::path "D:/model_images"
    catch {file mkdir $::miranda::path}
    catch {file attributes $::miranda::path -system}
    
    proc ::miranda::frontView {} {
        #get bound box for whole model
        *createmark elems 1 displayed
        set string [hm_getboundingbox elems 1 0 0 0]
        set xmin [lindex $string 0]
        set xmax [lindex $string 3]
        set ymin [lindex $string 1]
        set ymax [lindex $string 4]
        set zmin [lindex $string 2]
        set zmax [lindex $string 5]
        set width [hm_winfo graphicwidth]
        set height [hm_winfo graphicheight]
        set ratio [expr $width*1.0/$height]
        set height [expr $xmax-$xmin]
        set width [expr $height*$ratio]
        set emptySpace [expr ($width - ($ymax-$ymin))/4]
        *nodecleartempmark
        *view bottom
        *rotationangleset 90
        hm_viewccw
        *createnode 0 [expr $width] 0 0
        *createnode 0 [expr $ymin-$emptySpace/2] 0 0
        *window 0 0 0 0 0
        *nodecleartempmark
    }
    
    proc ::miranda::rearView {} {
        #get bound box for whole model
        *createmark elems 1 displayed
        set string [hm_getboundingbox elems 1 0 0 0]
        set xmin [lindex $string 0]
        set xmax [lindex $string 3]
        set ymin [lindex $string 1]
        set ymax [lindex $string 4]
        set zmin [lindex $string 2]
        set zmax [lindex $string 5]
        set width [hm_winfo graphicwidth]
        set height [hm_winfo graphicheight]
        set ratio [expr $width*1.0/$height]
        set height [expr $xmax-$xmin]
        set width [expr $height*$ratio]
        set emptySpace [expr ($width - ($ymax-$ymin))/4]
        *nodecleartempmark
        *view top
        *rotationangleset 90
        hm_viewccw
        *createnode 0 [expr -1*$width] 0 0
        *createnode 0 [expr $ymax+$emptySpace/2] 0 0
        *window 0 0 0 0 0
        *nodecleartempmark
    }

    proc ::miranda::takePhoto {filename} {
        *nodecleartempmark
        #Set graphics to color photos and white background
        *graphicsfilecolor 1
        *graphicsfileblankbackground 1

        #Take a photo
        catch {file delete -force $filename}
        hm_windowtofile [hm_winfo graphicx] [hm_winfo graphicy] [expr max([hm_winfo graphicwidth]/2-1,[hm_winfo graphicheight]-1)] [hm_winfo graphicheight] $filename
    }

    proc ::miranda::toggle {object subObject status} {
        switch $subObject {
            bdf {set e 1; set s 0;}
            solid {set e 0; set s 1;}
            both {set e 1; set s 1;}
        }
        foreach o $object {
            if { $status == on } {
                *createmark assem 1 $o
                *displaycollectorsallbymark 1 on $e $s
                *createmark assem 1 $o
                *displaycollectorsallbymark 1 off [expr ! $e] [expr ! $s]
            } elseif { $status == off } {
                *createmark assem 1 $o
                *displaycollectorsallbymark 1 off $e $s
            }
        }
        *unmaskall elements
    }
}

#set up procedures
::miranda::main

#temporary file variables. Will be replaced by GUI.
set xsectUG "path_to_File"
set oldUG "path_to_File"
set newUG "path_to_File"
set oldBDF "path_to_File"
set newBDF "path_to_File"

# Old Geometry Plots
::miranda::toggle {oldModel newModel} both off
::miranda::toggle oldModel both on
::miranda::frontView
::miranda::toggle oldModel bdf off
::miranda::takePhoto "$::miranda::path/old_model_solid_front.jpg"
::miranda::toggle oldModel both on
::miranda::rearView
::miranda::toggle oldModel bdf off
::miranda::takePhoto "$::miranda::path/old_model_solid_rear.jpg"

# New Geometry Plots
::miranda::toggle {oldModel newModel} both off
::miranda::toggle newModel both on
::miranda::frontView
::miranda::toggle newModel bdf off
::miranda::takePhoto "$::miranda::path/new_model_solid_front.jpg"
::miranda::toggle newModel both on
::miranda::rearView
::miranda::toggle newModel bdf off
::miranda::takePhoto "$::miranda::path/new_model_solid_rear.jpg"

##cleanup
#::miranda::toggle newModel bdf on
#::miranda::plotNormals 0
#::miranda::thicknessVisibility 0
#::miranda::elementColor components
#::miranda::isoView front

 

Share this post


Link to post
Share on other sites

Hi,

*nodecleartempmark just delete temp nodes but not wait for graphic to redraw.

Please try using command hm_redraw before taking photo by hm_windowtofile

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...