Files
stepanalyser/.venv/lib/python3.12/site-packages/ezdxf/render/dimension.py
Christian Anetzberger a197de9456 initial
2026-01-22 20:23:51 +01:00

119 lines
3.8 KiB
Python

# Copyright (c) 2018-2022, Manfred Moitzi
# License: MIT License
from __future__ import annotations
from typing import TYPE_CHECKING, Optional
from ezdxf.math import UCS
from ezdxf.lldxf.const import DXFValueError
from ezdxf.entities.dimstyleoverride import DimStyleOverride
from .dim_base import BaseDimensionRenderer
from .dim_curved import AngularDimension, Angular3PDimension, ArcLengthDimension
from .dim_diameter import DiameterDimension
from .dim_linear import LinearDimension
from .dim_ordinate import OrdinateDimension
from .dim_radius import RadiusDimension
if TYPE_CHECKING:
from ezdxf.entities import Dimension
class DimensionRenderer:
def dispatch(
self, override: DimStyleOverride, ucs: Optional[UCS] = None
) -> BaseDimensionRenderer:
dimension = override.dimension
dim_type = dimension.dimtype
dxf_type = dimension.dxftype()
if dxf_type == "ARC_DIMENSION":
return self.arc_length(dimension, ucs, override)
elif dxf_type == "LARGE_RADIAL_DIMENSION":
return self.large_radial(dimension, ucs, override)
elif dim_type in (0, 1):
return self.linear(dimension, ucs, override)
elif dim_type == 2:
return self.angular(dimension, ucs, override)
elif dim_type == 3:
return self.diameter(dimension, ucs, override)
elif dim_type == 4:
return self.radius(dimension, ucs, override)
elif dim_type == 5:
return self.angular3p(dimension, ucs, override)
elif dim_type == 6:
return self.ordinate(dimension, ucs, override)
else:
raise DXFValueError(f"Unknown DIMENSION type: {dim_type}")
def linear(
self,
dimension: Dimension,
ucs: Optional[UCS] = None,
override: Optional[DimStyleOverride] = None,
):
"""Call renderer for linear dimension lines: horizontal, vertical and rotated"""
return LinearDimension(dimension, ucs, override)
def angular(
self,
dimension: Dimension,
ucs: Optional[UCS] = None,
override: Optional[DimStyleOverride] = None,
):
"""Call renderer for angular dimension defined by two lines."""
return AngularDimension(dimension, ucs, override)
def diameter(
self,
dimension: Dimension,
ucs: Optional[UCS] = None,
override: Optional[DimStyleOverride] = None,
):
"""Call renderer for diameter dimension"""
return DiameterDimension(dimension, ucs, override)
def radius(
self,
dimension: Dimension,
ucs: Optional[UCS] = None,
override: Optional[DimStyleOverride] = None,
):
"""Call renderer for radius dimension"""
return RadiusDimension(dimension, ucs, override)
def large_radial(
self,
dimension: Dimension,
ucs: Optional[UCS] = None,
override: Optional[DimStyleOverride] = None,
):
"""Call renderer for large radial dimension"""
raise NotImplementedError()
def angular3p(
self,
dimension: Dimension,
ucs: Optional[UCS] = None,
override: Optional[DimStyleOverride] = None,
):
"""Call renderer for angular dimension defined by three points."""
return Angular3PDimension(dimension, ucs, override)
def ordinate(
self,
dimension: Dimension,
ucs: Optional[UCS] = None,
override: Optional[DimStyleOverride] = None,
):
"""Call renderer for ordinate dimension."""
return OrdinateDimension(dimension, ucs, override)
def arc_length(
self,
dimension: Dimension,
ucs: Optional[UCS] = None,
override: Optional[DimStyleOverride] = None,
):
"""Call renderer for arc length dimension."""
return ArcLengthDimension(dimension, ucs, override)