[v6/v7 Schematic] Better handling of sub-sheet instances
- When a sub-sheet is the root of another hierarchy. - We no longer discard the instances, unless expanding the hierarchy - Also another step to separate the cross and hierarchy expansion
This commit is contained in:
parent
42445e8294
commit
4992937cf5
|
|
@ -1132,8 +1132,8 @@ class SchematicComponentV6(SchematicComponent):
|
||||||
v6_ins.path = os.path.join('/', '/'.join(ins.path.split('/')[2:]), comp.uuid_ori)
|
v6_ins.path = os.path.join('/', '/'.join(ins.path.split('/')[2:]), comp.uuid_ori)
|
||||||
v6_ins.reference = ins.reference
|
v6_ins.reference = ins.reference
|
||||||
v6_ins.unit = ins.unit
|
v6_ins.unit = ins.unit
|
||||||
# Add to the root symbol_instances, so we reconstruct it
|
# Add to the root symbol_instances, so we reconstruct it (like in a v6 file)
|
||||||
parent.symbol_instances.append(v6_ins)
|
parent.root_sheet.symbol_instances.append(v6_ins)
|
||||||
else:
|
else:
|
||||||
raise SchError('Unknown component attribute `{}`'.format(i))
|
raise SchError('Unknown component attribute `{}`'.format(i))
|
||||||
if not lib_id_found or not at_found:
|
if not lib_id_found or not at_found:
|
||||||
|
|
@ -1848,12 +1848,10 @@ class SchematicV6(Schematic):
|
||||||
data.extend([s.write(cross), Sep()])
|
data.extend([s.write(cross), Sep()])
|
||||||
return [Sep(), Sep(), _symbol('lib_symbols', data), Sep()]
|
return [Sep(), Sep(), _symbol('lib_symbols', data), Sep()]
|
||||||
|
|
||||||
def save(self, fname=None, dest_dir=None, base_sheet=None, saved=None):
|
def save(self, fname=None, dest_dir=None, base_sheet=None, saved=None, cross=False, exp_hierarchy=False):
|
||||||
# Switch to the current version
|
# Switch to the current version
|
||||||
global version
|
global version
|
||||||
version = self.version
|
version = self.version
|
||||||
cross = dest_dir is not None
|
|
||||||
# cross = False
|
|
||||||
if base_sheet is None:
|
if base_sheet is None:
|
||||||
# We are the base sheet
|
# We are the base sheet
|
||||||
base_sheet = self
|
base_sheet = self
|
||||||
|
|
@ -1928,21 +1926,22 @@ class SchematicV6(Schematic):
|
||||||
# Net Class Flags
|
# Net Class Flags
|
||||||
_add_items(self.net_class_flags, sch)
|
_add_items(self.net_class_flags, sch)
|
||||||
# Symbols
|
# Symbols
|
||||||
_add_items(self.symbols, sch, sep=True, cross=cross, exp_hierarchy=cross)
|
_add_items(self.symbols, sch, sep=True, cross=cross, exp_hierarchy=exp_hierarchy)
|
||||||
# Sheets
|
# Sheets
|
||||||
_add_items(self.sheets, sch, sep=True, exp_hierarchy=cross)
|
_add_items(self.sheets, sch, sep=True, exp_hierarchy=exp_hierarchy)
|
||||||
# Sheet instances
|
# Sheet instances
|
||||||
instances = self.sheet_instances
|
instances = self.sheet_instances
|
||||||
if cross:
|
if exp_hierarchy and base_sheet == self:
|
||||||
# We are saving a expanded hierarchy, so we must fix the instances
|
# We are saving a expanded hierarchy, so we must fix the root page instances
|
||||||
instances = deepcopy(self.sheet_instances)
|
instances = deepcopy(self.sheet_instances)
|
||||||
for ins in instances:
|
for ins in instances:
|
||||||
ins.path = self.sheet_paths[ins.path].sheet_path
|
ins.path = self.sheet_paths[ins.path].sheet_path
|
||||||
_add_items_list('sheet_instances', instances, sch)
|
if base_sheet == self or not exp_hierarchy:
|
||||||
|
_add_items_list('sheet_instances', instances, sch)
|
||||||
# Symbol instances
|
# Symbol instances
|
||||||
if version < KICAD_7_VER and base_sheet == self:
|
if version < KICAD_7_VER:
|
||||||
instances = self.symbol_instances
|
instances = self.symbol_instances
|
||||||
if cross:
|
if exp_hierarchy and base_sheet == self:
|
||||||
# We are saving a expanded hierarchy, so we must fix the instances
|
# We are saving a expanded hierarchy, so we must fix the instances
|
||||||
instances = deepcopy(self.symbol_instances)
|
instances = deepcopy(self.symbol_instances)
|
||||||
for s in instances:
|
for s in instances:
|
||||||
|
|
@ -1951,7 +1950,8 @@ class SchematicV6(Schematic):
|
||||||
# UUID changed to make it different
|
# UUID changed to make it different
|
||||||
# s.path = os.path.join(os.path.dirname(s.path), c.uuid)
|
# s.path = os.path.join(os.path.dirname(s.path), c.uuid)
|
||||||
s.path = os.path.join(c.path, c.uuid)
|
s.path = os.path.join(c.path, c.uuid)
|
||||||
_add_items_list('symbol_instances', instances, sch)
|
if base_sheet == self or not exp_hierarchy:
|
||||||
|
_add_items_list('symbol_instances', instances, sch)
|
||||||
logger.debug('Saving schematic: `{}`'.format(fname))
|
logger.debug('Saving schematic: `{}`'.format(fname))
|
||||||
# Keep a back-up of existing files
|
# Keep a back-up of existing files
|
||||||
if os.path.isfile(fname):
|
if os.path.isfile(fname):
|
||||||
|
|
@ -1963,13 +1963,19 @@ class SchematicV6(Schematic):
|
||||||
saved.add(fname)
|
saved.add(fname)
|
||||||
for sch in self.sheets:
|
for sch in self.sheets:
|
||||||
if sch.sch:
|
if sch.sch:
|
||||||
sch.sch.save(sch.flat_file if cross else sch.file, dest_dir, base_sheet, saved)
|
sch.sch.save(sch.flat_file if exp_hierarchy else sch.file, dest_dir, base_sheet, saved, cross=cross,
|
||||||
|
exp_hierarchy=exp_hierarchy)
|
||||||
|
|
||||||
def save_variant(self, dest_dir):
|
def save_variant(self, dest_dir):
|
||||||
fname = os.path.basename(self.fname)
|
fname = os.path.basename(self.fname)
|
||||||
self.save(fname, dest_dir)
|
self.save(fname, dest_dir, cross=True, exp_hierarchy=self.check_exp_hierarchy())
|
||||||
return fname
|
return fname
|
||||||
|
|
||||||
|
def check_exp_hierarchy(self):
|
||||||
|
""" Check if we really need to expand the hierarchy """
|
||||||
|
# KiCad v6: we can change the value and footprint, but won't work when imported by v7
|
||||||
|
return True
|
||||||
|
|
||||||
def _create_flat_name(self, sch):
|
def _create_flat_name(self, sch):
|
||||||
""" Create a unique name that doesn't contain subdirs.
|
""" Create a unique name that doesn't contain subdirs.
|
||||||
Is used to save a variant, where we avoid sharing instance data """
|
Is used to save a variant, where we avoid sharing instance data """
|
||||||
|
|
@ -2028,7 +2034,6 @@ class SchematicV6(Schematic):
|
||||||
self.sheet_names = {}
|
self.sheet_names = {}
|
||||||
self.all_sheets = []
|
self.all_sheets = []
|
||||||
self.root_sheet = self
|
self.root_sheet = self
|
||||||
self.symbol_instances = []
|
|
||||||
UUID_Validator.reset()
|
UUID_Validator.reset()
|
||||||
else:
|
else:
|
||||||
self.fields = parent.fields
|
self.fields = parent.fields
|
||||||
|
|
@ -2039,7 +2044,7 @@ class SchematicV6(Schematic):
|
||||||
self.sheet_names = parent.sheet_names
|
self.sheet_names = parent.sheet_names
|
||||||
self.all_sheets = parent.all_sheets
|
self.all_sheets = parent.all_sheets
|
||||||
self.root_sheet = parent.root_sheet
|
self.root_sheet = parent.root_sheet
|
||||||
self.symbol_instances = parent.symbol_instances
|
self.symbol_instances = []
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.fname = fname
|
self.fname = fname
|
||||||
self.project = project
|
self.project = project
|
||||||
|
|
|
||||||
|
|
@ -190,7 +190,7 @@
|
||||||
(symbol (lib_id "Device:C") (at 115.57 72.39 0) (unit 1)
|
(symbol (lib_id "Device:C") (at 115.57 72.39 0) (unit 1)
|
||||||
(in_bom yes) (on_board yes) (fields_autoplaced)
|
(in_bom yes) (on_board yes) (fields_autoplaced)
|
||||||
(uuid 3316c32a-0fe0-447f-ad05-e8a774318855)
|
(uuid 3316c32a-0fe0-447f-ad05-e8a774318855)
|
||||||
(property "Reference" "C1" (id 0) (at 119.38 71.1199 0)
|
(property "Reference" "C10" (id 0) (at 119.38 71.1199 0)
|
||||||
(effects (font (size 1.27 1.27)) (justify left))
|
(effects (font (size 1.27 1.27)) (justify left))
|
||||||
)
|
)
|
||||||
(property "Value" "150p" (id 1) (at 119.38 73.6599 0)
|
(property "Value" "150p" (id 1) (at 119.38 73.6599 0)
|
||||||
|
|
@ -209,7 +209,7 @@
|
||||||
(symbol (lib_id "Device:R") (at 100.33 63.5 90) (unit 1)
|
(symbol (lib_id "Device:R") (at 100.33 63.5 90) (unit 1)
|
||||||
(in_bom yes) (on_board yes)
|
(in_bom yes) (on_board yes)
|
||||||
(uuid 6e279b82-cec2-44a1-9e20-451a25fb9868)
|
(uuid 6e279b82-cec2-44a1-9e20-451a25fb9868)
|
||||||
(property "Reference" "R1" (id 0) (at 100.33 58.42 90))
|
(property "Reference" "R10" (id 0) (at 100.33 58.42 90))
|
||||||
(property "Value" "100k" (id 1) (at 100.33 60.96 90))
|
(property "Value" "100k" (id 1) (at 100.33 60.96 90))
|
||||||
(property "Footprint" "" (id 2) (at 100.33 65.278 90)
|
(property "Footprint" "" (id 2) (at 100.33 65.278 90)
|
||||||
(effects (font (size 1.27 1.27)) hide)
|
(effects (font (size 1.27 1.27)) hide)
|
||||||
|
|
|
||||||
|
|
@ -47,4 +47,31 @@
|
||||||
(uuid a3235e0d-ce4e-481b-a10d-8cd5307d4186)
|
(uuid a3235e0d-ce4e-481b-a10d-8cd5307d4186)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
(sheet_instances
|
||||||
|
(path "/" (page "1"))
|
||||||
|
(path "/1a520d7d-3ba5-4c74-a100-97625e355b42" (page "2"))
|
||||||
|
(path "/ceaaef34-04ea-407a-8f1a-90d1b353a084" (page "3"))
|
||||||
|
)
|
||||||
|
|
||||||
|
(symbol_instances
|
||||||
|
(path "/1a520d7d-3ba5-4c74-a100-97625e355b42/2008b722-6f66-498d-8afb-79e172fe202d"
|
||||||
|
(reference "#PWR?") (unit 1) (value "GND") (footprint "")
|
||||||
|
)
|
||||||
|
(path "/ceaaef34-04ea-407a-8f1a-90d1b353a084/2008b722-6f66-498d-8afb-79e172fe202d"
|
||||||
|
(reference "#PWR?") (unit 1) (value "GND") (footprint "")
|
||||||
|
)
|
||||||
|
(path "/1a520d7d-3ba5-4c74-a100-97625e355b42/3316c32a-0fe0-447f-ad05-e8a774318855"
|
||||||
|
(reference "C10") (unit 1) (value "150p") (footprint "")
|
||||||
|
)
|
||||||
|
(path "/ceaaef34-04ea-407a-8f1a-90d1b353a084/3316c32a-0fe0-447f-ad05-e8a774318855"
|
||||||
|
(reference "C11") (unit 1) (value "150p") (footprint "")
|
||||||
|
)
|
||||||
|
(path "/1a520d7d-3ba5-4c74-a100-97625e355b42/6e279b82-cec2-44a1-9e20-451a25fb9868"
|
||||||
|
(reference "R10") (unit 1) (value "100k") (footprint "")
|
||||||
|
)
|
||||||
|
(path "/ceaaef34-04ea-407a-8f1a-90d1b353a084/6e279b82-cec2-44a1-9e20-451a25fb9868"
|
||||||
|
(reference "R11") (unit 1) (value "100k") (footprint "")
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue