Usage of hud in vismach?

More
6 years 10 months ago #152804 by ross_dev
Hi

I have been trying to get the vismach HUD to display updating values, but am drawing a bit of a blank. In vismach.py, in the definition of the hud class, there is a comment:
Code:
class Hud(object): '''head up display - draws a semi-transparent text box. use HUD.strs for things that must be updated constantly, and HUD.show("stuff") for one-shot things like error messages''' def __init__(self, showme=1): self.app = [] self.strs = [] self.messages = [] self.showme = 0

Creating an object via myhud = Hud() and using myhud.show("example"), I can get the hud to display that text. However I want to stream live data such as joint positions and ultimately, tool number somehow.

Looking at the code for the HUD class, I have tried a few different things in my vismach script unsuccessfully, such as:
Code:
myhud = Hud() myhud.strs = [c.joint0] myhud.draw()

as draw() appears to work with the strs array. I tried passing c.joint as this is the HAL component for the x axis. Unfortunately the HUD does not appear with the draw command, only with the show which can only handle a static output.

I also tried:
Code:
myhud.show(myhud.strs)

Which gives a stack overflow.

This all comes before the final call to main, and I have experimented with using hud=myhud or hud=1 as the hud parameter.

Any suggestions on how best to use this function please?

Cheers!

Please Log in to join the conversation.

More
6 years 10 months ago #153333 by andypugh
Replied by andypugh on topic Usage of hud in vismach?
Is there any indication that the live display is expecting to be associated with a HAL pin, like the joint positions are?

Please Log in to join the conversation.

More
6 years 9 months ago #154535 by ross_dev
Replied by ross_dev on topic Usage of hud in vismach?
Hi Andy

I will check - I have kind of shelved this aspect of things for now as it was more of a "nice to have"!

Cheers
Ross

Please Log in to join the conversation.

More
5 years 6 months ago #206091 by udoS
Replied by udoS on topic Usage of hud in vismach?
Hi Andy / ross_dev
there any new information on the vismach.
Because as soon as I try to start the hud, the vismach is not starting any more.

can someone help with that.

Best Regards

Please Log in to join the conversation.

More
5 years 6 months ago #206092 by andypugh
Replied by andypugh on topic Usage of hud in vismach?
I don't have the answer, but any info learned I will put in the (scant) Vismach docs.

Please Log in to join the conversation.

More
5 years 1 month ago #219408 by udoS
Replied by udoS on topic Usage of hud in vismach?
@ross_dev

Hi ross_dev,
is there any new docu or information on how to get the HUD working.

Best rgds

Please Log in to join the conversation.

More
3 years 9 months ago #261262 by Aciera
Replied by Aciera on topic Usage of hud in vismach?
I've been playing around with vismach lately and wanted  the hud to display updated axis values. I have modified the 'Hud(object)' class to create a new class 'HalHud(object)' which lets me pass any number of pins to the hud from my vismach script like this:
Code:
# start hud myhud = HalHud(c, ['axis-x: ' ,'axis-y: ', 'axis-z: '], ["{:10.4f}","{:10.4f}","{:10.4f}"], ["axis_x", "axis_y", "axis_z"]) myhud.show_top("XYZABC-TRSRN") myhud.show_top("------------") myhud.show("-------------") myhud.show("The End") # end hud

 

Attachment not found


