Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wdb wrapper #21

Merged
merged 9 commits into from
Feb 19, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 7 additions & 2 deletions brlcad/primitives/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,15 @@
from arbn import ARBN
from combination import Combination, negate, intersect, subtract, union, xor, wrap_tree, leaf
from ellipsoid import Ellipsoid, Sphere
from rpc import RPC
from rpc import RPC, RHC
from tgc import TGC, Cone, RCC, TRC
from torus import Torus, ETO
from epa import EPA, EHY
from hyperboloid import Hyperboloid
from particle import Particle

__all__ = [
"Primitive", "ARB8", "ARBN", "Ellipsoid", "Sphere", "RPC", "TGC", "Cone", "RCC", "TRC",
"Primitive", "ARB8", "ARBN", "Ellipsoid", "Sphere", "RPC", "RHC", "Particle",
"TGC", "Cone", "RCC", "TRC", "Torus", "ETO", "EPA", "EHY", "Hyperboloid",
"Combination", "negate", "intersect", "subtract", "union", "xor", "wrap_tree", "leaf"
]
79 changes: 79 additions & 0 deletions brlcad/primitives/epa.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
"""
Python wrappers for the EPA and EHY primitives of BRL-CAD.
"""

from base import Primitive
from brlcad.vmath import Vector


class EPA(Primitive):

def __init__(self, name, base=(0, 0, 0), height=(0, 0, 1), n_major=(0, 1, 0),
r_major=1, r_minor=0.5, copy=False):
Primitive.__init__(self, name=name)
self.base = Vector(base, copy=copy)
self.height = Vector(height, copy=copy)
self.n_major = Vector(n_major, copy=copy)
self.r_major = r_major
self.r_minor = r_minor

def __repr__(self):
return "{}({}, base={}, height={}, n_major={}, r_major={}, r_minor={})".format(
self.__class__.__name__, self.name, repr(self.base), repr(self.height),
repr(self.n_major), self.r_major, self.r_minor
)

def update_params(self, params):
params.update({
"base": self.base,
"height": self.height,
"n_major": self.n_major,
"r_major": self.r_major,
"r_minor": self.r_minor,
})

@staticmethod
def from_wdb(name, data):
return EPA(
name=name,
base=data.epa_V,
height=data.epa_H,
n_major=data.epa_Au,
r_major=data.epa_r1,
r_minor=data.epa_r2,
)


class EHY(EPA):

def __init__(self, name, base=(0, 0, 0), height=(0, 0, 1), n_major=(0, 1, 0),
r_major=1, r_minor=0.5, asymptote=0.1, copy=False):
EPA.__init__(
self, name=name, base=base, height=height, n_major=n_major,
r_major=r_major, r_minor=r_minor, copy=copy
)
self.asymptote = asymptote

def __repr__(self):
return "{}({}, base={}, height={}, n_major={}, r_major={}, r_minor={}, asymptote={})".format(
self.__class__.__name__, self.name, repr(self.base), repr(self.height),
repr(self.n_major), self.r_major, self.r_minor, self.asymptote
)

def update_params(self, params):
EPA.update_params(self, params)
params.update({
"asymptote": self.asymptote,
})

@staticmethod
def from_wdb(name, data):
return EHY(
name=name,
base=data.ehy_V,
height=data.ehy_H,
n_major=data.ehy_Au,
r_major=data.ehy_r1,
r_minor=data.ehy_r2,
asymptote=data.ehy_c,
)
44 changes: 44 additions & 0 deletions brlcad/primitives/hyperboloid.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
"""
Python wrapper for the HYP primitive of BRL-CAD.
"""

from base import Primitive
from brlcad.vmath import Vector


class Hyperboloid(Primitive):

def __init__(self, name, base=(0, 0, 0), height=(0, 0, 1), a_vec=(0, 1, 0),
b_mag=0.5, base_neck_ratio=0.2, copy=False):
Primitive.__init__(self, name=name)
self.base = Vector(base, copy=copy)
self.height = Vector(height, copy=copy)
self.a_vec = Vector(a_vec, copy=copy)
self.b_mag = b_mag
self.base_neck_ratio = base_neck_ratio

