What does canon do?

More
2 years 4 months ago #302375 by JT
What does canon do? was created by JT
I see canon passed in several places in code like
Code:
lib/python/qt5_graphics.py:392:            result, seq = self.load_preview(filename, canon, unitcode, initcode)

The whole function
Code:
    def load(self,filename = None):         s = self.stat         s.poll()         if not filename and s.file:             filename = s.file         elif not filename and not s.file:             return         lines = open(filename).readlines()         progress = Progress(2, len(lines))         # monkey patch function to call ours         progress.emit_percent = self.emit_percent         code = []         i = 0         for i, l in enumerate(lines):             l = l.expandtabs().replace("\r", "")             code.extend(["%6d: " % (i+1), "lineno", l, ""])             if i % 1000 == 0:                 del code[:]                 progress.update(i)         if code:             pass         progress.nextphase(len(lines))         td = tempfile.mkdtemp()         self._current_file = filename         try:             random = int(self.inifile.find("EMCIO", "RANDOM_TOOLCHANGER") or 0)             arcdivision = int(self.inifile.find("DISPLAY", "ARCDIVISION") or 64)             text = ''             canon = StatCanon(self.colors,                                 self.get_geometry(),                                 self.foam_option,                                 self.lathe_option,                                 s, text, random, i,                                 progress, arcdivision)             # monkey patched function to call ours             canon.output_notify_message = self.output_notify_message             parameter = self.inifile.find("RS274NGC", "PARAMETER_FILE")             temp_parameter = os.path.join(td, os.path.basename(parameter or "linuxcnc.var"))             if parameter:                 shutil.copy(parameter, temp_parameter)             canon.parameter_file = temp_parameter             unitcode = "G%d" % (20 + (s.linear_units == 1))             initcode = self.inifile.find("RS274NGC", "RS274NGC_STARTUP_CODE") or ""             result, seq = self.load_preview(filename, canon, unitcode, initcode)             if result > gcode.MIN_ERROR:                 self.report_gcode_error(result, seq, filename)             self.logger.set_depth(self.from_internal_linear_unit(self.get_foam_z()),                        self.from_internal_linear_unit(self.get_foam_w()))             self.calculate_gcode_properties(canon)         except Exception as e:             print (e)             self.gcode_properties = None         finally:             shutil.rmtree(td)             if canon:                 canon.progress = DummyProgress()             try:                 progress.done()             except UnboundLocalError:                 pass         self._redraw()
Code:
class StatCanon(glcanon.GLCanon, interpret.StatMixin):     def __init__(self, colors, geometry, is_foam, lathe_view_option, stat, random, text, linecount, progress, arcdivision):         glcanon.GLCanon.__init__(self, colors, geometry, is_foam)         interpret.StatMixin.__init__(self, stat, random)         self.lathe_view_option = lathe_view_option         self.text = text         self.linecount = linecount         self.progress = progress         self.aborted = False         self.arcdivision = arcdivision     def is_lathe(self): return self.lathe_view_option     def change_tool(self, pocket):         glcanon.GLCanon.change_tool(self,pocket)         interpret.StatMixin.change_tool(self,pocket)     # not sure if this is used - copied from AXIS code     def do_cancel(self, event):         self.aborted = True     # not sure if this is used - copied from AXIS code     def check_abort(self):         #root_window.update()         if self.aborted: raise KeyboardInterrupt     def next_line(self, st):         glcanon.GLCanon.next_line(self, st)         self.progress.update(self.lineno)         if self.notify:             self.output_notify_message(self.notify_message)             self.notify = 0     # this is class patched     # output the text from the magic comment eg: (PREVIEW,notify,The text)     def output_notify_message(self, message):         pass

Just trying to understand what's doing what and why.

JT
 

Please Log in to join the conversation.

More
2 years 4 months ago #302464 by Aciera
Replied by Aciera on topic What does canon do?
I think 'canon' here points to the current instance of StatCanon (not sure if that is the correct terminology though).
This is line 322 'lib/python/gremlin.py':
canon = StatCanon(self.colors, self.get_geometry(),self.lathe_option, s, random)

and this is line 80:
Code:
class StatCanon(rs274.glcanon.GLCanon, rs274.interpret.StatMixin): def __init__(self, colors, geometry, lathe_view_option, stat, random): rs274.glcanon.GLCanon.__init__(self, colors, geometry) rs274.interpret.StatMixin.__init__(self, stat, random) self.progress = DummyProgress() self.lathe_view_option = lathe_view_option def is_lathe(self): return self.lathe_view_option def change_tool(self, pocket): rs274.glcanon.GLCanon.change_tool(self,pocket) rs274.interpret.StatMixin.change_tool(self,pocket)

 

Please Log in to join the conversation.

More
2 years 4 months ago #302480 by JT
Replied by JT on topic What does canon do?
Yes, I know canon = StatCanon(...) but what does StatCanon do?

JT

Please Log in to join the conversation.

More
2 years 4 months ago #302498 by MennilTossFlykune
canon is used to call Python functions from C++

Please Log in to join the conversation.

More
2 years 4 months ago #302500 by tommylight
Replied by tommylight on topic What does canon do?
I might be off, but GLcanon is part of LinuxCNC, the python part that probably deals with OpenGL, and it is mentioned several times on your code above, and i am sure there is a file named glcanon.py included with LinuxCNC, so maybe having a look there sheds some light ... or turns out to be a deep rabbit hole ! :)

Please Log in to join the conversation.

More
2 years 4 months ago #302528 by Aciera
Replied by Aciera on topic What does canon do?

Yes, I know canon = StatCanon(...) but what does StatCanon do?


Well, I'm certainly not the python expert but if we follow the trail then it seems to initialize these two classes which can be found in /lib/python/rs274/glcanon.py and /lib/python/rs274/interpret.py
Code:
rs274.glcanon.GLCanon.__init__(self, colors, geometry) rs274.interpret.StatMixin.__init__(self, stat, random)
Which are used to set up the preview window depending on the geometry of the config and also (I guess) the tool preview. As for the more intricate details of the code, I'm probably not the right person to answer. 

Please Log in to join the conversation.

More
2 years 4 months ago #302529 by JT
Replied by JT on topic What does canon do?
It's a very deep and cornfusing rabbit hole for sure.

It looks to me that all the graphics previews are a copy of what Axis has with some variations.

JT

Please Log in to join the conversation.

More
2 years 4 months ago #302530 by Aciera
Replied by Aciera on topic What does canon do?

It looks to me that all the graphics previews are a copy of what Axis has with some variations.

Yes, with the exeption of 'Probe Basic'.
forum.linuxcnc.org/qtpyvcp/52562-preview...-program-path#300022

Please Log in to join the conversation.

More
2 years 4 months ago #302605 by tommylight
Replied by tommylight on topic What does canon do?
I think Probe Basic uses VTK for preview, from reading here as it was mentioned in regards to RPI not having VTK support, and i recall something was done to make it work.
Me not helping ... :)

Please Log in to join the conversation.

More
2 years 4 months ago #302619 by JT
Replied by JT on topic What does canon do?
I worked for a while on QtPyVCP and the VTK plotter.

JT

Please Log in to join the conversation.

Time to create page: 0.204 seconds
Powered by Kunena Forum