NVIDIA Modulus Sym v1.2.0
Sym v1.2.0

# Source code for modulus.sym.geometry.primitives_1d

# Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#
# Unless required by applicable law or agreed to in writing, software
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and

from sympy import Symbol, Abs
import numpy as np
from .geometry import Geometry, csg_curve_naming
from .curve import SympyCurve
from .parameterization import Parameterization, Parameter, Bounds
from .helper import _sympy_sdf_to_sdf

[docs]class Point1D(Geometry):
"""
1D Point along x-axis

Parameters
----------
point : int or float
x coordinate of the point
parameterization : Parameterization
Parameterization of geometry.
"""

def __init__(self, point, parameterization=Parameterization()):
# make sympy symbols to use
x = Symbol("x")

# curves for each side
curve_parameterization = Parameterization({Symbol(csg_curve_naming(0)): (0, 1)})
curve_parameterization = Parameterization.combine(
curve_parameterization, parameterization
)
pt_1 = SympyCurve(
functions={"x": point, "normal_x": 1.0},
area=1.0,
parameterization=curve_parameterization,
)
curves = [pt_1]

# calculate SDF
sdf = x - point

# calculate bounds
bounds = Bounds(
{Parameter("x"): (point, point)}, parameterization=parameterization
)

# initialize
super().__init__(
curves,
_sympy_sdf_to_sdf(sdf),
dims=1,
bounds=bounds,
parameterization=parameterization,
)

[docs]class Line1D(Geometry):
"""
1D Line along x-axis

Parameters
----------
point_1 : int or float
lower bound point of line
point_2 : int or float
upper bound point of line
parameterization : Parameterization
Parameterization of geometry.
"""

def __init__(self, point_1, point_2, parameterization=Parameterization()):
# make sympy symbols to use
x = Symbol("x")

# curves for each side
curve_parameterization = Parameterization({Symbol(csg_curve_naming(0)): (0, 1)})
curve_parameterization = Parameterization.combine(
curve_parameterization, parameterization
)
pt1 = SympyCurve(
functions={"x": point_1, "normal_x": -1},
area=1.0,
parameterization=curve_parameterization,
)
pt2 = SympyCurve(
functions={"x": point_2, "normal_x": 1},
area=1.0,
parameterization=curve_parameterization,
)
curves = [pt1, pt2]

# calculate SDF
dist = point_2 - point_1
center_x = point_1 + dist / 2
sdf = dist / 2 - Abs(x - center_x)

# calculate bounds
bounds = Bounds(
{Parameter("x"): (point_1, point_2)}, parameterization=parameterization
)

# initialize
super().__init__(
curves,
_sympy_sdf_to_sdf(sdf),
dims=1,
bounds=bounds,
parameterization=parameterization,
)

© Copyright 2023, NVIDIA Modulus Team. Last updated on Jan 25, 2024.