Dach: Auswahl-Hervorhebung im 2D-Grundriss (Traufe-Umriss)
Ein selektiertes Dach wird jetzt im Grundriss mit der Akzentkontur markiert (highlightRoofPolys über das Traufe-Pick-Polygon), analog Decke/Raum — selectedRoofIds von App durch die Content-Sichten an PlanView durchgereicht. tsc + vitest 642 grün.
This commit is contained in:
+12
@@ -4728,6 +4728,7 @@ export default function App() {
|
|||||||
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
||||||
selectedColumnIds={selectedColumnIds}
|
selectedColumnIds={selectedColumnIds}
|
||||||
selectedRoomIds={selectedRoomIds}
|
selectedRoomIds={selectedRoomIds}
|
||||||
|
selectedRoofIds={selectedRoofIds}
|
||||||
roomStamp={roomStamp}
|
roomStamp={roomStamp}
|
||||||
onStampMove={moveRoomStamp}
|
onStampMove={moveRoomStamp}
|
||||||
onStampEdit={onOpenStampEditor}
|
onStampEdit={onOpenStampEditor}
|
||||||
@@ -5839,6 +5840,7 @@ function Content({
|
|||||||
selectedExtrudedSolidIds,
|
selectedExtrudedSolidIds,
|
||||||
selectedColumnIds,
|
selectedColumnIds,
|
||||||
selectedRoomIds,
|
selectedRoomIds,
|
||||||
|
selectedRoofIds,
|
||||||
roomStamp,
|
roomStamp,
|
||||||
onStampMove,
|
onStampMove,
|
||||||
onStampEdit,
|
onStampEdit,
|
||||||
@@ -5914,6 +5916,7 @@ function Content({
|
|||||||
selectedExtrudedSolidIds: string[];
|
selectedExtrudedSolidIds: string[];
|
||||||
selectedColumnIds: string[];
|
selectedColumnIds: string[];
|
||||||
selectedRoomIds: string[];
|
selectedRoomIds: string[];
|
||||||
|
selectedRoofIds: string[];
|
||||||
roomStamp: { roomId: string; anchor: Vec2 } | null;
|
roomStamp: { roomId: string; anchor: Vec2 } | null;
|
||||||
onStampMove: (roomId: string, delta: Vec2) => void;
|
onStampMove: (roomId: string, delta: Vec2) => void;
|
||||||
onStampEdit: (roomId: string) => void;
|
onStampEdit: (roomId: string) => void;
|
||||||
@@ -6025,6 +6028,7 @@ function Content({
|
|||||||
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
||||||
selectedColumnIds={selectedColumnIds}
|
selectedColumnIds={selectedColumnIds}
|
||||||
selectedRoomIds={selectedRoomIds}
|
selectedRoomIds={selectedRoomIds}
|
||||||
|
selectedRoofIds={selectedRoofIds}
|
||||||
roomStamp={roomStamp}
|
roomStamp={roomStamp}
|
||||||
onStampMove={onStampMove}
|
onStampMove={onStampMove}
|
||||||
onStampEdit={onStampEdit}
|
onStampEdit={onStampEdit}
|
||||||
@@ -6079,6 +6083,7 @@ function Content({
|
|||||||
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
||||||
selectedColumnIds={selectedColumnIds}
|
selectedColumnIds={selectedColumnIds}
|
||||||
selectedRoomIds={selectedRoomIds}
|
selectedRoomIds={selectedRoomIds}
|
||||||
|
selectedRoofIds={selectedRoofIds}
|
||||||
roomStamp={roomStamp}
|
roomStamp={roomStamp}
|
||||||
onStampMove={onStampMove}
|
onStampMove={onStampMove}
|
||||||
onStampEdit={onStampEdit}
|
onStampEdit={onStampEdit}
|
||||||
@@ -6171,6 +6176,7 @@ function Content({
|
|||||||
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
||||||
selectedColumnIds={selectedColumnIds}
|
selectedColumnIds={selectedColumnIds}
|
||||||
selectedRoomIds={selectedRoomIds}
|
selectedRoomIds={selectedRoomIds}
|
||||||
|
selectedRoofIds={selectedRoofIds}
|
||||||
roomStamp={roomStamp}
|
roomStamp={roomStamp}
|
||||||
onStampMove={onStampMove}
|
onStampMove={onStampMove}
|
||||||
onStampEdit={onStampEdit}
|
onStampEdit={onStampEdit}
|
||||||
@@ -6215,6 +6221,7 @@ function LevelPlanView({
|
|||||||
selectedExtrudedSolidIds,
|
selectedExtrudedSolidIds,
|
||||||
selectedColumnIds,
|
selectedColumnIds,
|
||||||
selectedRoomIds,
|
selectedRoomIds,
|
||||||
|
selectedRoofIds,
|
||||||
roomStamp,
|
roomStamp,
|
||||||
onStampMove,
|
onStampMove,
|
||||||
onStampEdit,
|
onStampEdit,
|
||||||
@@ -6252,6 +6259,7 @@ function LevelPlanView({
|
|||||||
selectedExtrudedSolidIds: string[];
|
selectedExtrudedSolidIds: string[];
|
||||||
selectedColumnIds: string[];
|
selectedColumnIds: string[];
|
||||||
selectedRoomIds: string[];
|
selectedRoomIds: string[];
|
||||||
|
selectedRoofIds: string[];
|
||||||
roomStamp: { roomId: string; anchor: Vec2 } | null;
|
roomStamp: { roomId: string; anchor: Vec2 } | null;
|
||||||
onStampMove: (roomId: string, delta: Vec2) => void;
|
onStampMove: (roomId: string, delta: Vec2) => void;
|
||||||
onStampEdit: (roomId: string) => void;
|
onStampEdit: (roomId: string) => void;
|
||||||
@@ -6328,6 +6336,7 @@ function LevelPlanView({
|
|||||||
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
||||||
selectedColumnIds={selectedColumnIds}
|
selectedColumnIds={selectedColumnIds}
|
||||||
selectedRoomIds={selectedRoomIds}
|
selectedRoomIds={selectedRoomIds}
|
||||||
|
selectedRoofIds={selectedRoofIds}
|
||||||
roomStamp={roomStamp}
|
roomStamp={roomStamp}
|
||||||
onStampMove={onStampMove}
|
onStampMove={onStampMove}
|
||||||
onStampEdit={onStampEdit}
|
onStampEdit={onStampEdit}
|
||||||
@@ -6380,6 +6389,7 @@ function SectionPlanView({
|
|||||||
selectedExtrudedSolidIds,
|
selectedExtrudedSolidIds,
|
||||||
selectedColumnIds,
|
selectedColumnIds,
|
||||||
selectedRoomIds,
|
selectedRoomIds,
|
||||||
|
selectedRoofIds,
|
||||||
roomStamp,
|
roomStamp,
|
||||||
onStampMove,
|
onStampMove,
|
||||||
onStampEdit,
|
onStampEdit,
|
||||||
@@ -6413,6 +6423,7 @@ function SectionPlanView({
|
|||||||
selectedExtrudedSolidIds: string[];
|
selectedExtrudedSolidIds: string[];
|
||||||
selectedColumnIds: string[];
|
selectedColumnIds: string[];
|
||||||
selectedRoomIds: string[];
|
selectedRoomIds: string[];
|
||||||
|
selectedRoofIds: string[];
|
||||||
roomStamp: { roomId: string; anchor: Vec2 } | null;
|
roomStamp: { roomId: string; anchor: Vec2 } | null;
|
||||||
onStampMove: (roomId: string, delta: Vec2) => void;
|
onStampMove: (roomId: string, delta: Vec2) => void;
|
||||||
onStampEdit: (roomId: string) => void;
|
onStampEdit: (roomId: string) => void;
|
||||||
@@ -6499,6 +6510,7 @@ function SectionPlanView({
|
|||||||
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
selectedExtrudedSolidIds={selectedExtrudedSolidIds}
|
||||||
selectedColumnIds={selectedColumnIds}
|
selectedColumnIds={selectedColumnIds}
|
||||||
selectedRoomIds={selectedRoomIds}
|
selectedRoomIds={selectedRoomIds}
|
||||||
|
selectedRoofIds={selectedRoofIds}
|
||||||
roomStamp={roomStamp}
|
roomStamp={roomStamp}
|
||||||
onStampMove={onStampMove}
|
onStampMove={onStampMove}
|
||||||
onStampEdit={onStampEdit}
|
onStampEdit={onStampEdit}
|
||||||
|
|||||||
@@ -285,6 +285,8 @@ export interface PlanViewProps {
|
|||||||
* Fläche JEDES dieser Räume mit einer Akzentkontur.
|
* Fläche JEDES dieser Räume mit einer Akzentkontur.
|
||||||
*/
|
*/
|
||||||
selectedRoomIds?: string[];
|
selectedRoomIds?: string[];
|
||||||
|
/** Aktuell ausgewählte Dach-IDs (von App); die Ansicht markiert die Traufe. */
|
||||||
|
selectedRoofIds?: string[];
|
||||||
/**
|
/**
|
||||||
* Aktuell ausgewählte IDs extrudierter Körper (truck-Integration; kontrolliert
|
* Aktuell ausgewählte IDs extrudierter Körper (truck-Integration; kontrolliert
|
||||||
* von App). Die Ansicht markiert den Footprint-Umriss JEDES dieser Körper mit
|
* von App). Die Ansicht markiert den Footprint-Umriss JEDES dieser Körper mit
|
||||||
@@ -413,6 +415,7 @@ export const PlanView = forwardRef<PlanViewHandle, PlanViewProps>(
|
|||||||
selectedOpeningIds,
|
selectedOpeningIds,
|
||||||
selectedStairIds,
|
selectedStairIds,
|
||||||
selectedRoomIds,
|
selectedRoomIds,
|
||||||
|
selectedRoofIds,
|
||||||
selectedExtrudedSolidIds,
|
selectedExtrudedSolidIds,
|
||||||
selectedColumnIds,
|
selectedColumnIds,
|
||||||
roomStamp,
|
roomStamp,
|
||||||
@@ -1765,6 +1768,18 @@ export const PlanView = forwardRef<PlanViewHandle, PlanViewProps>(
|
|||||||
);
|
);
|
||||||
}, [plan, selectedRoomIds]);
|
}, [plan, selectedRoomIds]);
|
||||||
|
|
||||||
|
// Hervorhebung der selektierten Dächer: das (unsichtbare) Traufe-Pick-Polygon
|
||||||
|
// mit roofId als Akzentkontur überzeichnen — analog zur Raum-/Decken-Auswahl.
|
||||||
|
const highlightRoofPolys = useMemo(() => {
|
||||||
|
const ids =
|
||||||
|
selectedRoofIds && selectedRoofIds.length ? new Set(selectedRoofIds) : null;
|
||||||
|
if (!ids) return [];
|
||||||
|
return plan.primitives.filter(
|
||||||
|
(p): p is Extract<Primitive, { kind: "polygon" }> =>
|
||||||
|
p.kind === "polygon" && p.roofId != null && ids.has(p.roofId),
|
||||||
|
);
|
||||||
|
}, [plan, selectedRoofIds]);
|
||||||
|
|
||||||
// Hervorhebung der selektierten extrudierten Körper (truck-Integration): der
|
// Hervorhebung der selektierten extrudierten Körper (truck-Integration): der
|
||||||
// Footprint-Umriss (Polygon mit extrudedSolidId) mit Akzentkontur überzeichnen
|
// Footprint-Umriss (Polygon mit extrudedSolidId) mit Akzentkontur überzeichnen
|
||||||
// — analog zur Raum-Auswahl.
|
// — analog zur Raum-Auswahl.
|
||||||
@@ -1997,6 +2012,18 @@ export const PlanView = forwardRef<PlanViewHandle, PlanViewProps>(
|
|||||||
pointerEvents="none"
|
pointerEvents="none"
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
|
{/* Auswahl-Hervorhebung der gewählten Dächer (Traufe-Umriss). */}
|
||||||
|
{highlightRoofPolys.map((poly, i) => (
|
||||||
|
<polygon
|
||||||
|
key={`selrf-${i}`}
|
||||||
|
className="plan-selected"
|
||||||
|
points={poly.pts
|
||||||
|
.map(toScreen)
|
||||||
|
.map((s) => `${s.x},${s.y}`)
|
||||||
|
.join(" ")}
|
||||||
|
pointerEvents="none"
|
||||||
|
/>
|
||||||
|
))}
|
||||||
{/* Auswahl-Hervorhebung der gewählten extrudierten Körper (truck-Integration). */}
|
{/* Auswahl-Hervorhebung der gewählten extrudierten Körper (truck-Integration). */}
|
||||||
{highlightExtrudedSolidPolys.map((poly, i) => (
|
{highlightExtrudedSolidPolys.map((poly, i) => (
|
||||||
<polygon
|
<polygon
|
||||||
|
|||||||
Reference in New Issue
Block a user