Code:
class HalHud(object):         '''head up display - draws a semi-transparent text box.         use HUD.strs for things that must be updated constantly,         and HUD.show("stuff") for one-shot things like error messages'''         def __init__(self, comp, strings, formats, var):                 self.showme = 0                 self.app =                 self.strs =                 self.messages =                 self.messages_top =                 self.fontbase =                 self.comp = comp                 self.strings = strings                 self.formats = formats                 self.var = var         def show_top(self, string):                 self.showme = 1                 self.messages_top += [str(string)]         def show(self, string):                 self.showme = 1                 self.messages += [str(string)]                  def hide(self):                 self.showme = 0                          def clear(self):                 self.messages =                          def draw(self):                 self.strs =                 # create the strings with the updated values using the corresponding list elements                 for n in range(len(self.strings)):                     self.strs += [self.strings[n] + str(self.formats[n].format(self.comp[self.var[n]]))]                 drawtext = self.messages_top + self.strs + self.messages                 self.lines = len(drawtext)                 #draw head-up-display                 #see axis.py for more font/color configurability                 if ((self.showme == 0) or (self.lines == 0)):                         return                                  glMatrixMode(GL_PROJECTION)                 glPushMatrix()                 glLoadIdentity()                                  if not self.fontbase:                         self.fontbase = int(self.app.loadbitmapfont("9x15"))                 char_width, char_height = 9, 15                 xmargin,ymargin = 5,5                 ypos = float(self.app.winfo_height())                                  glOrtho(0.0, self.app.winfo_width(), 0.0, ypos, -1.0, 1.0)                 glMatrixMode(GL_MODELVIEW)                 glPushMatrix()                 glLoadIdentity()                                  #draw the text box                 maxlen = max([len(p) for p in drawtext])                 box_width = maxlen * char_width                 glDepthFunc(GL_ALWAYS)                 glDepthMask(GL_FALSE)                 glDisable(GL_LIGHTING)                 glEnable(GL_BLEND)                 glEnable(GL_NORMALIZE)                 glBlendFunc(GL_ONE, GL_CONSTANT_ALPHA)                 glColor3f(0,0.2,0) # sets the color of the hud overlay                 glBlendColor(0,0,0,0.5) #rgba, sets the transparency of the overlay using the 'a' value                 glBegin(GL_QUADS)                 glVertex3f(0, ypos, 1) #upper left                 glVertex3f(0, ypos - 2*ymargin - char_height*len(drawtext), 1) #lower left                 glVertex3f(box_width+2*xmargin, ypos - 2*ymargin - char_height*len(drawtext), 1) #lower right                 glVertex3f(box_width+2*xmargin,  ypos , 1) #upper right                 glEnd()                 glDisable(GL_BLEND)                 glEnable(GL_LIGHTING)                                  #fill the box with text                 maxlen = 0                 ypos -= char_height+ymargin                 i=0                 glDisable(GL_LIGHTING)                 glColor3f(0.9,0.9,0.0) # sets the color of the text in the hud                 for string in drawtext:                         maxlen = max(maxlen, len(string))                         glRasterPos2i(xmargin, int(ypos))                         for char in string:                                 glCallList(self.fontbase + ord(char))                         ypos -= char_height                         i = i + 1                 glDepthFunc(GL_LESS)                 glDepthMask(GL_TRUE)                 glEnable(GL_LIGHTING)                          glPopMatrix()                 glMatrixMode(GL_PROJECTION)                 glPopMatrix()                 glMatrixMode(GL_MODELVIEW)

 

Please Log in to join the conversation.

More
3 years 9 months ago #261414 by cmorley
Replied by cmorley on topic Usage of hud in vismach?
I added this to qt_vismach in 2.9 and master.
I used slightly different code to set the HAL pin lines.
Very nice thank you.

Please Log in to join the conversation.

