Home » Helpful Articles » UG programming uses workshop document to output the solution of tool list information

UG programming uses workshop document to output the solution of tool list information

Posted by: Fymicohuang 2021-09-27 Comments Off on UG programming uses workshop document to output the solution of tool list information

Use the (shopdoc_tool_list_text.TCL) file in the (X:\Program Files\Siemens\NX1926\MACH\resource\shop_doc) directory to output the tool list.

.The output effect has not been changed!

Make some simple changes to make the tool list more beautiful (maybe I have some misunderstandings about aesthetics!!!)

Upload the changed (shopdoc_tool_list_text.TCL) file by the way, and replace it with “back up the original file”.

Attachment download: shopdoc_tool_list_text.tcl

Code:

 

###############################################################################
#
#           S H O P D O C _  T O O L _ L I S T _ T E X T . T C L
#
###############################################################################
#                                                                             #
# Copyright(c) 1999/2000/2001/2002/2003/2004/2005/2006  UGS PLM Solutions     #
# Copyright(c) 2007 ~ 2018,                             SIEMENS PLM Software  #
#                                                                             #
###############################################################################
#
# DESCRIPTION:
#
#   This Tcl script produces a tools' list in text form from a selected object
#   on any view of the ONT.
#
###############################################################################
#@<DEL>@ TEXT ENCLOSED WITHIN DELETE MARKERS WILL BE REMOVED UPON RELEASE.
# {
#==============================================================================
# Revisions:
#--------
# NX1847
#--------
# Jun-22-2018 gsl - Added utility commands (INFO, EXEC & PAUSE) to facilitate debug
#                 - Added MOM_QUERY_FAIL to avoid annoying warnings
#                 - Added use of Tool_List to avoid duplicate tools being output
#                 - Cleaned up unused codes
###############################################################################
# }
set __Debug_Shopdoc 0
# TEXT ENCLOSED WITHIN DELETE MARKERS WILL BE REMOVED UPON RELEASE.    @<DEL>@
#
#------------------------------------------------------------------------------
# Here you should define any global variables that will be used in any one
# of the event handler.
#------------------------------------------------------------------------------
set mom_source_directory [MOM_ask_env_var UGII_CAM_SHOP_DOC_DIR]
source "$mom_source_directory/shopdoc_header.tcl"
set setup_header 0
set Tool_List(MILL)  [list]
set Tool_List(DRILL) [list]
set Tool_List(LATHE) [list]
set Tool_List(OTHER) [list]
array set Tool_Mill_array  [list]
array set Tool_Drill_array [list]
array set Tool_Lathe_array [list]

###The following is the milling cutter information and format
set Mill_var_list [list mom_tool_number mom_tool_name mom_tool_diameter\
Mom_tool_corner1_radius mom_tool_flute_length mom_tool_length_adjust_register mom_tool_length_adjust_register] set Mill_format_list [list “%-3s” “%-10s” “%-6.3f” “%-8.3f” “” %-5.0f” %-6d” “%-7d” ] set Mill_title_list “\”Tool number\” \”Tool name\” \”Tool diameter\” \”Tool bottom fillet\” \”Tool edge length\” \”Tool length compensation\” \”Tool radius compensation\””
set Mill_title_format “format \”¦ %-3s¦ %-6s ¦ %-4s ¦ %-6s ¦ %-4s ¦ %-6s\ ¦ %-6s ¦\””
set Mill_index 0

###The following is the drill bit information and format
set Drill_var_list [list mom_tool_number mom_tool_name mom_tool_diameter\
Mom_tool_point_angle mom_tool_flute_length mom_tool_length_adjust_register] set Drill_format_list [list “%-3s” “%-10s” “%-6.3f” “%-9.3f” %-5.0f” %-5.0f” %-6d ¦”] set Drill_title_list “\”Tool No.\” \”Tool Name\” \”Tool Diameter\” \”Drill Bottom Angle\” \”Blade Length\” \”Tool Length Compensation\””
set Drill_title_format “format \” ¦ %-3s ¦ %-6s ¦ %-4s ¦ %-6s ¦ %-4s ¦ %-6s ¦\””

