Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
3731eb3
Add roof surface placement support for items
sudhir9297 May 18, 2026
ed53bc2
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 May 20, 2026
fd8e02c
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 May 20, 2026
7c1e383
fixed conflict
sudhir9297 May 20, 2026
b3377da
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 May 20, 2026
f177a65
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 May 22, 2026
9af7491
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 May 22, 2026
fd27524
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 May 27, 2026
b516298
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 May 28, 2026
ebfc8ce
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 3, 2026
b7b313b
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 4, 2026
b2ad645
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 4, 2026
bffdb4a
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 8, 2026
ee7b10c
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 9, 2026
7d4b474
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 10, 2026
3a3318c
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 13, 2026
26df69f
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 17, 2026
5376e07
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 22, 2026
d2204aa
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 23, 2026
0c04615
Fix spiral stair openings and fence handle arrows
sudhir9297 Jun 23, 2026
149f34c
Implement roof trim planes and ridge vent clipping
sudhir9297 Jun 23, 2026
66cf01d
Fix mansard roof and ridge vent placement
sudhir9297 Jun 24, 2026
016f583
Fix mansard merged roof cutouts
sudhir9297 Jun 24, 2026
51a9236
Fix Dutch roof gable overhang
sudhir9297 Jun 24, 2026
50530f3
Refactor roof segment, ridge vent, and surface geometry
sudhir9297 Jun 24, 2026
e2a6f26
Simplify Dutch roof shape
sudhir9297 Jun 25, 2026
16b94fe
Add Dutch roof gable top geometry controls
sudhir9297 Jun 25, 2026
ab917af
Fix Dutch roof slope material slots
sudhir9297 Jun 25, 2026
df4893c
Render dutch roof tops as double-sided faces
sudhir9297 Jun 25, 2026
fc654a5
Add auto ridge vent toggle to roof segments
sudhir9297 Jun 26, 2026
100e6d0
Snap new walls to the floor below
sudhir9297 Jun 26, 2026
50bc546
Set Dutch roof shape defaults on type switch
sudhir9297 Jun 26, 2026
2f30dc7
Use green accent for corner and endpoint snap markers
sudhir9297 Jun 26, 2026
e7b5b31
Add magnetic wall snapping to the roof tool
sudhir9297 Jun 26, 2026
0ae754c
Update auto-generated Next.js route types path
sudhir9297 Jun 26, 2026
371bd7e
Show cutaway outline while dragging roof trim
sudhir9297 Jun 27, 2026
2e01a54
Fill and clip roof trim cutaway, gate it to active drag
sudhir9297 Jun 27, 2026
4e4d42c
Separate and extend Dutch roof end slopes
sudhir9297 Jun 27, 2026
581f6d7
Render roof trim cutaway as a material-only section cut
sudhir9297 Jun 27, 2026
d46abc8
Outline roof cutaway by fill silhouette, restyle to destructive red
sudhir9297 Jun 27, 2026
0b72e2b
Include roof accessories in trim clipping and red cutaway
sudhir9297 Jun 28, 2026
6559db4
Add smooth spline fences with editable curve handles
sudhir9297 Jun 28, 2026
5d8a04a
Fix dutch roof ridge vent handling
sudhir9297 Jun 29, 2026
d7dd978
Fix Dutch ridge vent placement and support
sudhir9297 Jun 29, 2026
cdc32dc
Fix Dutch roof trim artifacts
sudhir9297 Jun 29, 2026
733d866
Fix Dutch roof trim preview geometry
sudhir9297 Jun 29, 2026
523078f
Tag roof trim overlay meshes with EDITOR_LAYER
sudhir9297 Jun 29, 2026
f2a5186
Merge branch 'main' of github.com:pascalorg/editor
sudhir9297 Jun 29, 2026
df5f802
Merge remote-tracking branch 'origin/main' into fix/tue-jun-23
sudhir9297 Jun 29, 2026
40638bc
Apply Biome cleanup
sudhir9297 Jun 29, 2026
532a73a
fix(core): address Dutch roof review feedback
sudhir9297 Jun 29, 2026
2f5abdc
chore: apply biome check cleanup
sudhir9297 Jun 29, 2026
8836284
fix(core): relax Dutch roof surface helper input
sudhir9297 Jun 29, 2026
413951d
fix
sudhir9297 Jun 29, 2026
2d989d6
Fix biome checks and dev verification
sudhir9297 Jun 29, 2026
d8cd8a2
fixes
sudhir9297 Jun 29, 2026
c8339cd
Remove unsupported Biome noShadow override
sudhir9297 Jun 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/ifc-converter/next-env.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts";
import "./.next/dev/types/routes.d.ts";

// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
3 changes: 0 additions & 3 deletions biome.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,6 @@
"noNoninteractiveElementInteractions": "off",
"useButtonType": "off"
},
"nursery": {
"noShadow": "off"
},
"security": {
"noDangerouslySetInnerHtml": "info"
}
Expand Down
12 changes: 12 additions & 0 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,18 @@ export {
resolveElevatorServiceLevelIds,
resolveElevatorServiceLevels,
} from './systems/elevator/elevator-service'
export {
getFenceCenterlineFrameAt,
getFenceCenterlineLength,
sampleFenceCenterline,
} from './systems/fence/fence-centerline'
export {
getFenceControlHandle,
getFenceSplineFrameAt,
getFenceSplineLength,
isSplineFence,
sampleFenceSpline,
} from './systems/fence/fence-spline'
export { type StairFootprintAABB, stairFootprintAABB } from './systems/stair/stair-footprint'
export { createSurfaceOpeningPreviewController } from './systems/stair/stair-opening-preview'
export { syncAutoStairOpenings } from './systems/stair/stair-opening-sync'
Expand Down
16 changes: 16 additions & 0 deletions packages/core/src/registry/handles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,17 @@ export type EditorApi = {
* fences). No-ops for kinds without endpoints.
*/
engageEndpointMove: (node: AnyNode, endpoint: 'start' | 'end') => void
/**
* Engage drag of a spline control point (`path[index]`). Used by spline
* fences to reshape their centerline. No-ops for kinds without a path.
*/
engageControlPointMove: (node: AnyNode, index: number) => void
/**
* Engage drag of a spline tangent handle (`path[index]`, which end). Used by
* spline fences to bend the curve through one control point. No-ops for kinds
* without tangents.
*/
engageTangentMove: (node: AnyNode, index: number, side: 'in' | 'out') => void
}

