LeroyProtoLIB — корпус, цоколь, параметры прототипа и статус порта¶
Раздел 3 документации LeroyProtoLIB (см.
01-families-map.md). Составлен агентом-аналитиком 2026-07-24, проверка — по ссылкам файл:строка. Порт:packages/arline-geometry(Model) иProto/SParamProtoLib(Controller + рендерер K3).
1. Классы корпуса и ниш (shell.py)¶
Иерархия базовых типов:
RSH— базовый класс параметров (данные),entityes/rsh_common.py:81. Свойствоh_dspчитает толщину материала из номенклатуры (:99-101).RSH_Complect— комплекс умолчаний крепежа,entityes/rsh_common.py:17.propbuilder(rsh, rsid)(:50-79) заполняетfix_mf/fix_konf/fix_sk/fix_vb/fix_vbp/fix_vb_ds/fix_vb_skvz/fix_eck/ fix_eckmet/fix_pin/acc_hex_key/acc_instruction/fix_backwall_midwallиз справочника сборочных изделий (priceinfo(..., tableid=2)), дефолты-константы goods-id в теле класса (:36-48).RSH_Slot— параметры пропила под заднюю стенку,rsh_common.py:12-15:_depthbp=16,_h_dvp=4(толщина ДВП),_incutbp=7(глубина пропила).BasedShellPanel— базовая деталь-панель,based_shell_panel.py:19. ДержитPanel.Panel(), методыput_position_and_forma(:110),put_fix_panel/fix_panel_adapter(:122),change_fix(:170), классовые адаптерыset_gab_panel_adapter/set_symmetry_position_adapter/set_fix_panel_adapter.
Корпуса (наследуют Shell(uFurnObject.FurnObject), shell.py:1200):
ShellMINI:1208,ShellDUO:1959(«Шкаф Купе»),ShellTRIO:3096.ShellPivotMono:6353,ShellPivotDuo:7029,ShellPivotDuoThree:7861,ShellPivotTrio:8811— распашные (pivot), используютсяcab_*.- Параметры:
RSH_ShellPivot:281(params_adapter:430),RSH_ShellCupe:582.
Каждый Shell — набор классметодов-«адаптеров», которые передаются деталям:
gab_panel_adapter, symmetry_pan_position_adapter, gab_niche_adapter/
symmetry_niche_position_adapter, fix_panel_adapter, nleggs_adapter/
nfixpin_adapter/backwal_width_adapter.
Как ShellPivotMono.Make (:6843) строит корпус¶
Порядок (:6862-6966):
- Подставляет адаптеры в
BasedShellPanelиBackWallsMaxsize(:6847-6858),AddFixPin.set_nfixpin_adapter. - Боковины:
SideLeft.factory(commonpos=1),SideRight.factory(cp=2) —:6862-6867. - Крыша/дно:
SideTop.factory(cp=3),SideDown.factory(cp=4) —:6870-6871. - Жёсткие полки
SideHorisLarge(верх/низ, cp=6) —:6874-6879; царгиWallStrong(cp=7) —:6882-6887. - Задняя стенка:
BackWallsMaxsize.factory(services.py, режет ≤600), cp=8 —:6890. - Гвозди ЗС:
AddFixPin.factory,:6895; ключAccHexKey, инструкцияAccInstruction. put_position_and_formaкаждой панели. Крыша/дно:SetCutsCustom(B=h_dsp, C=h_dsp)— подрез торцов под боковины (:6908-6915).- Навесы
make_naves(:6958). - Цоколь при
h_cok>0:ShellSocle.factory(socle_inst=self, is_konf=False)(:6962-6964).
КТО ставит пропилы под заднюю стенку и крепёж¶
- Пазы под ЗС ставит САМА деталь-боковина в
factory:SideLeft.factory(details.py:342-357),SideRight.factory(details.py:383-398) —Panel.Slot(); slot.SetSlot(..., PANELSIDE_D, SLOTTYPE_THROUGH, cps=slotpars._depthbp(16), cpd=slotpars._incutbp(7), cpw=slotpars._h_dvp(4), map_=MAP_D); panel.AddSlot(slot). Сквозной паз D16[4×7] под ДВП — изslotpars(RSH_Slot). - Подрезы торцов: корпус в
MakeчерезSetCutsCustom(крыша/дноB/C=h_dsp, цокольD/E=h_dsp). - Крепёж на панелях:
fix_panel_adapterкорпуса (примерShellDUO.fix_panel_adapter,shell.py:2781-2816):SideTop/SideDown—fix_vb_skvzпо B/C;SideIntWall—fix_vb_ds+fix_backwall_midwallпо D. Механизм:paninst.change_fix(d, zdown, usespot)→Panel.Fixline().SetCommon(side, goods_id). УShellPivotMono.Makeадаптер крепежа выключен (set_fix_panel_adapter(None),:6851) — крепёж по стыкам добавляется черезmake_navesи умолчания панелей. - Крепёж ЗС — гвозди:
AddFixPin(entityes/addcomponents.py:130,factory:161) →Accessory_user.Fixer(acc_id=fix_pin); число —nfixpin_adapterкорпуса.
Цоколь¶
RSH_Socle:63(params_adapter:91):_w/_h/_d/_sokletype,RSH_Complect.propbuilder, резолвprmater/bandtypereal/id_leg/id_fetr_leg,dbsetvar("prmater"/"band").Socle(FurnObject):860→ShellSocle(Socle):947:Make:1065: поsokletype→make_sokle_commode(:1106) илиmake_sokle_shoemaker(:1087).make_sokle_commode: планкиSideLining.factory(BACK/FRONT, cp=5), боковыеSideLiningP(LEFT/RIGHT, cp=6, только приwidth>899,:1144), опорыAccLeggs. Планки:SetCutsCustom(D=h_dsp,E=h_dsp).make_sokle_shoemaker: скрытая планкаSideLiningHid+ опоры.validate_cokle_height:1047— 0 → нет цоколя; 1-39 → недопустимо (правится); ≥40 — как есть.factory(socle_inst, is_konf):1149: наследуетwidth/depth/h_cokот корпуса; приis_konf=Falseкрепёж цоколя =fix_mfкорпуса.
Ниши и наполнения (наследуют Niche(FurnObject) :4419)¶
Niche базовый: SetGabs/GetGabs, адаптеры (из Shell через set_*),
put_position_and_forma :4518, count :4529.
NicheVesh:4544— торцевое (выдвижное) вешало,Make:4586.NicheVeshProd:4748— продольная штанга,Make:4781: тянет K3-прототипrack_long.RackизP_niche_vesh_prod.py, при широкой нише — средний держатель.NicheBRHolder:4657,NichePantograf:4841(make_pantograf),NicheSideBruckHolder:4939(брючница,make_holder).Niche_shelves:5035— равномерные съёмные полки.Make:5141:get_zpos_shelves()(:5119) даёт Z-позиции; каждая полкаshelf_class.factory→SetGabs(width, depth),SetPosition(0,0,z),ClosedInterval,put_fix_panel.SetZPosShelves:5100— ручные позиции.factory:5167.Niche_Box:5214/Niche_Box_Pivot:5406— блок ящиков.Niche_Box_Pivot.Make:5496:make_block_panels(:5517) — рама (стойка+фальшпанель со стороны петли, L/R варианты:5563/:5592) +make_gr_box(:5652) —Box_user.GroupBox(ассет).limit_size_depth_checker:5481.Niche_SotShelf:5865— наклонная обувная полка.Draw:5957:make_sot_shelf(:5978) вызывает макросMakeSotShelf.mac.Niche_ShoeShelfGK:6041,Niche_SotKorGK:5729,Niche_BoxGK:6206— варианты для ГК.TerminalAngle:4179— угловой терминал (боковой блок полок),Make:4277.
Выбор типа вешалки — по глубине/ширине через таблицы veshalo_type (:523),
veshalo_count (:539) на RSH_ShellPivot, данные — based_shell/limits.py.
2. Точка входа (cab_pivot_mono.py) — сборка сверху вниз¶
RSH_Mono:129— данные корпуса,params_adapter(protopars):164:- копирует
_w/_h/_d/_termangleft/_termangright/_openside1/_doubledoor1/ _hcok/_hpolktp1/_ishpolkdp1/_hpolkdp1/_sotshelf1/_pants_1/_symmetry(:165-191); shell.ShellSocle.validate_cokle_height(self):177;ccmater = get_ccmater(protopars)(_colorcmmater),fsmater1 = _colorfsmat1;- материалы:
priceinfo(ccmater, "MatId"/"mBandId"/"mHdfId"/"mHdfCon"/ "mKompl_1"/"mKompl_2"/"mKompl_3"/"uFixPODP", 0)(:193-201); k3.dbsetvar("prmater"/"band"/"dvpMaterial"/"HDFConnector", ...):208-211— запись обратно в переменные прототипа.UnitMONO(uFurnObject.FurnObject):214:__init__:217:SetFurnType("100011"),shell_cls=shell.ShellPivotMono,rsh_shell_cls=shell.RSH_ShellPivot,width_diapason,limit_size=LimitSize_PIVOT_MONO1. Приid_prototype:set_proto_pars(id_prototype)→self.inst_data.params_adapter(self)(:240-243).make_shell:358:self.shell = shell_cls.factory(unit_inst=self).Make:419— главная сборка:make_shell()— корпус (внутри и цоколь);Niche_Box_Pivot.factory(:425);Niche_shelves.factory(:435,:450); ручные Z из_polkstd1hN(:446-448);cls_veshalo.factory(:459/:466);Niche_SotShelf.factory(:471);NicheSideBruckHolder.factory(:477);- замена штоков (
fix_vb=fix_vb_ds,:484-489); put_position_and_forma(...)всех ниш (:492-502);- переименование полок (
taile_elemname_changer,:506-520); objects.append(...)(:522-529);- терминалы (
TerminalAngle.factory,:531-553); - дверь:
self.pivot_niche1 = self.createNiche1(self)(:558).
createNiche1(:89) /SetNiche1(:59) — проём = полный фронт,Niche_user.StraightNiche,SetSpacingизspacing_calculate.build_aboad:631:proto_id = _get_proto_id(...)→UnitMONO(id_prototype=proto_id, inst_data=RSH_Mono())→unit.Make()→unit.Draw()→k3.fixing/k3.holes.main:674задаётDATA_PROTO.
cab_duo_two.py — аналогично, shell_cls=shell.ShellPivotDuo, две секции.
3. Подстановки из «цвета» (комплексы номенклатуры)¶
functions.py. Вход — ccmater (id «цвета», группа 727) из
protopars._colorcmmater через get_ccmater (:33-49, CCMaterException
при 0). Каждое свойство — priceinfo(ccmater, <property>, default):
get_prmater:52→"MatId"(ЛДСП корпуса);get_bandtypereal:67→"mBandId"(кромка);get_bpmater:189→"mHdfId"(ХДФ ЗС);get_bp_connector:204→"mHdfCon";get_fix_vb/vbp/vb_skvz/vb_ds:101/:116/:131/:146→"ID_FixCS1/1/2/3";get_id_leg:160→"mKompl_1",get_id_naves:221→"mKompl_2",get_id_fetr_leg:237→"mKompl_3",get_fix_podp:174→"uFixPODP".
Одна запись «цвета» несёт материал+кромку+ХДФ+соединитель+крепёж+опоры.
Thickness берётся у выведенного MatId.
rshcomplect: get_rshcomplect(protopars) :84 → protopars._rshcomplect →
RSH_Complect.propbuilder(rsh, rshcomplect) (rsh_common.py:50) заполняет
крепёж/аксессуары из свойств записи (uFixMF/uFixKonf/uFixVB…/uFixECK/
uAccHexKey/uAccInstruction/uFixBWMid, tableid=1/2). Вызывается в каждом
params_adapter (напр. RSH_Socle.params_adapter:100-101).
4. Что портировано в новую архитектуру¶
| Сущность оракула | Наш аналог | Статус |
|---|---|---|
ShellPivotMono адаптеры (панели корпуса) |
corpus.py:build_section_parts (:59) |
Есть (бит-в-бит 12 панелей при h=2500) |
ShellPivotDuo (2 секции, средняя стенка) |
families/duo.py:build_duo_parts (:102) |
Частично (ЗС секции — открытый вопрос, corpus.py:100-108) |
RSH_Mono.params_adapter + чтение proto |
mono_controller.py:build_mono_params (:342) |
Есть |
RSH_Duo.params_adapter |
duo_controller.py |
Есть |
functions.get_prmater/bandtypereal/bpmater |
nomenclature.py (:28/:39/:49) + ColorComplexMaterialAdapter (mono_controller.py:93) |
Есть |
ShellSocle/RSH_Socle (цоколь) |
corpus.py ветвь PLINTH (:168-182), _validate_h_cok (:31) |
Частично (2 планки commode; нет SideLiningP при w>899, shoemaker, опор AccLeggs) |
Niche_shelves |
niches/shelves.py (:51), Fill.SHELVES |
Есть |
NicheVesh/NicheVeshProd |
niches/hangers.py (:98), Fill.HANGER |
Частично (отступ штанги — вопрос :107; PartTag.ROD — место, ассет на рендерере) |
Niche_Box_Pivot |
niches/boxes.py (:160), Fill.BOX |
Частично (рама+места; GroupBox — место BOX_FRONT) |
Niche_SotShelf/ShoeShelf/SotKor/Pantograf/BRHolder |
— | Нет (Fill.* объявлены в base_types.py:110-114, провайдеров нет) |
Дверь (createNiche1+StraightDoor+spacing_calculate) |
doors.py (:188), FacadeLayout (:142) |
Есть |
| Петли | hinges.py + renderer_k3._make_hinge (:262) |
Есть |
Тип фасада (Спарта/…, CreateFasad) |
resolve_facade_type (mono_controller.py:244) + renderer_k3._make_facade |
Есть-НО: подход _make_facade-shim ОТВЕРГНУТ владельцем — переделать на настоящую дверь |
TerminalAngle |
— | Нет |
Пазы под ЗС (SideLeft/Right Slot) |
base_types.Cuts (только подрезы) |
Нет пазов-Slot |
Крепёж (минификс/конфирмат/VB/гвозди, RSH_Complect, fix_panel_adapter, AddFixPin) |
— | Нет (в Model крепежа нет) |
| Кромка (наложение) | id резолвится (get_bandtypereal) |
Не накладывается (renderer_k3:163-165 TODO) |
Навесы (make_naves) |
— | Нет |
Итог по отсутствующему: крепёж (весь), пазы под ЗС, кромка (наложение), навесы, угловые терминалы, наполнения обувь/сотовые/пантограф/брючница, боковые/shoemaker-планки цоколя и опоры.
5. Готовые оракульные классы для прямого переиспользования (1:1 в K3)¶
shell.ShellSocle(shell.py:947) — весь цоколь.ShellSocle.factory(socle_inst=<объект с inst_data.width/depth/h_cok>, is_konf=False)→.Make(). Входы:inst_datacwidth,depth,h_cok,sokletype,prmater,bandtypereal,id_leg,fix_mf.shell.Niche_shelves(:5035) — съёмные полки.factory(shell_inst, positionniche, count, prev_niche, commonpos, pan_name). Нуженshell_instс адаптерами иinst_data(RSH_Niche).shell.Niche_Box_Pivot(:5406) — блок ящиков целиком (рама + GroupBox- крепёж).
factory(shell_inst, positionniche, count, openside, doubledoor). shell.NicheVeshProd/NicheVesh(:4748/:4544) — вешала (реальные ассетыrack_long.Rack).factory(shell_inst, positionniche, enable, count).shell.Niche_SotShelf,NicheSideBruckHolder,NichePantograf(:5865/:4939/:4841) — обувь/брючница/пантограф. В порте их нет — переиспользование напрямую = самый быстрый путь к 1:1.shell.TerminalAngle(:4179) — угловой терминал.- Детали-панели с пазами/крепежом:
details.SideLeft/SideRight(:316/:361) — несут Slot и кромку;entityes.addcomponents.AddFixPin/ AccLeggs/AccHexKey. Вход:unit_inst(RSH) соslotpars,prmater,fix_pin,bandtypereal. - Резолверы номенклатуры:
functions.get_*иRSH_Complect.propbuilder. Вход:protopars._colorcmmater,protopars._rshcomplect.
Общий приём для 1:1: любой оракульный *.factory(...) требует
«shell-подобный» объект: (а) inst_data (RSH-датакласс, заполняется
params_adapter) и (б) классовые адаптеры gab_*/symmetry_*. Минимальный
мост — отдать оракулу реальный UnitMONO/ShellPivotMono для деталей, которые
Model ещё не покрывает (крепёж, пазы, наполнения, навесы), и оставить Model там,
где расхождений нет (панели корпуса, полки, двери, петли).