Symbole-Tab in Project-Settings (Library-Item-Management)

Project-Settings hat jetzt 5 Tabs. Neuer 'Symbole'-Tab managt die
Dossier-Library: List/Detail wie Materialien, mit 2D + 3D Slot pro Item.

Backend (library.py):
- save_manifest, update_item, delete_item, add_item — full CRUD aufs
  library.json
- copy_to_assets: kopiert User-Dateien in library/assets/ mit
  Konflikt-Resolution (auto-suffix)

Backend (rhinopanel.py / ProjectSettingsBridge):
- _send_library: aktuelle Items + libraryRoot an Frontend
- _add_library_file: File-Picker (.3dm direkt; .dwg/.obj/etc. zeigt
  Hinweis fuer kuenftige Konvertierung), kopiert + appended ans Item
  (variant 2d/3d) oder erstellt neues Item
- _update_library_item: patch by id
- _delete_library_item: entfernt Eintrag aus Manifest
- LIBRARY_ITEMS + LIBRARY_ERROR Messages ans Frontend

Frontend:
- Neuer 'Symbole'-Tab mit List/Detail
- Liste: Name, Type-Icon, '2D'/'3D' Status-Badge
- Detail rechts: Name-Edit (live persist on blur), Type-Toggle
  (Symbol/Objekt), 2D/3D-File-Slots mit Datei-Picker, Tags-Editor
- 'Neues Objekt' Button im Listen-Footer

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 03:58:41 +02:00
parent de57c320c2
commit c993935b17
4 changed files with 436 additions and 0 deletions
+13
View File
@@ -204,6 +204,19 @@ export function importLinetypeFile() { send('IMPORT_LINETYPE_FILE', {})
export function renameHatch(index, name) { send('RENAME_HATCH', { index, name }) }
export function deleteHatch(index) { send('DELETE_HATCH', { index }) }
export function importHatchFile() { send('IMPORT_HATCH_FILE', {}) }
// Library-Item-CRUD (Project-Settings → Symbole-Tab)
export function listLibraryItems() { send('LIST_LIBRARY_ITEMS', {}) }
export function addLibraryFile(variant, targetId, itemType) {
send('ADD_LIBRARY_FILE', {
variant: variant || '2d',
targetId: targetId || null,
itemType: itemType || 'object',
})
}
export function updateLibraryItem(id, patch) {
send('UPDATE_LIBRARY_ITEM', { id, patch })
}
export function deleteLibraryItem(id) { send('DELETE_LIBRARY_ITEM', { id }) }
// Schnitt/Ansicht — interaktiver 2-Punkt-Pick im Rhino-Viewport. Erzeugt
// eine neue Zeichnungsebene type=schnitt + 2D-Plan-Symbol + aktiviert sie.
// opts: { cutAtLine: bool, depthBack: m, heightMin: m, heightMax: m, namePrefix }