More
3 years 9 months ago #261465 by Aciera
Replied by Aciera on topic Usage of hud in vismach?
I guess what I should have done is use optional arguments in the existing class instead of creating another one. This should also work with any existing code:
Code:
class Hud(object):         '''head up display - draws a semi-transparent text box.         use HUD.strs for things that must be updated constantly,         and HUD.show("stuff") for one-shot things like error messages'''         # for updating pin values use the optional argument lists. Display will be:         # 'strings[0]' var[0] formated by formats[0]]         # 'strings[1]' var[1] formated by formats[1]]         # and so on         # Example:         # Hud(c,["Axis-X: ", "Axis-Y: "], ["{:8.3f}","{:8.3f}"], ["halpin_pos_x", "halpin_pos_y"])         # for static messages to be displayed before the updating values use Hud.show_top("your_string_here")         # for static messages to be displayed after the updating values use Hud.show("your_string_here")         def __init__(self, comp=None, strings=, formats=, var=):                 self.showme = 0                 self.app =                 self.strs =                 self.messages =                 self.messages_top =                 self.fontbase =                 self.comp = comp                 self.strings = strings                 self.formats = formats                 self.var = var         def show_top(self, string):                 self.showme = 1                 self.messages_top += [str(string)]         def show(self, string):                 self.showme = 1                 self.messages += [str(string)]                  def hide(self):                 self.showme = 0                          def clear(self):                 self.messages =                          def draw(self):                 self.strs =                 # create the strings with the updated values using the corresponding list elements                 for n in range(len(self.strings)):                     self.strs += [self.strings[n] + str(self.formats[n].format(self.comp[self.var[n]]))]                 drawtext = self.messages_top + self.strs + self.messages                 self.lines = len(drawtext)                 #draw head-up-display                 #see axis.py for more font/color configurability                 if ((self.showme == 0) or (self.lines == 0)):                         return                                  glMatrixMode(GL_PROJECTION)                 glPushMatrix()                 glLoadIdentity()                                  if not self.fontbase:                         self.fontbase = int(self.app.loadbitmapfont("9x15"))                 char_width, char_height = 9, 15                 xmargin,ymargin = 5,5                 ypos = float(self.app.winfo_height())                                  glOrtho(0.0, self.app.winfo_width(), 0.0, ypos, -1.0, 1.0)                 glMatrixMode(GL_MODELVIEW)                 glPushMatrix()                 glLoadIdentity()                                  #draw the text box                 maxlen = max([len(p) for p in drawtext])                 box_width = maxlen * char_width                 glDepthFunc(GL_ALWAYS)                 glDepthMask(GL_FALSE)                 glDisable(GL_LIGHTING)                 glEnable(GL_BLEND)                 glEnable(GL_NORMALIZE)                 glBlendFunc(GL_ONE, GL_CONSTANT_ALPHA)                 glColor3f(0,0.2,0) # sets the color of the hud overlay                 glBlendColor(0,0,0,0.5) #rgba, sets the transparency of the overlay using the 'a' value                 glBegin(GL_QUADS)                 glVertex3f(0, ypos, 1) #upper left                 glVertex3f(0, ypos - 2*ymargin - char_height*len(drawtext), 1) #lower left                 glVertex3f(box_width+2*xmargin, ypos - 2*ymargin - char_height*len(drawtext), 1) #lower right                 glVertex3f(box_width+2*xmargin,  ypos , 1) #upper right                 glEnd()                 glDisable(GL_BLEND)                 glEnable(GL_LIGHTING)                                  #fill the box with text                 maxlen = 0                 ypos -= char_height+ymargin                 i=0                 glDisable(GL_LIGHTING)                 glColor3f(1,0.8,0.4) # sets the color of the text in the hud                 for string in drawtext:                         maxlen = max(maxlen, len(string))                         glRasterPos2i(xmargin, int(ypos))                         for char in string:                                 glCallList(self.fontbase + ord(char))                         ypos -= char_height                         i = i + 1                 glDepthFunc(GL_LESS)                 glDepthMask(GL_TRUE)                 glEnable(GL_LIGHTING)                          glPopMatrix()                 glMatrixMode(GL_PROJECTION)                 glPopMatrix()                 glMatrixMode(GL_MODELVIEW)  

Please Log in to join the conversation.

More
3 years 9 months ago #261485 by cmorley
Replied by cmorley on topic Usage of hud in vismach?
(I don't know if you noticed put posting it seems to strip some of the brackets [] from the code.)

I added a function:
def add_pin(self, text, form, pinname):
rather then define the strings at initialization time.
And made the code be able to read any HAL pin rather then just the component pin.
It is a great idea thank you!

Please Log in to join the conversation.

Time to create page: 0.065 seconds
Powered by Kunena Forum