From bdd7ea4684356d409dc3403b04512faefec36597 Mon Sep 17 00:00:00 2001 From: "Morgan 'ARR\\!' Allen" Date: Thu, 10 Jul 2025 11:41:33 -0700 Subject: [PATCH] migrate Board creation from Project > API. Project will be either removed or converted to PythonFeature if proper App::Part emulation can be firgured out. --- freecad/kiconnect/api.py | 22 +++++++++++++++++++++- freecad/kiconnect/project.py | 11 ----------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/freecad/kiconnect/api.py b/freecad/kiconnect/api.py index 308b149..8f24fdf 100644 --- a/freecad/kiconnect/api.py +++ b/freecad/kiconnect/api.py @@ -5,12 +5,14 @@ from kipy import KiCad from kipy.proto.common.types import DocumentType from . import settings +from . import board as Board from .bases import BaseObject, BaseViewProvider class APIObject(BaseObject): TYPE = 'KiConnect::API' def __init__(self, feature): + self.boards = {} self.kicad = KiCad() super(APIObject, self).__init__(feature) @@ -23,19 +25,32 @@ class APIObject(BaseObject): self.ping_connection(feature) + self.kicad_board = self.kicad.get_board() + self.polygons = Board.extract_polygons(self.kicad_board) + + for polygon in self.polygons: + board, polygon_id = Board.makeBoard(self.feature.getParent(), self.kicad_board, polygon) + self.boards[polygon_id] = board + def onDocumentRestored(self, feature): super(APIObject, self).onDocumentRestored(feature) self.kicad = KiCad() self.ping_connection(feature) + if self.is_connected: + self.kicad_board = self.kicad.get_board() + self.polygons = Board.extract_polygons(self.kicad_board) + + parent = feature.getParent() if not parent: return + ''' # XXX This gets all of the KiConnect::Board features but then does nothing with them # future multi-board support? boards = [ board for board in parent.Group if hasattr(board, 'Type') and board.Type == 'KiConnect::Board' ] - + ''' @property def is_connected(self): @@ -45,6 +60,11 @@ class APIObject(BaseObject): return self.feature.Connected + def get_polygon(self, polygon_id): + for p in self.polygons: + if p.id.value == polygon_id: + return p + def ping_connection(self, feature): ''' Ping the KiCAD API to determine if it's connected diff --git a/freecad/kiconnect/project.py b/freecad/kiconnect/project.py index 5050c62..838a1f5 100644 --- a/freecad/kiconnect/project.py +++ b/freecad/kiconnect/project.py @@ -28,17 +28,6 @@ class Project: self.API = api.makeAPI(self.feature) - if self.API.Proxy.is_connected and self.API.DocumentCount > 0: - kicad_board = self.API.Proxy.kicad.get_board() - - polygons = Board.extract_polygons(kicad_board) - - for polygon in polygons: - self.board = Board.makeBoard(self.feature, kicad_board, polygon) - - #self.copper = Copper(kicad_board, self.board) - #self.board.feature.addObject(self.copper.feature) - feature.ProcessTime = time.time() - start_time App.ActiveDocument.recompute()