def __repr__(self):
return "{}({}, base={}, height={}, a_vec={}, b_mag={}, base_neck_ratio={})".format(
self.__class__.__name__, self.name, repr(self.base), repr(self.height),
repr(self.a_vec), self.b_mag, self.base_neck_ratio
)

def update_params(self, params):
params.update({
"base": self.base,
"height": self.height,
"a_vec": self.a_vec,
"b_mag": self.b_mag,
"base_neck_ratio": self.base_neck_ratio,
})

@staticmethod
def from_wdb(name, data):
return Hyperboloid(
name=name,
base=data.hyp_Vi,
height=data.hyp_Hi,
a_vec=data.hyp_A,
b_mag=data.hyp_b,
base_neck_ratio=data.hyp_bnr,
)
39 changes: 39 additions & 0 deletions brlcad/primitives/particle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
"""
Python wrapper for the Particle primitive of BRL-CAD.
"""

from base import Primitive
from brlcad.vmath import Vector


class Particle(Primitive):

def __init__(self, name, base=(0, 0, 0), height=(0, 0, 1), r_base=0.5, r_end=0.2, copy=False):
Primitive.__init__(self, name=name)
self.base = Vector(base, copy=copy)
self.height = Vector(height, copy=copy)
self.r_base = r_base
self.r_end = r_end

def __repr__(self):
return "{}({}, base={}, height={}, r_base={}, r_end={})".format(
self.__class__.__name__, self.name, repr(self.base), repr(self.height), self.r_base, self.r_end
)

def update_params(self, params):
params.update({
"base": self.base,
"height": self.height,
"r_base": self.r_base,
"r_end": self.r_end,
})

