Import LinuxCNC source tree
This commit is contained in:
516
tcl/bin/tkbackplot.tcl
Executable file
516
tcl/bin/tkbackplot.tcl
Executable file
@@ -0,0 +1,516 @@
|
||||
#!/bin/sh
|
||||
# the next line restarts using emcsh \
|
||||
exec $LINUXCNC_EMCSH "$0" "$@"
|
||||
|
||||
###############################################################
|
||||
# Description: genedit.tcl
|
||||
# This file dumps info to a logging file from tkmc.
|
||||
#
|
||||
# Authors: Ray Henry & Paul Corner
|
||||
# License: GPL Version 2
|
||||
#
|
||||
# Copyright (c) 2009 All rights reserved.
|
||||
###############################################################
|
||||
# This is plot processes for tkemc popup under the view menu
|
||||
# of tkemc. The fixed size of the canvas viewing area is 500x250
|
||||
# pixels less scrollbars. The full canvas could be much larger.
|
||||
# Several local variables may be set below to match machines.
|
||||
###############################################################
|
||||
|
||||
# Load the linuxcnc.tcl file, which defines variables for various useful paths
|
||||
source [file join [file dirname [info script]] .. linuxcnc.tcl]
|
||||
|
||||
# These offset plot zero from canvas zero.
|
||||
set xoffset 0
|
||||
set yoffset 0
|
||||
set zoffset 0
|
||||
|
||||
# These set the axis directions. +1 one plots like graph
|
||||
# paper with positive up and to the right. The canvas widgets orient so that
|
||||
# xy plot is looking down on the work area from the operator position.
|
||||
# x is left right and y is up down.
|
||||
# xz plot is looking into the work area along the axis of y
|
||||
# yz plot is looking into the work area along the axis of x
|
||||
# to reverse as axis change its value to -1 (don't put other numbers here)
|
||||
set xdir 1
|
||||
set ydir 1
|
||||
set zdir 1
|
||||
|
||||
# These set the size of the canvas widget behind the viewing area.
|
||||
# Set for the size of your machine or larger. They can also be set so that you
|
||||
# place your machine home about the same location in canvas space that it has on the
|
||||
# real machine.
|
||||
# They need not be the same for each axis.
|
||||
# the value used is pixels so multiply your machine workspace size in inches by 72.
|
||||
|
||||
# the default shipped here is for a center zero'd machine with 1000 pixels both left/right
|
||||
# and 500 pixels both top/bottom in all axis.
|
||||
# Read variable names (xytopx) as "xy plot topleft x" value etc.
|
||||
|
||||
# If your machine were top right homed on xy, you might use
|
||||
# xy -1900 -100 100 900
|
||||
# xz -1900 -100 100 900
|
||||
# yz -100 -100 1900 900
|
||||
|
||||
# These set top left and bottom right of xy canvas
|
||||
set xytopx -1000
|
||||
set xytopy -500
|
||||
set xybotx 1000
|
||||
set xyboty 500
|
||||
|
||||
# These set top left and bottom right of xz canvas
|
||||
set xztopx -1000
|
||||
set xztopz -500
|
||||
set xzbotx 1000
|
||||
set xzbotz 500
|
||||
|
||||
# These set top left and bottom right of yz canvas
|
||||
set yztopy -1000
|
||||
set yztopz -500
|
||||
set yzboty 1000
|
||||
set yzbotz 500
|
||||
|
||||
# This variable sets the default size of the plot and can be thought of as number of
|
||||
# pixels per inch of machine motion. The default (40) will give about .55 screen
|
||||
# inch per inch moved.
|
||||
|
||||
set size 40
|
||||
|
||||
#These variables set the default angles used for the 3d plot. in this release,
|
||||
#only the xyangle is used though the others are also shown on the setup screen
|
||||
|
||||
# These three can go.
|
||||
set xyangle 30
|
||||
set xangle 30
|
||||
set yangle 30
|
||||
set zangle 60
|
||||
set xycosangle 0
|
||||
set xysinangle 0
|
||||
|
||||
# I used these in the latest edit - Paul.
|
||||
|
||||
# pop up the plot window
|
||||
proc popupPlot {} {
|
||||
global screen tab
|
||||
global xytopx xytopy xybotx xyboty
|
||||
global xztopx xztopz xzbotx xzbotz
|
||||
global yztopy yztopz yzboty yzbotz
|
||||
global xycenterx xycentery xzcenterx xzcenterz yzcentery yzcenterz
|
||||
|
||||
|
||||
set d .plot
|
||||
|
||||
if {[winfo exists $d]} {
|
||||
wm deiconify $d
|
||||
raise $d
|
||||
focus $d
|
||||
return
|
||||
}
|
||||
toplevel $d
|
||||
wm title $d [msgcat::mc "TkLinuxCNC BackPlot"]
|
||||
|
||||
# use "pw" as name of top level from now on
|
||||
set pw .plot
|
||||
|
||||
set tab [frame $pw.tabs]
|
||||
button $tab.xy -relief flat -font {Helvetica -10 bold} -anchor n -width 8 \
|
||||
-text {X - Y} -command {selectPlot xy} -borderwidth 0
|
||||
button $tab.xz -relief flat -font {Helvetica -10 bold} -anchor n -width 8 \
|
||||
-text {X - Z} -command {selectPlot xz} -borderwidth 0
|
||||
button $tab.yz -relief flat -font {Helvetica -10 bold} -anchor n -width 8 \
|
||||
-text {Y - Z} -command {selectPlot yz} -borderwidth 0
|
||||
button $tab.3d -relief flat -font {Helvetica -10 bold} -anchor n -width 8 \
|
||||
-text { 3D } -command {selectPlot 3d} -borderwidth 0
|
||||
button $tab.config -relief raised -font {Helvetica -10 bold} -anchor n -width 8 \
|
||||
-text [msgcat::mc "SETUP"] -command {selectPlot config} -borderwidth 1
|
||||
button $tab.reset -relief raised -font {Helvetica -10 bold} -anchor n -width 8 \
|
||||
-text [msgcat::mc "RESET"] -command {erasePlot} -borderwidth 1
|
||||
button $tab.can -relief raised -font {Helvetica -10 bold} -anchor n -width 8 \
|
||||
-text [msgcat::mc "CANCEL"] -command {destroy .plot} -borderwidth 1
|
||||
pack $tab.xy $tab.xz $tab.yz $tab.3d $tab.config $tab.reset $tab.can -side left \
|
||||
-fill both
|
||||
pack $tab -side top -fill x
|
||||
|
||||
|
||||
set xlast 0
|
||||
set ylast 0
|
||||
set zlast 0
|
||||
set 3dxnext 0
|
||||
set 3dyrnext 0
|
||||
set plotcolor black
|
||||
|
||||
# Computes (0,0) and attempts to center it in view.
|
||||
# Computation for xy plot
|
||||
set xytotalx [expr {abs($xytopx) + abs($xybotx)}]
|
||||
set xylowerx [expr {abs($xytopx) - 270}]
|
||||
if {$xylowerx <= 0} {
|
||||
set xycenterx 0
|
||||
} else {
|
||||
set xycenterx [expr {double($xylowerx) / double($xytotalx)} * 1.1 ]
|
||||
}
|
||||
|
||||
set xytotaly [expr {abs($xytopy) + abs($xyboty)}]
|
||||
set xylowery [expr {abs($xytopy) - 125}]
|
||||
if {$xylowery <= 0} {
|
||||
set xycentery 0
|
||||
} else {
|
||||
set xycentery [expr {double($xylowery) / double($xytotaly)} * .8 ]
|
||||
}
|
||||
|
||||
# Computation for xz plot
|
||||
set xztotalx [expr {abs($xztopx) + abs($xzbotx)}]
|
||||
set xzlowerx [expr {abs($xztopx) - 270}]
|
||||
if {$xzlowerx <= 0} {
|
||||
set xzcenterx 0
|
||||
} else {
|
||||
set xzcenterx [expr {double($xzlowerx) / double($xztotalx)} * 1.1]
|
||||
}
|
||||
|
||||
set xztotalz [expr {abs($xztopz) + abs($xzbotz)}]
|
||||
set xzlowerz [expr {abs($xztopz) - 125}]
|
||||
if {$xzlowerz <= 0} {
|
||||
set xzcenterz 0
|
||||
} else {
|
||||
set xzcenterz [expr {double($xzlowerz) / double($xztotalz)} * .8]
|
||||
}
|
||||
|
||||
# Computation for yz plot
|
||||
set yztotaly [expr {abs($yztopy) + abs($yzboty)}]
|
||||
set yzlowery [expr {abs($yztopy) - 270}]
|
||||
if {$yzlowery <= 0} {
|
||||
set yzcentery 0
|
||||
} else {
|
||||
set yzcentery [expr {double($yzlowery) / double($yztotaly)} * 1.1]
|
||||
}
|
||||
|
||||
set yztotalz [expr {abs($yztopz) + abs($yzbotz)}]
|
||||
set yzlowerz [expr {abs($yztopz) - 125}]
|
||||
if {$yzlowerz <= 0} {
|
||||
set yzcenterz 0
|
||||
} else {
|
||||
set yzcenterz [expr {double($yzlowerz) / double($yztotalz)} * .8]
|
||||
}
|
||||
|
||||
set screen [frame $pw.frame -width 500 -height 260 ]
|
||||
|
||||
frame $screen.xyplot
|
||||
canvas $screen.xyplot.canv -borderwidth 0 -scrollregion "$xytopx $xytopy $xybotx $xyboty" \
|
||||
-relief flat -xscrollcommand "$screen.xyplot.hscroll set" \
|
||||
-yscrollcommand "$screen.xyplot.vscroll set" \
|
||||
-xscrollincrement 10 -yscrollincrement 10 -width 500 -height 260
|
||||
scrollbar $screen.xyplot.hscroll -orient horizontal -command "$screen.xyplot.canv xview"
|
||||
scrollbar $screen.xyplot.vscroll -orient vertical -command "$screen.xyplot.canv yview"
|
||||
grid $screen.xyplot.canv -row 0 -column 0 -sticky nsew
|
||||
grid $screen.xyplot.vscroll -row 0 -column 1 -sticky ns
|
||||
grid $screen.xyplot.hscroll -row 1 -column 0 -sticky ew
|
||||
grid rowconfigure $screen.xyplot 0 -weight 1
|
||||
grid columnconfigure $screen.xyplot 0 -weight 1
|
||||
|
||||
frame $screen.xzplot
|
||||
canvas $screen.xzplot.canv -borderwidth 0 -scrollregion "$xztopx $xztopz $xzbotx $xzbotz" \
|
||||
-relief flat -xscrollcommand "$screen.xzplot.hscroll set" \
|
||||
-yscrollcommand "$screen.xzplot.vscroll set" \
|
||||
-xscrollincrement 10 -yscrollincrement 10 -width 500 -height 260
|
||||
scrollbar $screen.xzplot.hscroll -orient horizontal -command "$screen.xzplot.canv xview"
|
||||
scrollbar $screen.xzplot.vscroll -orient vertical -command "$screen.xzplot.canv yview"
|
||||
grid $screen.xzplot.canv -row 0 -column 0 -sticky nsew
|
||||
grid $screen.xzplot.vscroll -row 0 -column 1 -sticky ns
|
||||
grid $screen.xzplot.hscroll -row 1 -column 0 -sticky ew
|
||||
grid rowconfigure $screen.xzplot 0 -weight 1
|
||||
grid columnconfigure $screen.xzplot 0 -weight 1
|
||||
|
||||
frame $screen.yzplot
|
||||
canvas $screen.yzplot.canv -borderwidth 0 -scrollregion "$yztopy $yztopz $yzboty $yzbotz" \
|
||||
-relief flat -xscrollcommand "$screen.yzplot.hscroll set" \
|
||||
-yscrollcommand "$screen.yzplot.vscroll set" \
|
||||
-xscrollincrement 10 -yscrollincrement 10 -width 500 -height 260
|
||||
scrollbar $screen.yzplot.hscroll -orient horizontal -command "$screen.yzplot.canv xview"
|
||||
scrollbar $screen.yzplot.vscroll -orient vertical -command "$screen.yzplot.canv yview"
|
||||
grid $screen.yzplot.canv -row 0 -column 0 -sticky nsew
|
||||
grid $screen.yzplot.vscroll -row 0 -column 1 -sticky ns
|
||||
grid $screen.yzplot.hscroll -row 1 -column 0 -sticky ew
|
||||
grid rowconfigure $screen.yzplot 0 -weight 1
|
||||
grid columnconfigure $screen.yzplot 0 -weight 1
|
||||
|
||||
frame $screen.3dplot
|
||||
canvas $screen.3dplot.canv -borderwidth 0 -scrollregion "$yztopy $yztopz $yzboty $yzbotz" \
|
||||
-relief flat -xscrollcommand "$screen.3dplot.hscroll set" \
|
||||
-yscrollcommand "$screen.3dplot.vscroll set" \
|
||||
-xscrollincrement 10 -yscrollincrement 10 -width 500 -height 260
|
||||
scrollbar $screen.3dplot.hscroll -orient horizontal -command "$screen.3dplot.canv xview"
|
||||
scrollbar $screen.3dplot.vscroll -orient vertical -command "$screen.3dplot.canv yview"
|
||||
grid $screen.3dplot.canv -row 0 -column 0 -sticky nsew
|
||||
grid $screen.3dplot.vscroll -row 0 -column 1 -sticky ns
|
||||
grid $screen.3dplot.hscroll -row 1 -column 0 -sticky ew
|
||||
grid rowconfigure $screen.3dplot 0 -weight 1
|
||||
grid columnconfigure $screen.3dplot 0 -weight 1
|
||||
|
||||
set cft [frame $screen.config ]
|
||||
|
||||
label $cft.label1 -text [msgcat::mc "AXIS"] -anchor e
|
||||
label $cft.label2 -text [msgcat::mc "OFFSET"]
|
||||
label $cft.label3 -text [msgcat::mc "ANGLE"]
|
||||
label $cft.label4 -text [msgcat::mc "DIRECTION"]
|
||||
|
||||
label $cft.labelx -text "X :" -anchor e
|
||||
entry $cft.exo -relief sunken -textvariable xoffset -width 8
|
||||
entry $cft.exa -relief sunken -textvariable xangle -width 8
|
||||
button $cft.bxd -textvariable xdir -command {changeDirection xdir} -width 10
|
||||
|
||||
label $cft.labely -text "Y :" -anchor e
|
||||
entry $cft.eyo -relief sunken -textvariable yoffset -width 8
|
||||
entry $cft.eya -relief sunken -textvariable yangle -width 8
|
||||
button $cft.byd -textvariable ydir -command {changeDirection ydir} -width 10
|
||||
|
||||
label $cft.labelz -text "Z :" -anchor e
|
||||
entry $cft.ezo -relief sunken -textvariable zoffset -width 8
|
||||
entry $cft.eza -relief sunken -textvariable zangle -width 8
|
||||
button $cft.bzd -textvariable zdir -command {changeDirection zdir} -width 10
|
||||
|
||||
label $cft.elabel -text [msgcat::mc "SIZE :"] -anchor e -width 8
|
||||
entry $cft.esize -relief sunken -textvariable size -width 8
|
||||
|
||||
grid $cft.label1 $cft.label2 $cft.label3 $cft.label4 $cft.elabel -padx 6
|
||||
grid $cft.labelx $cft.exo $cft.exa $cft.bxd $cft.esize -padx 6 -pady 2
|
||||
grid $cft.labely $cft.eyo $cft.eya $cft.byd -padx 6 -pady 2
|
||||
grid $cft.labelz $cft.ezo $cft.eza $cft.bzd -padx 6 -pady 2
|
||||
|
||||
pack $cft -side top -pady 10 -fill both -expand yes
|
||||
pack $screen -side top -fill both -expand yes
|
||||
|
||||
erasePlot
|
||||
selectPlot 3d
|
||||
|
||||
}
|
||||
|
||||
proc selectPlot {which} {
|
||||
global screen tab
|
||||
switch -- $which {
|
||||
xy {
|
||||
pack $screen.xyplot -side top -fill both -expand yes
|
||||
pack forget $screen.xzplot $screen.yzplot $screen.3dplot $screen.config
|
||||
$tab.xy configure -borderwidth 0 -relief flat
|
||||
$tab.xz configure -borderwidth 1 -relief sunken
|
||||
$tab.yz configure -borderwidth 1 -relief sunken
|
||||
$tab.3d configure -borderwidth 1 -relief sunken
|
||||
}
|
||||
xz {
|
||||
pack $screen.xzplot -side top -fill both -expand yes
|
||||
pack forget $screen.xyplot $screen.yzplot $screen.3dplot $screen.config
|
||||
$tab.xy configure -borderwidth 1 -relief sunken
|
||||
$tab.xz configure -borderwidth 0 -relief flat
|
||||
$tab.yz configure -borderwidth 1 -relief sunken
|
||||
$tab.3d configure -borderwidth 1 -relief sunken
|
||||
}
|
||||
yz {
|
||||
pack $screen.yzplot -side top -fill both -expand yes
|
||||
pack forget $screen.xyplot $screen.xzplot $screen.3dplot $screen.config
|
||||
$tab.xy configure -borderwidth 1 -relief sunken
|
||||
$tab.xz configure -borderwidth 1 -relief sunken
|
||||
$tab.yz configure -borderwidth 0 -relief flat
|
||||
$tab.3d configure -borderwidth 1 -relief sunken
|
||||
}
|
||||
3d {
|
||||
pack $screen.3dplot -side top -fill both -expand yes
|
||||
pack forget $screen.xyplot $screen.xzplot $screen.yzplot $screen.config
|
||||
$tab.xy configure -borderwidth 1 -relief sunken
|
||||
$tab.xz configure -borderwidth 1 -relief sunken
|
||||
$tab.yz configure -borderwidth 1 -relief sunken
|
||||
$tab.3d configure -borderwidth 0 -relief flat
|
||||
}
|
||||
config {
|
||||
pack $screen.config -side top -fill both -expand yes
|
||||
pack forget $screen.xyplot $screen.xzplot $screen.yzplot $screen.3dplot
|
||||
$tab.xy configure -borderwidth 1 -relief sunken
|
||||
$tab.xz configure -borderwidth 1 -relief sunken
|
||||
$tab.yz configure -borderwidth 1 -relief sunken
|
||||
$tab.3d configure -borderwidth 1 -relief sunken
|
||||
}
|
||||
default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc changeDirection {axisvariable} {
|
||||
global xdir ydir zdir
|
||||
if {$axisvariable == "xdir"} {
|
||||
if {$xdir == 1} {
|
||||
set xdir -1
|
||||
} else {
|
||||
set xdir 1
|
||||
}
|
||||
} elseif {$axisvariable == "ydir"} {
|
||||
if {$ydir == 1} {
|
||||
set ydir -1
|
||||
} else {
|
||||
set ydir 1
|
||||
}
|
||||
} elseif {$axisvariable == "zdir"} {
|
||||
if {$zdir == 1} {
|
||||
set zdir -1
|
||||
} else {
|
||||
set zdir 1
|
||||
}
|
||||
}
|
||||
erasePlot
|
||||
}
|
||||
|
||||
set xnext 0; set ynext 0; set znext 0; set yrnext 0; set zrnext 0
|
||||
set 3dxnext 0; set 3dynext 0; set 3dznext 0; set 3dyrnext 0
|
||||
set 3dylast 0; set 3dxlast 0; set 3dzlast 0; set 3dyrlast 0
|
||||
|
||||
proc backPlot {} {
|
||||
global screen
|
||||
global size xoffset yoffset zoffset xdir ydir zdir
|
||||
global xnext ynext znext yrnext zrnext 3dxnext 3dyrnext
|
||||
$screen.xyplot.canv create oval [expr $xnext -2] [expr $yrnext -2] \
|
||||
[expr $xnext + 2] [expr $yrnext +2] -outline red -tags xytool
|
||||
$screen.xzplot.canv create line $xnext $zrnext $xnext [expr $zrnext - 20] \
|
||||
-fill red -arrow first -tags xzarrow
|
||||
$screen.yzplot.canv create line $ynext $zrnext $ynext [expr $zrnext - 20] \
|
||||
-fill red -arrow first -tags yzarrow
|
||||
$screen.3dplot.canv create line $3dxnext $3dyrnext [expr $3dxnext + 10] [expr $3dyrnext -15] \
|
||||
-fill red -arrow first -tags 3darrow
|
||||
}
|
||||
|
||||
proc erasePlot {} {
|
||||
global screen
|
||||
$screen.xyplot.canv addtag all all
|
||||
$screen.xyplot.canv delete all
|
||||
$screen.xzplot.canv addtag all all
|
||||
$screen.xzplot.canv delete all
|
||||
$screen.yzplot.canv addtag all all
|
||||
$screen.yzplot.canv delete all
|
||||
$screen.3dplot.canv addtag all all
|
||||
$screen.3dplot.canv delete all
|
||||
backPlot
|
||||
markPlot
|
||||
}
|
||||
|
||||
# Process markPlot shows initial conditions and display for plots
|
||||
proc markPlot {} {
|
||||
global xdir ydir zdir xoffset yoffset zoffset 3dxyangle xycosangle xysinangle
|
||||
global xycenterx xycentery xzcenterx xzcenterz yzcentery yzcenterz xyangle
|
||||
global xangle yangle zangle
|
||||
global screen
|
||||
$screen.xyplot.canv create line 0 0 [expr $xdir * 50] 0 -arrow last -fill blue
|
||||
$screen.xyplot.canv create text [expr $xdir * (50 + 10)] 2 -text X+ -fill blue
|
||||
$screen.xyplot.canv create line 0 0 0 [expr $ydir * -50] -arrow last -fill blue
|
||||
$screen.xyplot.canv create text -2 [expr $ydir * -(50 + 10)] -text Y+ -fill blue
|
||||
$screen.xyplot.canv xview moveto $xycenterx
|
||||
$screen.xyplot.canv yview moveto $xycentery
|
||||
|
||||
$screen.xzplot.canv create line 0 0 [expr $xdir * 50] 0 -arrow last -fill blue
|
||||
$screen.xzplot.canv create text [expr $xdir * (50 + 10)] 2 -text X+ -fill blue
|
||||
$screen.xzplot.canv create line 0 0 0 [expr $zdir * -50] -arrow last -fill blue
|
||||
$screen.xzplot.canv create text -2 [expr $zdir * -(50 + 10)] -text Z+ -fill blue
|
||||
$screen.xzplot.canv xview moveto $xzcenterx
|
||||
$screen.xzplot.canv yview moveto $xzcenterz
|
||||
$screen.yzplot.canv create line 0 0 [expr $ydir * 50] 0 -arrow last -fill blue
|
||||
$screen.yzplot.canv create text [expr $ydir * (50 + 10)] 2 -text Y+ -fill blue
|
||||
$screen.yzplot.canv create line 0 0 0 [expr $zdir * -50] -arrow last -fill blue
|
||||
$screen.yzplot.canv create text -2 [expr $zdir * -(50 + 10)] -text Z+ -fill blue
|
||||
$screen.yzplot.canv xview moveto $yzcentery
|
||||
$screen.yzplot.canv yview moveto $yzcenterz
|
||||
|
||||
set xyangle $xangle
|
||||
set 3dxyangle [expr $xyangle * 0.017453]
|
||||
set xycosangle [expr cos($3dxyangle)]
|
||||
set xysinangle [expr sin($3dxyangle)]
|
||||
|
||||
$screen.3dplot.canv create line 0 0 [expr $xdir * $xycosangle * 50] \
|
||||
[expr $xdir * $xysinangle * -50] -arrow last -fill blue
|
||||
$screen.3dplot.canv create text [expr $xdir * $xycosangle * 60]\
|
||||
[expr $xdir * $xysinangle * -60] -text X+ -fill blue
|
||||
$screen.3dplot.canv create line 0 0 [expr $ydir * $xycosangle * -50] \
|
||||
[expr $ydir * $xysinangle * -50] -arrow last -fill blue
|
||||
$screen.3dplot.canv create text [expr $ydir * $xycosangle * -60] \
|
||||
[expr $ydir * $xysinangle * -60] -text Y+ -fill blue
|
||||
$screen.3dplot.canv create line 0 0 0 [expr $zdir * -50] -arrow last -fill blue
|
||||
$screen.3dplot.canv create text -2 [expr $zdir * - 60] -text Z+ -fill blue
|
||||
$screen.3dplot.canv xview moveto $xycenterx
|
||||
$screen.3dplot.canv yview moveto $xycentery
|
||||
}
|
||||
|
||||
# this process plots the motion of the tool center
|
||||
# it is commanded by a line [if winfo exists .plot] in updateStatus
|
||||
|
||||
set xlast 0
|
||||
set ylast 0
|
||||
set zlast 0
|
||||
set plotcolor brown
|
||||
|
||||
proc updatePlot {} {
|
||||
global size screen unitsetting
|
||||
global xdir ydir zdir
|
||||
global xnext ynext znext yrnext zrnext xlast ylast zlast
|
||||
global xoffset yoffset zoffset xycosangle xysinangle
|
||||
global programfiletext posdigit0 posdigit1 posdigit2 activeLine plotcolor
|
||||
global 3dxnext 3dynext 3dznext 3dyrnext 3dylast 3dxlast 3dzlast 3dyrlast
|
||||
|
||||
# hack to divide scale for mm plotting
|
||||
if {$unitsetting == "(mm)" } {
|
||||
set scaler 25.4
|
||||
} else {
|
||||
set scaler 1
|
||||
}
|
||||
set posdigitx0 [expr $posdigit0 / $scaler]
|
||||
set posdigitx1 [expr $posdigit1 / $scaler]
|
||||
set posdigitx2 [expr $posdigit2 / $scaler]
|
||||
|
||||
# Color plot line by setting active line to upcase thisstring
|
||||
set thisstring [string toupper [$programfiletext get $activeLine.0 $activeLine.end]]
|
||||
# Search thisstring for g0-3 but make modal with no else
|
||||
if { [string first G2 $thisstring] != -1 || \
|
||||
[string first G02 $thisstring] != -1 } {
|
||||
set plotcolor red
|
||||
} elseif { [string first G3 $thisstring] != -1 || \
|
||||
[string first G03 $thisstring] != -1 } {
|
||||
set plotcolor blue
|
||||
} elseif { [string first G1 $thisstring] != -1 || \
|
||||
[string first G01 $thisstring] != -1 } {
|
||||
set plotcolor black
|
||||
} elseif { [string first G$screen $thisstring] != -1 } {
|
||||
continue
|
||||
} elseif { [string first G0 $thisstring] != -1 } {
|
||||
set plotcolor lightgreen
|
||||
}
|
||||
|
||||
if {$size < 1} {set size 1} {
|
||||
set xnext [expr $xoffset + ($posdigitx0 * $size * $xdir)]
|
||||
set ynext [expr $yoffset + ($posdigitx1 * $size * $ydir)]
|
||||
set znext [expr $zoffset + ($posdigitx2 * $size * $zdir)]
|
||||
|
||||
if {$xlast != $xnext || $ylast != $ynext || $zlast != $znext} {
|
||||
# these routines reverse y direction, plot xy and move tool
|
||||
set yrlast [expr -1 * $ylast]
|
||||
set yrnext [expr -1 * $ynext]
|
||||
$screen.xyplot.canv create line $xlast $yrlast $xnext $yrnext -fill $plotcolor
|
||||
$screen.xyplot.canv move xytool [expr $xnext - $xlast] [expr $yrnext - $yrlast]
|
||||
|
||||
# these routines reverse z direction plot xz and yz and move arrows
|
||||
set zrlast [expr -1 * $zlast]
|
||||
set zrnext [expr -1 * $znext]
|
||||
$screen.xzplot.canv create line $xlast $zrlast $xnext $zrnext -fill $plotcolor
|
||||
$screen.xzplot.canv move xzarrow [expr $xnext - $xlast] [expr $zrnext - $zrlast]
|
||||
$screen.yzplot.canv create line $ylast $zrlast $ynext $zrnext -fill $plotcolor
|
||||
$screen.yzplot.canv move yzarrow [expr $ynext - $ylast] [expr $zrnext - $zrlast]
|
||||
|
||||
# 3D plot calculations
|
||||
set 3dxnext [expr [expr $xnext * $xycosangle] + [expr $ynext * -1 * $xycosangle]]
|
||||
set 3dynext [expr [expr $xnext * $xysinangle] + [expr $ynext * $xysinangle] + $znext]
|
||||
# Plot 3D xy and move tool
|
||||
set 3dyrlast [expr -1 * $3dylast]
|
||||
set 3dyrnext [expr -1 * $3dynext]
|
||||
$screen.3dplot.canv create line $3dxlast $3dyrlast $3dxnext $3dyrnext -fill $plotcolor
|
||||
$screen.3dplot.canv move 3darrow [expr $3dxnext - $3dxlast] [expr $3dyrnext - $3dyrlast]
|
||||
|
||||
set 3dxlast $3dxnext
|
||||
set 3dylast $3dynext
|
||||
set 3dzlast $3dznext
|
||||
set xlast $xnext
|
||||
set ylast $ynext
|
||||
set zlast $znext
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user