From: Plom Heller Date: Sun, 2 Aug 2026 19:16:51 +0000 (+0200) Subject: Add --ldraw=fill_n_studs mode. X-Git-Url: https://plomlompom.com/repos/%22https:/validator.w3.org/templates?a=commitdiff_plain;h=e2f437a7a1fd81001ebdfefb4480ee02ead44add;p=bricksplom Add --ldraw=fill_n_studs mode. --- diff --git a/bricksplom.py b/bricksplom.py index 6fd40af..b12064c 100755 --- a/bricksplom.py +++ b/bricksplom.py @@ -50,12 +50,14 @@ PARAM_Q_DELIMITERS = {CHAR_ATTR_EQ, CHAR_TEXTCONTAINS} TOK_SORT_BOX = 'box' TOK_SORT_ID = 'id' +LDRAW_MODE_FILL_N_STUDS = 'fill_n_studs' LDRAW_MODE_FILL_PATHS = 'fill_paths' -LDRAW_MODE_VERIFY_PATHS = 'verify_paths' LDRAW_MODE_VERIFY_N_STUDS = 'verify_n_studs' -LDRAW_MODES = {LDRAW_MODE_FILL_PATHS, - LDRAW_MODE_VERIFY_PATHS, - LDRAW_MODE_VERIFY_N_STUDS} +LDRAW_MODE_VERIFY_PATHS = 'verify_paths' +LDRAW_MODES = {LDRAW_MODE_FILL_N_STUDS, + LDRAW_MODE_FILL_PATHS, + LDRAW_MODE_VERIFY_N_STUDS, + LDRAW_MODE_VERIFY_PATHS} ATTR_DESCS: dict[str, str] = { 'n_studs': 'number of studs', @@ -706,6 +708,12 @@ class BricksDb: assert design.direct_attrs is not None design.direct_attrs.ldraw = filename self._check_consistencies() + if LDRAW_MODE_FILL_N_STUDS in self._ldraw_modes: + for design in [d for d in self._designs_ldrawed() + if d.n_studs != 1]: + assert design.direct_attrs is not None + design.direct_attrs.n_studs\ + = self._ldraw_studs_count(design.ldraw) @property def boxes( @@ -719,6 +727,13 @@ class BricksDb: collected[box_id] = Box(box_id, bricks_set, db=self) return collected + def _designs_ldrawed( + self + ) -> tuple[BrickDesign, ...]: + return tuple(design for design in self.designs.values() + if (not design.alternate_to) + and design.ldraw and design.ldraw != '!') + def _ldraw_studs_count( self, filename: str @@ -790,10 +805,7 @@ class BricksDb: if v != 0]: fails += [f'invalid count for brick of ID: {brick_id} ({count})'] - for design in [ - design for design in self.designs.values() - if (not design.alternate_to) - and design.ldraw and design.ldraw != '!']: + for design in self._designs_ldrawed(): # hunt for dangling Design.ldraw references if LDRAW_MODE_VERIFY_PATHS in self._ldraw_modes: if not self._path_ldraw.joinpath(design.ldraw).exists():