Add views, import/duplicate, DRC, jumps toggle, multi-wire select, auto-route, delete view tabs
- Roadmap #22: File→Import JSON to restore a diagram (drag-drop or file picker) - Roadmap #23: Duplicate diagram from diagram list - Roadmap #24: DRC panel with collapsible categories (unconnected pins, dup refs, no length, no P/N) - Multi-view tabs: named views per diagram with independent device/wire layouts; snapshot-on-entry prevents bleed - Keyboard arrow nudge for selected device(s) - Undo for move, duplicate, label/property changes - Wire jump arcs toggle (⌒ Jumps button in toolbar) - Shift+click multi-wire selection; right-click bulk clear waypoints or auto-route - Auto-route: obstacle-avoiding ortho routing for single or bulk selected wires - Delete view tab with × button; right-click context menu for rename/delete Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+11
-7
@@ -7,7 +7,7 @@ from fastapi.staticfiles import StaticFiles
|
||||
from sqlalchemy import text, inspect as sa_inspect
|
||||
|
||||
from .database import Base, engine, SessionLocal
|
||||
from .routers import bundles, connectors, diagrams, devices, export, octopart, wires
|
||||
from .routers import bundles, connectors, diagrams, devices, export, octopart, views, wires
|
||||
|
||||
Base.metadata.create_all(bind=engine)
|
||||
|
||||
@@ -45,6 +45,9 @@ def _migrate():
|
||||
if "show_size_label" not in _cols("wires"):
|
||||
conn.execute(text("ALTER TABLE wires ADD COLUMN show_size_label INTEGER DEFAULT 0"))
|
||||
conn.commit()
|
||||
|
||||
# diagram_views / view_device_positions / view_wire_waypoints are created
|
||||
# via Base.metadata.create_all — no ALTER TABLE needed for new tables
|
||||
except Exception as e:
|
||||
print(f"[migrate] column error: {e}", file=sys.stderr)
|
||||
|
||||
@@ -59,12 +62,13 @@ app.add_middleware(
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
app.include_router(bundles.router, prefix="/api/bundles")
|
||||
app.include_router(diagrams.router, prefix="/api/diagrams")
|
||||
app.include_router(devices.router, prefix="/api/devices")
|
||||
app.include_router(wires.router, prefix="/api/wires")
|
||||
app.include_router(octopart.router, prefix="/api/octopart")
|
||||
app.include_router(export.router, prefix="/api/export")
|
||||
app.include_router(bundles.router, prefix="/api/bundles")
|
||||
app.include_router(diagrams.router, prefix="/api/diagrams")
|
||||
app.include_router(devices.router, prefix="/api/devices")
|
||||
app.include_router(wires.router, prefix="/api/wires")
|
||||
app.include_router(views.router, prefix="/api/views")
|
||||
app.include_router(octopart.router, prefix="/api/octopart")
|
||||
app.include_router(export.router, prefix="/api/export")
|
||||
app.include_router(connectors.router, prefix="/api/connectors")
|
||||
|
||||
FRONTEND_DIR = os.path.normpath(
|
||||
|
||||
Reference in New Issue
Block a user