export type HandlePortal = 'self' | 'parent' | 'grandparent'
Expand Down Expand Up @@ -323,6 +334,11 @@ export type TapActionHandle<N = any> = {
* drag, so the move tool's own preview / ticker feedback shows up.
*/
shape?: 'arrow' | 'corner-picker' | 'move-cross'
/**
* `shape: 'corner-picker'` only — render the disc and its outer ring as a
* circle instead of the default hexagon.
*/
round?: boolean
/**
* Required when `shape: 'corner-picker'` — controls the dashed leader's
* vertical extent. Pure callback so the descriptor doesn't need to
Expand Down
30 changes: 29 additions & 1 deletion packages/core/src/schema/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,25 +98,53 @@ export { PipeFittingNode } from './nodes/pipe-fitting'
export { PipeSegmentNode } from './nodes/pipe-segment'
export { PipeTrapNode } from './nodes/pipe-trap'
// Nodes
export { RidgeVentNode } from './nodes/ridge-vent'
export {
createDefaultRidgeVentsForSegment,
getRidgeVentLinesForSegment,
hasAutoRidgeVentMetadata,
isAutoRidgeVentEnabled,
isDefaultRidgeVentNode,
type RidgeVentLine,
RidgeVentNode,
} from './nodes/ridge-vent'
export type { RoofSurfaceMaterialRole, RoofSurfaceMaterialSpec } from './nodes/roof'
export { getEffectiveRoofSurfaceMaterial, RoofNode } from './nodes/roof'
export type {
DutchRoofMetrics,
RoofSegmentSurfaceMaterialRole,
RoofSegmentSurfaceMaterialSpec,
RoofSegmentVisibleTopBounds,
SegmentSlopeFrame,
} from './nodes/roof-segment'
export {
getActiveRoofHeight,
getDutchRoofMetrics,
getEffectiveSegmentSurfaceMaterial,
getPitchFromActiveRoofHeight,
getRoofSegmentSurfaceY,
getRoofSegmentVisibleTopBounds,
getSegmentSlopeFrame,
hasSegmentMaterialOverride,
MIN_ROOF_SEGMENT_TRIM_SPAN,
normalizeRoofSegmentTrim,
ROOF_SHAPE_DEFAULTS,
RoofSegmentNode,
RoofSegmentTrim,
RoofType,
} from './nodes/roof-segment'
export type {
DutchRoofShapeMetrics,
RoofShapeFaceVertex,
RoofShapeInsets,
RoofShapeRatios,
} from './nodes/roof-segment-shape'
export {
getDutchEndSlopeFaces,
getDutchRoofShapeMetrics,
getRoofModuleFaces,
getRoofShapeInsets,
getRoofShapeRatios,
} from './nodes/roof-segment-shape'
export type { RoofSegmentWallFace, RoofWallFaceId } from './nodes/roof-segment-walls'
export {
clampRectToRoofWallFace,
Expand Down
17 changes: 16 additions & 1 deletion packages/core/src/schema/nodes/fence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,19 @@ export const FenceNode = BaseNode.extend({
slots: z.record(z.string(), z.string()).optional(),
start: z.tuple([z.number(), z.number()]),
end: z.tuple([z.number(), z.number()]),
// Optional spline control points in level coordinate meters. When present
// (>= 2 points) the fence centerline is a smooth Catmull-Rom curve through
// these points and start/end/curveOffset no longer define the centerline.
// start/end are kept in sync with the first/last path point so consumers
// that read endpoints (handles, bbox, miter references) stay valid. Absent =
// the straight or single-arc fence defined by start/end (+ curveOffset).
path: z.array(z.tuple([z.number(), z.number()])).optional(),
// Optional per-control-point tangent handles, parallel to `path` (same
// length when present). Each entry is the OUT-handle offset vector [dx, dy]
// from its path point, in level meters; the IN handle is its mirror so the
// curve stays smooth through the point. `null` = use the automatic
// Catmull-Rom tangent for that point. Only meaningful for spline fences.
tangents: z.array(z.tuple([z.number(), z.number()]).nullable()).optional(),
height: z.number().default(1.8),
thickness: z.number().default(0.08),
curveOffset: z.number().optional(),
Expand All @@ -38,8 +51,10 @@ export const FenceNode = BaseNode.extend({
dedent`
Fence node - used to represent a fence segment in the building/site level coordinate system
- start/end: fence endpoints in level coordinate system
- path: optional list of [x, y] points; when set (>= 2) the centerline is a smooth spline through them
- tangents: optional per-point handle vectors (parallel to path); null entries fall back to the automatic tangent
- height/thickness: overall fence dimensions in meters
- curveOffset: midpoint sagitta offset used to bend the fence into an arc
- curveOffset: midpoint sagitta offset used to bend the fence into an arc (ignored when path is set)
- baseHeight/postSpacing/postSize/topRailHeight: exact geometric controls from the plan3D fence model
- groundClearance/edgeInset/baseStyle: fence support and inset configuration
- showInfill: whether to draw intermediate posts/slats between end posts
Expand Down
Loading
Loading