def save(self): f = FileConfig(localFilename=self.config_file) f.SetPath('/html_defaults') f.WriteBool('dark_mode', self.dark_mode) f.WriteBool('show_silkscreen', self.show_silkscreen) f.WriteBool('highlight_pin1', self.highlight_pin1) f.WriteBool('redraw_on_drag', self.redraw_on_drag) f.WriteInt('board_rotation', self.board_rotation) f.Write('checkboxes', self.checkboxes) f.Write('bom_view', self.bom_view) f.Write('layer_view', self.layer_view) f.WriteBool('open_browser', self.open_browser) f.SetPath('/general') bom_dest_dir = self.bom_dest_dir if bom_dest_dir.startswith(self.netlist_initial_directory): bom_dest_dir = os.path.relpath(bom_dest_dir, self.netlist_initial_directory) f.Write('bom_dest_dir', bom_dest_dir) f.Write('component_sort_order', ','.join(self.component_sort_order)) f.Write('component_blacklist', ','.join(self.component_blacklist)) f.WriteBool('blacklist_virtual', self.blacklist_virtual) f.WriteBool('blacklist_empty_val', self.blacklist_empty_val) f.SetPath('/extra_fields') f.Write('extra_fields', ','.join(self.extra_fields)) f.Write('board_variant_field', self.board_variant_field) f.Write('board_variant_whitelist', ','.join(self.board_variant_whitelist)) f.Write('board_variant_blacklist', ','.join(self.board_variant_blacklist)) f.Write('dnp_field', self.dnp_field) f.Flush()
def save(self, locally): file = self.local_config_file if locally else self.global_config_file print('Saving to', file) f = FileConfig(localFilename=file) f.SetPath('/html_defaults') f.WriteBool('dark_mode', self.dark_mode) f.WriteBool('show_pads', self.show_pads) f.WriteBool('show_fabrication', self.show_fabrication) f.WriteBool('show_silkscreen', self.show_silkscreen) f.WriteBool('highlight_pin1', self.highlight_pin1) f.WriteBool('redraw_on_drag', self.redraw_on_drag) f.WriteInt('board_rotation', self.board_rotation) f.Write('checkboxes', self.checkboxes) f.Write('bom_view', self.bom_view) f.Write('layer_view', self.layer_view) f.WriteBool('compression', self.compression) f.WriteBool('open_browser', self.open_browser) f.SetPath('/general') bom_dest_dir = self.bom_dest_dir if bom_dest_dir.startswith(self.netlist_initial_directory): bom_dest_dir = os.path.relpath( bom_dest_dir, self.netlist_initial_directory) f.Write('bom_dest_dir', bom_dest_dir) f.Write('bom_name_format', self.bom_name_format) f.Write('component_sort_order', ','.join(self.component_sort_order)) f.Write('component_blacklist', ','.join(self.component_blacklist)) f.WriteBool('blacklist_virtual', self.blacklist_virtual) f.WriteBool('blacklist_empty_val', self.blacklist_empty_val) f.WriteBool('include_tracks', self.include_tracks) f.WriteBool('include_nets', self.include_nets) f.SetPath('/fields') f.Write('show_fields', self._join(self.show_fields)) f.Write('group_fields', self._join(self.group_fields)) f.WriteBool('normalize_field_case', self.normalize_field_case) f.Write('board_variant_field', self.board_variant_field) f.Write('board_variant_whitelist', self._join(self.board_variant_whitelist)) f.Write('board_variant_blacklist', self._join(self.board_variant_blacklist)) f.Write('dnp_field', self.dnp_field) f.Flush()
def save(self): f = FileConfig(localFilename=self.config_file) f.SetPath('/general') output_dest_dir = self.output_dest_dir if output_dest_dir.startswith(self.rel_directory): output_dest_dir = os.path.relpath(output_dest_dir, self.rel_directory) f.Write('output_dest_dir', output_dest_dir) f.Write('output_name_format', self.output_name_format) f.SetPath("/layers") for index in range(len(self.layers)): l = self.layers[index] f.WriteBool(f'layer{l.id}_enabled', l.enabled) f.Write(f'layer{l.id}_ext', l.ext) f.Flush()
def save(self): f = FileConfig(localFilename=self.config_file) f.SetPath('/general') gcode_dest_dir = self.gcode_dest_dir if gcode_dest_dir.startswith(self.netlist_initial_directory): gcode_dest_dir = os.path.relpath(gcode_dest_dir, self.netlist_initial_directory) f.Write('gcode_dest_dir', gcode_dest_dir) f.Write('gcode_name_format', self.gcode_name_format) f.Write('laser_x_width', str(self.laser_x_width)) f.Write('laser_y_width', str(self.laser_y_width)) f.Write('laser_pad_passes', str(self.laser_pad_passes)) f.Write('laser_pad_intensity', str(self.laser_pad_intensity)) f.Write('laser_border_intensity', str(self.laser_border_intensity)) f.Write('laser_speed', str(self.laser_speed)) f.Write('laser_border_speed', str(self.laser_border_speed)) f.Write('component_blacklist', ','.join(self.component_blacklist)) f.WriteBool('blacklist_virtual', self.blacklist_virtual) f.WriteBool('blacklist_empty_val', self.blacklist_empty_val) f.Flush()
class KiBuzzardPlugin(pcbnew.ActionPlugin, object): config_file = os.path.join(os.path.dirname(__file__), '..', 'config.ini') buzzard_path = os.path.join(os.path.dirname(__file__), '..', 'deps', 'buzzard') def __init__(self): super(KiBuzzardPlugin, self).__init__() self.name = "Create Labels" self.category = "Modify PCB" self.pcbnew_icon_support = hasattr(self, "show_toolbar_button") self.show_toolbar_button = True icon_dir = os.path.dirname(os.path.dirname(__file__)) self.icon_file_name = os.path.join(icon_dir, 'icon.png') self.description = "Create Labels" self.config = FileConfig(localFilename=self.config_file) self._pcbnew_frame = None def defaults(self): pass def Run(self): buzzard_script = os.path.join(self.buzzard_path, 'buzzard.py') if self._pcbnew_frame is None: self._pcbnew_frame = [ x for x in wx.GetTopLevelWindows() if 'pcbnew' in x.GetTitle().lower() and not 'python' in x.GetTitle().lower() ][0] def run_buzzard(str): import re str = str + ' -o ki -stdout' args = [a.strip('"') for a in re.findall('".+?"|\S+', str)] if sys.platform.startswith('win'): args = [re.sub('([<>])', r'^\1', a) for a in args] # escape '<' or '>' with a caret, '^<' # Execute Buzzard process = None if sys.platform.startswith('linux') or sys.platform == 'darwin': process = subprocess.Popen(['python3', buzzard_script] + args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) else: process = subprocess.Popen( ['C:\\Python38\\python.exe', buzzard_script] + args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) stdout, stderr = process.communicate() if stderr: wx.MessageBox(stderr, 'Error', wx.OK | wx.ICON_ERROR) # check for errors error_line = [ s for s in stderr.decode('utf8').split('\n') if 'error' in s ] if len(error_line) > 0: wx.MessageBox(error_line[0], 'Error', wx.OK | wx.ICON_ERROR) else: # Copy footprint into clipboard if sys.platform.startswith('linux'): clip_args = ['xclip', '-sel', 'clip', '-noutf8'] elif sys.platform == 'darwin': clip_args = ['pbcopy'] else: clip_args = ['clip.exe'] process = subprocess.Popen(clip_args, stdin=subprocess.PIPE) process.communicate(stdout) dlg.EndModal(wx.ID_OK) dlg = Dialog(self._pcbnew_frame, self.config, self.buzzard_path, run_buzzard) try: if dlg.ShowModal() == wx.ID_OK: # Set focus to main window and execute a Paste operation self._pcbnew_frame.Raise() wx.Yield() keyinput = wx.UIActionSimulator() keyinput.Char(ord("V"), wx.MOD_CONTROL) finally: self.config.Flush() dlg.Destroy()
def save(self): f = FileConfig(localFilename=self.config_file) f.Flush()