set Drill_index            0


###The following is the information and format of the turning tool
set Lathe_var_list         [list mom_tool_name mom_tool_description mom_tool_nose_radius\
                                 tool_orient mom_tool_length_adjust_register]
set Lathe_format_list      [list "       %-13s" "%-10s" "%-12.3f" "%-12.3f" "%-12.3f" "%-10d"]
set Lathe_title_list       "\"Tool name\" \"Tool type\" \"Tool diameter\" \"Tool bottom fillet\" \"Blade length\" \"Tool number (H)\""
set Lathe_title_format     "format \"%-20s %-30s %-10s %-15s %-10s\""
set Lathe_index            0


#=============================================================================
proc INFO { args } {
#=============================================================================
   if { [info exists ::__Debug_Shopdoc] && $::__Debug_Shopdoc } {
      MOM_output_to_listing_device [join $args]
   }
}
#=============================================================================
proc EXEC { command_string {__wait 1} } {
#=============================================================================
# This command can be used in place of the intrinsic Tcl "exec" command
# of which some problems have been reported under Win64 O/S and multi-core
# processors environment.
#
#
# Input:
#   command_string -- command string
#   __wait         -- optional flag
#                     1 (default)   = Caller will wait until execution is complete.
#                     0 (specified) = Caller will not wait.
#
# Return:
#   Results of execution
#
   global tcl_platform

   if { $__wait } {
      if { [string match "windows" $tcl_platform(platform)] } {
         global env mom_logname
        # Create a temporary file to collect output
         set result_file "$env(TEMP)/${mom_logname}__EXEC_[clock clicks].out"
        # Clean up existing file
         regsub -all {\\} $result_file {/}  result_file
         if { [file exists "$result_file"] } {
            file delete -force "$result_file"
         }
         set cmd [concat exec $command_string > \"$result_file\"]
         regsub -all {\\} $cmd {\\\\} cmd
         eval $cmd
        # Return results & clean up temporary file
         if { [file exists "$result_file"] } {
            set fid [open "$result_file" r]
            set result [read $fid]
            close $fid
            file delete -force "$result_file"
           return $result
         }
      } else {
         set cmd [concat exec $command_string]
        return [eval $cmd]
      }
   } else {
      if { [string match "windows" $tcl_platform(platform)] } {
         set cmd [concat exec $command_string &]
         regsub -all {\\} $cmd {\\\\} cmd
        return [eval $cmd]
      } else {
        return [exec $command_string &]
      }
   }
}
#=============================================================================
proc PAUSE { args } {
#=============================================================================
# Revisions:
#-----------
# 05-19-10 gsl - Use EXEC command
#
   global env
   if { [info exists env(PB_SUPPRESS_UGPOST_DEBUG)]  &&  $env(PB_SUPPRESS_UGPOST_DEBUG) == 1 } {
  return
   }

   global gPB
   if { [info exists gPB(PB_disable_MOM_pause)]  &&  $gPB(PB_disable_MOM_pause) == 1 } {
  return
   }

   global tcl_platform
   set cam_aux_dir  [MOM_ask_env_var UGII_CAM_AUXILIARY_DIR]
   if { [string match "*windows*" $tcl_platform(platform)] } {
      set ug_wish "ugwish.exe"
   } else {
      set ug_wish ugwish
   }
   if { [file exists ${cam_aux_dir}$ug_wish]  &&  [file exists ${cam_aux_dir}mom_pause.tcl] } {
      set title ""
      set msg ""
      if { [llength $args] == 1 } {
         set msg [lindex $args 0]
      }
      if { [llength $args] > 1 } {
         set title [lindex $args 0]
         set msg [lindex $args 1]
      }
      set command_string [concat \"${cam_aux_dir}$ug_wish\" \"${cam_aux_dir}mom_pause.tcl\" \"$title\" \"$msg\"]
      set res [EXEC $command_string]

      switch [string trim $res] {
         no {
            set gPB(PB_disable_MOM_pause) 1
         }
         cancel {
            set gPB(PB_disable_MOM_pause) 1
            uplevel #0 {
               if { [llength [info commands "MOM_abort_program"]] } {
                  MOM_abort_program "*** User Abort Post Processing *** "
               } else {
                  MOM_abort "*** User Abort Post Processing *** "
               }
            }
         }
         default {
            return
         }
      }
   } else {
      MOM_output_to_listing_device "PAUSE not executed -- \"$ug_wish\" or \"mom_pause.tcl\" not found"
   }
}
#=============================================================================
proc MOM_QUERY_FAIL { } {
#=============================================================================
# This handler is triggered when an object does not satisfy the query (QRY) condition.
# It allows some variables to be unset.
#
# Jun-22-2018 gsl - Added this handler to prevent unnecessary warnings.
#
}
#=============================================================================
proc MOM_Start_Part_Documentation {} {
#=============================================================================
   global mom_output_file_directory mom_output_file_basename
   global mom_sys_output_file_suffix
   set mom_sys_output_file_suffix "txt"
   MOM_close_output_file ${mom_output_file_directory}${mom_output_file_basename}.${mom_sys_output_file_suffix}
   file delete -force  ${mom_output_file_directory}${mom_output_file_basename}.${mom_sys_output_file_suffix}
}
#=============================================================================
proc MOM_End_Part_Documentation {} {
#=============================================================================
  global Tool_Mill_array
  global Tool_Drill_array
  global Tool_Lathe_array
  global Mill_title_list
  global Drill_title_list
  global Lathe_title_list
  global Mill_title_format
  global Drill_title_format
  global Lathe_title_format
  global Mill_index
  global Drill_index
  global Lathe_index
####Output milling cutter format
   if { [array size Tool_Mill_array] > 0 } {
      MOM_output_literal "    "
      MOM_output_literal "The following is a list of milling cutters:"
      MOM_output_literal "------------------------------------------------------------------------------------"
      set output_str $Mill_title_format
      append output_str " "
      append output_str $Mill_title_list
      MOM_output_literal [eval $output_str]
      MOM_output_literal "------------------------------------------------------------------------------------"
      for { set i 0 } { $i < $Mill_index } { incr i } {
         MOM_output_literal $Tool_Mill_array($i)
         #MOM_output_literal " "
      }
      MOM_output_literal "------------------------------------------------------------------------------------"
   }


   if { [array size Tool_Drill_array] > 0 } {
      MOM_output_literal "    "
      MOM_output_literal "The following is a list of drill bits:"
      MOM_output_literal "----------------------------------------------------------------------"
      set output_str $Drill_title_format
      append output_str " "
      append output_str $Drill_title_list
      MOM_output_literal [eval $output_str]
      MOM_output_literal "----------------------------------------------------------------------"
      for { set i 0 } { $i < $Drill_index } { incr i } {
         MOM_output_literal $Tool_Drill_array($i)
         
      }
      MOM_output_literal "----------------------------------------------------------------------"
   }
   if { [array size Tool_Lathe_array] > 0 } {
      MOM_output_literal "    "
      MOM_output_literal "The following is a list of turning tools:"
      MOM_output_literal "-----------------------------------------------------------------------------------"
      set output_str $Lathe_title_format
      append output_str " "
      append output_str $Lathe_title_list
      MOM_output_literal [eval $output_str]
      MOM_output_literal "-----------------------------------------------------------------------------------"
      for { set i 0 } { $i < $Lathe_index } { incr i } {
         MOM_output_literal $Tool_Lathe_array($i)
         MOM_output_literal " "
      }
      MOM_output_literal "-----------------------------------------------------------------------------------"
   }
}
#===============================================================================
proc MOM_SETUP_HDR {} {
#===============================================================================
  global setup_header
  # Calls the setup header
   if { $setup_header  == 0} \
   {
      Setup_Header_text
      MOM_output_literal "                                  "
      MOM_output_literal "                                  List of tools"
      
      
      set setup_header 1
   }
}
#=============================================================================
proc MOM_SETUP_BODY {} {
#=============================================================================
}
#=============================================================================
proc MOM_SETUP_FTR {} {
#=============================================================================
}
#=============================================================================
proc  MOM_MEMBERS_HDR {} {
#=============================================================================
}
#=============================================================================
proc MOM_MEMBERS_FTR { } {
#=============================================================================
}
#===============================================================================
proc MOM_TOOL_BODY {} {
#===============================================================================
  global mom_tool_name
  global mom_tool_type
  global mom_template_subtype
  global mom_tool_diameter
  global mom_tool_nose_radius
  global mom_tool_length_adjust_register
  global mom_tool_orientation
  global mom_tool_corner1_radius
  global mom_tool_point_angle
  global mom_tool_flute_length
  global mom_drive_point_diameter
  global mom_tool_ug_type
  global mom_tool_description
  global Tool_Mill_array
  global Tool_Drill_array
  global Tool_Lathe_array
  global mom_tool_number
  global Mill_var_list
  global Mill_format_list
  global Mill_index
  global Drill_var_list
  global Drill_format_list
  global Drill_index
  global Lathe_var_list
  global Lathe_format_list
  global Lathe_index

   MapToolType tool_type

  #<Jun-22-2018 gsl> Skip tools already listed
   if { [lsearch $::Tool_List($tool_type) $::mom_tool_name] < 0 } {
      lappend ::Tool_List($tool_type) $::mom_tool_name
   } else {
return
   }

   switch $tool_type \
   {
      "MILL"  {
               # user defined tool. mom_tool_diameter is mom_drive_point_diameter
               if { $mom_tool_ug_type == 15 } {
                   if { [info exists mom_drive_point_diameter] } {
                       set mom_tool_diameter $mom_drive_point_diameter
                   }
               }
               DOC_get_format_str Mill_var_list Mill_format_list output_str
               set Tool_Mill_array($Mill_index) [eval $output_str]
               incr Mill_index
      }
      "DRILL" {
               set pi [expr 2 * asin(1.0)]
               set mom_tool_point_angle [expr [expr 180 / $pi] * \
                                                $mom_tool_point_angle]
               DOC_get_format_str Drill_var_list Drill_format_list output_str
               set Tool_Drill_array($Drill_index) [eval $output_str]
               incr Drill_index
      }
      "LATHE" {
               set mom_tool_orientation [expr [expr 180 / 3.14] * \
                                        $mom_tool_orientation]
               DOC_get_format_str Lathe_var_list Lathe_format_list output_str
               set Tool_Lathe_array($Lathe_index) [eval $output_str]
               incr Lathe_index
      }
   }
}
#==============================================================================
proc DOC_Start_Part_Documentation {} {
#==============================================================================
  # Calls the shopdocs header
   Open_Files
   ShopDoc_Header_text
}
#==============================================================================
proc DOC_parse_excel_html_template_file {} {
#==============================================================================
}
#==============================================================================
proc DOC_prepare_folder {} {
#==============================================================================
}
#==============================================================================
proc DOC_get_format_str { VAR_LIST FORMAT_LIST OUTPUT_STR } {
#==============================================================================
   upvar $VAR_LIST var_list
   upvar $FORMAT_LIST format_list
   upvar $OUTPUT_STR output_str
   set output_str ""
   # Check the length of var_list and format_list
   if { [llength $var_list] != [llength $format_list] } { return }
   set start_str "format \""
   set end_str ""
   set index 0
   foreach var $var_list {
      global $var
      set fmt_str [lindex $format_list $index]
      if { [info exists $var] } {
         # there may be {"} in the value(such as second)
         append end_str " \""
         set tmp_value [set $var]
         regsub -all "\"" $tmp_value "\\\"" tmp_value
         append end_str $tmp_value
         append end_str "\""
         append start_str "$fmt_str "
      } else {
         append end_str " \"--\""
         if [string match "*s" $fmt_str] {
            append start_str "$fmt_str "
         } else {
            set dot_index [string first "." $fmt_str]
            if { $dot_index != -1 } {
               set fmt_str [string range $fmt_str 0 [expr $dot_index -1]]
            } else {
                set len [string length $fmt_str]
                set fmt_str [string range $fmt_str 0 [expr $len - 2]]
            }
            append start_str "$fmt_str" "s "
         }
      }
      incr index
   }
   append output_str "$start_str" "\"" "$end_str"
}