Temporary nodes showing up in pictures

joseamirandavelez
joseamirandavelez New Altair Community Member
edited October 2020 in Community Q&A

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  

 

Answers

  • tinh
    tinh Altair Community Member
    edited October 2019

    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