@staticmethod
def from_wdb(name, data):
return Particle(
name=name,
base=data.part_V,
height=data.part_H,
r_base=data.part_vrad,
r_end=data.part_hrad,
)
41 changes: 38 additions & 3 deletions brlcad/primitives/rpc.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""
Python wrapper for the RPC primitive of BRL-CAD.
Python wrappers for the RPC and RHC primitives of BRL-CAD.
"""

from base import Primitive
Expand All @@ -16,8 +16,9 @@ def __init__(self, name, base=(0, 0, 0), height=(-1, 0, 0), breadth=(0, 0, 1), h
self.half_width = half_width

def __repr__(self):
return "RPC({}, base={}, height={}, breadth={}, half_width={})".format(
self.name, repr(self.base), repr(self.height), repr(self.breadth), self.half_width
return "{}({}, base={}, height={}, breadth={}, half_width={})".format(
self.__class__.__name__, self.name, repr(self.base),
repr(self.height), repr(self.breadth), self.half_width
)

def update_params(self, params):
Expand All @@ -37,3 +38,37 @@ def from_wdb(name, data):
breadth=data.rpc_B,
half_width=data.rpc_r,
)


class RHC(RPC):

def __init__(self, name, base=(0, 0, 0), height=(-1, 0, 0), breadth=(0, 0, 1),
half_width=0.5, asymptote=0.1, copy=False):
RPC.__init__(
self, name=name, base=base, height=height,
breadth=breadth, half_width=half_width, copy=copy
)
self.asymptote = asymptote

def __repr__(self):
return "{}({}, base={}, height={}, breadth={}, half_width={}, asymptote={})".format(
self.__class__.__name__, self.name, repr(self.base),
repr(self.height), repr(self.breadth), self.half_width, self.asymptote
)

def update_params(self, params):
RPC.update_params(self, params)
params.update({
"asymptote": self.asymptote,
})

@staticmethod
def from_wdb(name, data):
return RHC(
name=name,
base=data.rhc_V,
height=data.rhc_H,
breadth=data.rhc_B,
half_width=data.rhc_r,
asymptote=data.rhc_c,
)
20 changes: 12 additions & 8 deletions brlcad/primitives/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,13 @@
from base import Primitive
from arbn import ARBN
from ellipsoid import Ellipsoid, Sphere
from rpc import RPC
from rpc import RPC, RHC
from tgc import TGC
from torus import Torus, ETO
from epa import EPA, EHY
from combination import Combination
from hyperboloid import Hyperboloid
from particle import Particle


MAGIC_TO_PRIMITIVE_TYPE = {
Expand All @@ -25,30 +29,30 @@
librt.ID_CLINE: ("CLINE", Primitive, librt.RT_CLINE_INTERNAL_MAGIC, librt.struct_rt_cline_internal),
librt.ID_DSP: ("DSP", Primitive, librt.RT_DSP_INTERNAL_MAGIC, librt.struct_rt_dsp_internal),
librt.ID_EBM: ("EBM", Primitive, librt.RT_EBM_INTERNAL_MAGIC, librt.struct_rt_ebm_internal),
librt.ID_EHY: ("EHY", Primitive, librt.RT_EHY_INTERNAL_MAGIC, librt.struct_rt_ehy_internal),
librt.ID_EHY: ("EHY", EHY, librt.RT_EHY_INTERNAL_MAGIC, librt.struct_rt_ehy_internal),
librt.ID_ELL: ("ELL", Ellipsoid, librt.RT_ELL_INTERNAL_MAGIC, librt.struct_rt_ell_internal),
librt.ID_SPH: ("ELL", Sphere, librt.RT_ELL_INTERNAL_MAGIC, librt.struct_rt_ell_internal),
librt.ID_EPA: ("EPA", Primitive, librt.RT_EPA_INTERNAL_MAGIC, librt.struct_rt_epa_internal),
librt.ID_ETO: ("ETO", Primitive, librt.RT_ETO_INTERNAL_MAGIC, librt.struct_rt_eto_internal),
librt.ID_EPA: ("EPA", EPA, librt.RT_EPA_INTERNAL_MAGIC, librt.struct_rt_epa_internal),
librt.ID_ETO: ("ETO", ETO, librt.RT_ETO_INTERNAL_MAGIC, librt.struct_rt_eto_internal),
librt.ID_EXTRUDE: ("EXTRUDE", Primitive, librt.RT_EXTRUDE_INTERNAL_MAGIC, librt.struct_rt_extrude_internal),
librt.ID_GRIP: ("GRIP", Primitive, librt.RT_GRIP_INTERNAL_MAGIC, librt.struct_rt_grip_internal),
librt.ID_HALF: ("HALF", Primitive, librt.RT_HALF_INTERNAL_MAGIC, librt.struct_rt_half_internal),
librt.ID_HF: ("HF", Primitive, librt.RT_HF_INTERNAL_MAGIC, librt.struct_rt_hf_internal),
librt.ID_HYP: ("HYP", Primitive, librt.RT_HYP_INTERNAL_MAGIC, librt.struct_rt_hyp_internal),
librt.ID_HYP: ("HYP", Hyperboloid, librt.RT_HYP_INTERNAL_MAGIC, librt.struct_rt_hyp_internal),
librt.ID_METABALL: ("METABALL", Primitive, librt.RT_METABALL_INTERNAL_MAGIC, librt.struct_rt_metaball_internal),
librt.ID_BSPLINE: ("NURB", Primitive, librt.RT_NURB_INTERNAL_MAGIC, librt.struct_rt_nurb_internal),
librt.ID_POLY: ("PG", Primitive, librt.RT_PG_INTERNAL_MAGIC, librt.struct_rt_pg_internal),
librt.ID_PIPE: ("PIPE", Primitive, librt.RT_PIPE_INTERNAL_MAGIC, librt.struct_rt_pipe_internal),
librt.ID_PARTICLE: ("PARTICLE", Primitive, librt.RT_PART_INTERNAL_MAGIC, librt.struct_rt_part_internal),
librt.ID_PARTICLE: ("PARTICLE", Particle, librt.RT_PART_INTERNAL_MAGIC, librt.struct_rt_part_internal),
librt.ID_REVOLVE: ("REVOLVE", Primitive, librt.RT_REVOLVE_INTERNAL_MAGIC, librt.struct_rt_revolve_internal),
librt.ID_RHC: ("RHC", Primitive, librt.RT_RHC_INTERNAL_MAGIC, librt.struct_rt_rhc_internal),
librt.ID_RHC: ("RHC", RHC, librt.RT_RHC_INTERNAL_MAGIC, librt.struct_rt_rhc_internal),
librt.ID_RPC: ("RPC", RPC, librt.RT_RPC_INTERNAL_MAGIC, librt.struct_rt_rpc_internal),
librt.ID_SKETCH: ("SKETCH", Primitive, librt.RT_SKETCH_INTERNAL_MAGIC, librt.struct_rt_sketch_internal),
librt.ID_SUBMODEL: ("SUBMODEL", Primitive, librt.RT_SUBMODEL_INTERNAL_MAGIC, librt.struct_rt_submodel_internal),
librt.ID_SUPERELL: ("SUPERELL", Primitive, librt.RT_SUPERELL_INTERNAL_MAGIC, librt.struct_rt_superell_internal),
librt.ID_TGC: ("TGC", TGC, librt.RT_TGC_INTERNAL_MAGIC, librt.struct_rt_tgc_internal),
librt.ID_REC: ("REC", TGC, librt.RT_TGC_INTERNAL_MAGIC, librt.struct_rt_tgc_internal),
librt.ID_TOR: ("TOR", Primitive, librt.RT_TOR_INTERNAL_MAGIC, librt.struct_rt_tor_internal),
librt.ID_TOR: ("TOR", Torus, librt.RT_TOR_INTERNAL_MAGIC, librt.struct_rt_tor_internal),
librt.ID_VOL: ("VOL", Primitive, librt.RT_VOL_INTERNAL_MAGIC, librt.struct_rt_vol_internal),
librt.ID_PNTS: ("PNTS", Primitive, librt.RT_PNTS_INTERNAL_MAGIC, librt.struct_rt_pnts_internal),
librt.ID_ANNOTATION: ("ANNOTATION", Primitive, librt.RT_ANNOTATION_INTERNAL_MAGIC, librt.struct_rt_annotation_internal),
Expand Down
77 changes: 77 additions & 0 deletions brlcad/primitives/torus.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
"""
Python wrappers for the TOR and ETO primitives of BRL-CAD.
"""

from base import Primitive
from brlcad.vmath import Vector


class Torus(Primitive):

def __init__(self, name, center=(0, 0, 0), n=(0, 0, 1), r_revolution=1, r_cross=0.2, copy=False):
Primitive.__init__(self, name=name)
self.center = Vector(center, copy=copy)
self.n = Vector(n, copy=copy)
self.r_revolution = r_revolution
self.r_cross = r_cross

def __repr__(self):
return "{}({}, center={}, n={}, r_revolution={}, r_cross={})".format(
self.__class__.__name__, self.name, repr(self.center), repr(self.n), self.r_revolution, self.r_cross
)

def update_params(self, params):
params.update({
"center": self.center,
"n": self.n,
"r_revolution": self.r_revolution,
"r_cross": self.r_cross,
})

@staticmethod
def from_wdb(name, data):
return Torus(
name=name,
center=data.v,
n=data.h,
r_revolution=data.r_a,
r_cross=data.r_h,
)


class ETO(Primitive):

def __init__(self, name, center=(0, 0, 0), n=(0, 0, 1),
s_major=(0, 0.5, 0.5), r_revolution=1, r_minor=0.2, copy=False):
Primitive.__init__(self, name=name)
self.center = Vector(center, copy=copy)
self.n = Vector(n, copy=copy)
self.s_major = Vector(s_major, copy=copy)
self.r_revolution = r_revolution
self.r_minor = r_minor

def __repr__(self):
return "{}({}, center={}, n={}, s_major={}, r_revolution={}, r_minor={})".format(
self.__class__.__name__, self.name, repr(self.center), repr(self.n),
repr(self.s_major), self.r_revolution, self.r_minor
)

def update_params(self, params):
params.update({
"center": self.center,
"n": self.n,
"s_major": self.s_major,
"r_revolution": self.r_revolution,
"r_minor": self.r_minor,
})

@staticmethod
def from_wdb(name, data):
return ETO(
name=name,
center=data.eto_V,
n=data.eto_N,
s_major=data.eto_C,
r_revolution=data.eto_r,
r_minor=data.eto_rd,
)