Documentation
¶
Index ¶
- Constants
- Variables
- func CalculateMinimumBlockSize(node BlockNode, cornerMargin, portPitch float64) (minWidth, minHeight, wPorts, hPorts float64)
- func ComputeOptimizedLabels(nodes []BlockNode, edges []EdgeConnection, customOffsets map[string]Point, ...) map[string]LabelPlacement
- func NormalizeModel(nodes []BlockNode, edges []EdgeConnection) ([]BlockNode, []EdgeConnection, []string)
- func ValidateScene(nodes []BlockNode, edges []EdgeConnection) error
- type BenchmarkMetrics
- type BlockCategory
- type BlockNode
- type DerivedBlockGeometry
- type Direction
- type EdgeConnection
- type Engine
- type LabelPlacement
- type ObstacleBox
- type OptimizationWeights
- type Point
- type Port
- type PortCoordinates
- type PortSide
- type QualityVector
- type RevisionConflictError
- type RouteRequest
- type RouteResult
- type RoutingOptions
- type Scene
- type SceneOpenRequest
- type ScenePatch
- type ScenePatchRequest
- type SceneResult
Constants ¶
const ( BaseGrid = 4.0 PlacementGrid = 10.0 RoutingGrid = 10.0 DefaultCornerMargin = 14.0 DefaultPortPitch = 20.0 MinBlockWidth = 120.0 MinBlockHeight = 72.0 HeaderHeight = 24.0 BodyPadding = 12.0 )
const ContractVersion = 1
const EngineID = "autotrace-core-go"
const MaxLabelOffArrowPenalty = 50000.0
Variables ¶
var ( ErrSceneNotFound = errors.New("autotrace scene not found") ErrRevisionConflict = errors.New("autotrace scene revision conflict") )
Functions ¶
func ComputeOptimizedLabels ¶
func ComputeOptimizedLabels(nodes []BlockNode, edges []EdgeConnection, customOffsets map[string]Point, clearance float64) map[string]LabelPlacement
func NormalizeModel ¶
func NormalizeModel(nodes []BlockNode, edges []EdgeConnection) ([]BlockNode, []EdgeConnection, []string)
func ValidateScene ¶
func ValidateScene(nodes []BlockNode, edges []EdgeConnection) error
Types ¶
type BenchmarkMetrics ¶
type BenchmarkMetrics struct {
TotalWirelength float64 `json:"totalWirelength"`
BendCount int `json:"bendCount"`
CrossingsCount int `json:"crossingsCount"`
CollinearOverlapCount int `json:"collinearOverlapCount"`
CollinearOverlapLength float64 `json:"collinearOverlapLength"`
LabelsOnArrowCount int `json:"labelsOnArrowCount"`
TotalLabelsCount int `json:"totalLabelsCount"`
LabelsOnArrowRatio float64 `json:"labelsOnArrowRatio"`
LabelCollisionCount int `json:"labelCollisionCount"`
ExecutionTimeMs float64 `json:"executionTimeMs"`
CompositeScore float64 `json:"compositeOptimalityScore"`
LayoutAlgorithm string `json:"layoutAlgorithm"`
RoutingAlgorithm string `json:"routingAlgorithm"`
QualityVector QualityVector `json:"qualityVector,omitempty"`
}
func CalculateBenchmarkMetrics ¶
func CalculateBenchmarkMetrics(nodes []BlockNode, edges []EdgeConnection, durationMs float64, layoutAlgo, routingAlgo string) BenchmarkMetrics
type BlockCategory ¶
type BlockCategory string
type BlockNode ¶
type BlockNode struct {
ID string `json:"id"`
Title string `json:"title"`
Subtitle string `json:"subtitle,omitempty"`
Category BlockCategory `json:"category"`
SemanticType string `json:"semanticType,omitempty"`
Description string `json:"description,omitempty"`
X float64 `json:"x"`
Y float64 `json:"y"`
Width float64 `json:"width"`
Height float64 `json:"height"`
Inputs []Port `json:"inputs"`
Outputs []Port `json:"outputs"`
IsPinned bool `json:"isPinned,omitempty"`
Layer int `json:"layer,omitempty"`
Order int `json:"order,omitempty"`
Color string `json:"color,omitempty"`
Shape string `json:"shape,omitempty"`
AutoSize bool `json:"autoSize,omitempty"`
MinWidth float64 `json:"minWidth,omitempty"`
MinHeight float64 `json:"minHeight,omitempty"`
ImageURL string `json:"imageUrl,omitempty"`
ImageFit string `json:"imageFit,omitempty"`
ImageOpacity float64 `json:"imageOpacity,omitempty"`
ShowTitleOverlay bool `json:"showTitleOverlay,omitempty"`
IconName string `json:"iconName,omitempty"`
PortsAdaptiveMode string `json:"portsAdaptiveMode,omitempty"`
RoutingClearance float64 `json:"routingClearance,omitempty"`
PreferredFlow string `json:"preferredFlow,omitempty"`
}
type DerivedBlockGeometry ¶
type DerivedBlockGeometry struct {
BlockID string `json:"blockId"`
VisualBounds [4]float64 `json:"visualBounds"`
RoutingBounds [4]float64 `json:"routingBounds"`
ObstacleBounds [4]float64 `json:"obstacleBounds"`
PortAnchors []PortCoordinates `json:"portAnchors"`
MinWidth float64 `json:"minWidth"`
MinHeight float64 `json:"minHeight"`
Valid bool `json:"valid"`
Violations []string `json:"violations"`
}
func BuildDerivedBlockGeometry ¶
func BuildDerivedBlockGeometry(node BlockNode, clearance float64) DerivedBlockGeometry
type EdgeConnection ¶
type EdgeConnection struct {
ID string `json:"id"`
SourceBlockID string `json:"sourceBlockId"`
SourcePortID string `json:"sourcePortId"`
TargetBlockID string `json:"targetBlockId"`
TargetPortID string `json:"targetPortId"`
Label string `json:"label,omitempty"`
Color string `json:"color,omitempty"`
Path []Point `json:"path,omitempty"`
Bends int `json:"bends,omitempty"`
Crossings int `json:"crossings,omitempty"`
Length float64 `json:"length,omitempty"`
DataType string `json:"dataType,omitempty"`
}
func RouteOrthogonalAStar ¶
func RouteOrthogonalAStar(nodes []BlockNode, edges []EdgeConnection, options RoutingOptions) []EdgeConnection
RouteOrthogonalAStar is the first public importable AutoTrace Core router. It is deterministic for identical inputs/options and preserves edge order.
type Engine ¶
type Engine struct {
// contains filtered or unexported fields
}
Engine owns revisioned graph scenes and reuses routes that remain valid after a patch. It is safe for concurrent native callers; the WASM bridge uses one process-wide instance so scene state survives across protocol calls.
func (*Engine) Open ¶
func (e *Engine) Open(request SceneOpenRequest) (SceneResult, error)
func (*Engine) Patch ¶
func (e *Engine) Patch(request ScenePatchRequest) (SceneResult, error)
type LabelPlacement ¶
type LabelPlacement struct {
EdgeID string `json:"edgeId"`
Label string `json:"label"`
X float64 `json:"x"`
Y float64 `json:"y"`
Width float64 `json:"width"`
Height float64 `json:"height"`
SegmentIndex int `json:"segmentIndex"`
IsHorizontal bool `json:"isHorizontal"`
IsOnArrow bool `json:"isOnArrow"`
IsCollisionFree bool `json:"isCollisionFree"`
Penalty float64 `json:"penalty"`
}
type ObstacleBox ¶
ObstacleBox is a block clearance envelope used by the router.
type OptimizationWeights ¶
type OptimizationWeights struct {
CrossingWeight float64 `json:"crossingWeight"`
StraightnessWeight float64 `json:"straightnessWeight"`
G1SplineWeight float64 `json:"g1SplineWeight"`
PortAlignmentWeight float64 `json:"portAlignmentWeight"`
ClearanceWeight float64 `json:"clearanceWeight"`
WirelengthWeight float64 `json:"wirelengthWeight"`
BendWeight float64 `json:"bendWeight"`
LabelOverlapWeight float64 `json:"labelOverlapWeight"`
}
type Point ¶
Point represents an (X, Y) 2D point.
func CleanOrthogonalArtifacts ¶
func CleanOrthogonalArtifacts(raw []Point, source, target *PortCoordinates, nodes []BlockNode, clearance, sourceStub, targetStub float64) []Point
CleanOrthogonalArtifacts removes duplicate and collinear route points and preserves orthogonal source/target stubs. This is the first extracted core implementation; parity tests guard it against the legacy package.
type Port ¶
type Port struct {
ID string `json:"id"`
Name string `json:"name"`
Side PortSide `json:"side,omitempty"`
Type string `json:"type"`
DataType string `json:"dataType,omitempty"`
PlacementMode string `json:"placementMode,omitempty"`
RelativePosition float64 `json:"relativePosition,omitempty"`
CustomOffset float64 `json:"customOffset,omitempty"`
PinNumber int `json:"pinNumber,omitempty"`
PreferredSide PortSide `json:"preferredSide,omitempty"`
AllowedSides []PortSide `json:"allowedSides,omitempty"`
Order int `json:"order,omitempty"`
GroupID string `json:"groupId,omitempty"`
Color string `json:"color,omitempty"`
Description string `json:"description,omitempty"`
MinSpacing float64 `json:"minSpacing,omitempty"`
OffsetPct float64 `json:"offsetPct,omitempty"`
}
Port defines a block terminal conforming to rule/2.md §12.
type PortCoordinates ¶
type PortCoordinates struct {
X float64 `json:"x"`
Y float64 `json:"y"`
Normal Direction `json:"normal"`
Side PortSide `json:"side"`
Port Port `json:"port"`
}
func GetPortCoordinates ¶
func GetPortCoordinates(node BlockNode, portID string, outputHint bool) PortCoordinates
func GetPortCoordinatesAccurate ¶
func GetPortCoordinatesAccurate(node BlockNode, portID string, isOutputHint bool) PortCoordinates
type QualityVector ¶
type QualityVector struct {
HardViolations int `json:"hardViolations"`
Crossings int `json:"crossings"`
CollinearOverlapCount int `json:"collinearOverlapCount"`
CollinearOverlapLength float64 `json:"collinearOverlapLength"`
CongestionOverflow float64 `json:"congestionOverflow"`
Bends int `json:"bends"`
StraightWiresCount int `json:"straightWiresCount"`
StraightEdgeRatio float64 `json:"straightEdgeRatio"`
PortMisalignmentScore float64 `json:"portMisalignmentScore"`
PortAlignmentScore float64 `json:"portAlignmentScore"`
AreaRatio float64 `json:"areaRatio"`
DensityDeviation float64 `json:"densityDeviation"`
VoidRatio float64 `json:"voidRatio"`
AspectPenalty float64 `json:"aspectPenalty"`
NormalizedWirelength float64 `json:"normalizedWirelength"`
LabelCollisions int `json:"labelCollisions"`
LabelsOnArrowPercentage float64 `json:"labelsOnArrowPercentage"`
CompositeScore float64 `json:"compositeScore"`
}
type RevisionConflictError ¶
func (*RevisionConflictError) Error ¶
func (e *RevisionConflictError) Error() string
func (*RevisionConflictError) Unwrap ¶
func (e *RevisionConflictError) Unwrap() error
type RouteRequest ¶
type RouteRequest struct {
GraphID string `json:"graphId"`
Nodes []BlockNode `json:"nodes"`
Edges []EdgeConnection `json:"edges"`
Options RoutingOptions `json:"options"`
}
type RouteResult ¶
type RouteResult struct {
GraphID string `json:"graphId"`
Edges []EdgeConnection `json:"edges"`
Metrics BenchmarkMetrics `json:"metrics"`
DurationMs float64 `json:"durationMs"`
Engine string `json:"engine"`
ContractVersion int `json:"contractVersion"`
}
func Route ¶
func Route(request RouteRequest) (RouteResult, error)
type RoutingOptions ¶
type RoutingOptions struct {
GridSize float64 `json:"gridSize"`
ObstacleClearance float64 `json:"obstacleClearance"`
BendPenalty float64 `json:"bendPenalty"`
CrossingPenalty float64 `json:"crossingPenalty"`
ChannelSpacing float64 `json:"channelSpacing"`
PortExitOffset float64 `json:"portExitOffset"`
AdaptivePortExitOffset bool `json:"adaptivePortExitOffset"`
SmoothCorners bool `json:"smoothCorners"`
JumpBridges bool `json:"jumpBridges"`
PinAlignment bool `json:"pinAlignment"`
ArtifactCleaning bool `json:"artifactCleaning"`
Weights OptimizationWeights `json:"weights"`
}
type Scene ¶
type Scene struct {
Revision int `json:"revision"`
Nodes []BlockNode `json:"nodes"`
Edges []EdgeConnection `json:"edges"`
Geometries []DerivedBlockGeometry `json:"geometries"`
Metrics BenchmarkMetrics `json:"metrics"`
}
type SceneOpenRequest ¶
type SceneOpenRequest struct {
GraphID string `json:"graphId"`
Revision int `json:"revision"`
Nodes []BlockNode `json:"nodes"`
Edges []EdgeConnection `json:"edges"`
Options RoutingOptions `json:"options"`
}
type ScenePatch ¶
type ScenePatch struct {
BaseRevision int `json:"baseRevision"`
Revision int `json:"revision"`
ChangedBlocks []BlockNode `json:"changedBlocks"`
ChangedEdges []EdgeConnection `json:"changedEdges"`
RemovedBlockIDs []string `json:"removedBlockIds,omitempty"`
RemovedEdgeIDs []string `json:"removedEdgeIds,omitempty"`
}
type ScenePatchRequest ¶
type ScenePatchRequest struct {
GraphID string `json:"graphId"`
Patch ScenePatch `json:"patch"`
}
type SceneResult ¶
type SceneResult struct {
GraphID string `json:"graphId"`
Revision int `json:"revision"`
Nodes []BlockNode `json:"nodes"`
Edges []EdgeConnection `json:"edges"`
Metrics BenchmarkMetrics `json:"metrics"`
DurationMs float64 `json:"durationMs"`
ReusedEdges int `json:"reusedEdges"`
ReroutedEdges int `json:"reroutedEdges"`
ReroutedEdgeIDs []string `json:"reroutedEdgeIds,omitempty"`
Engine string `json:"engine"`
ContractVersion int `json:"contractVersion"`
}