Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Daniel Boeckenhoff
tfields
Commits
a458ade3
Commit
a458ade3
authored
Mar 18, 2020
by
Daniel Boeckenhoff
Browse files
baffle.stl file added
parent
0abc50aa
Changes
6
Hide whitespace changes
Inline
Side-by-side
data/baffle.stl
0 → 100644
View file @
a458ade3
File added
test/test_core.py
View file @
a458ade3
import
tfields
import
numpy
as
np
from
sympy.abc
import
x
,
y
import
unittest
from
tempfile
import
NamedTemporaryFile
import
pickle
import
sympy
# NOQA: F401
ATOL
=
1e-8
...
...
@@ -42,12 +38,18 @@ class Base_Check(object):
self
.
assertTrue
(
self
.
_inst
.
equal
(
transformer
,
atol
=
ATOL
))
def
test_basic_merge
(
self
):
# create 3 copies with different coord_sys
from
IPython
import
embed
;
embed
()
merge_list
=
[
self
.
_inst
.
copy
()
for
i
in
range
(
3
)]
merge_list
[
0
].
transform
(
tfields
.
bases
.
CARTESIAN
)
merge_list
[
1
].
transform
(
tfields
.
bases
.
CYLINDER
)
merge_list
[
2
].
transform
(
tfields
.
bases
.
SPHERICAL
)
# merge them and check that the first coord_sys is taken
obj
=
type
(
self
.
_inst
).
merged
(
*
merge_list
)
self
.
assertTrue
(
obj
.
coord_sys
==
tfields
.
bases
.
CARTESIAN
)
# check that all copies are the same also with new coord_sys
for
i
in
range
(
len
(
merge_list
)):
value
=
np
.
allclose
(
merge_list
[
0
],
obj
[
i
*
len
(
self
.
_inst
):
(
i
+
1
)
*
...
...
@@ -68,8 +70,10 @@ class Base_Check(object):
pickle
.
dump
(
self
.
_inst
,
out_file
)
out_file
.
flush
()
out_file
.
seek
(
0
)
reloaded
=
pickle
.
load
(
out_file
)
reloaded
=
pickle
.
load
(
open
(
out_file
.
name
,
'rb'
))
self
.
assertTrue
(
self
.
_inst
.
equal
(
reloaded
))
def
tearDown
(
self
):
...
...
test/test_mesh3D.py
View file @
a458ade3
...
...
@@ -22,6 +22,15 @@ class Sphere_Test(Base_Check, unittest.TestCase):
def
test_cut_split
(
self
):
x
,
y
,
z
=
sympy
.
symbols
(
'x y z'
)
halfed
=
self
.
_inst
.
cut
(
x
+
1.
/
100
*
y
>
0
,
at_intersection
=
'split'
)
class
IO_test
(
Base_Check
,
unittest
.
TestCase
):
pass
class
IO_Stl_test
(
IO_test
):
def
setUp
(
self
):
self
.
_inst
=
tfields
.
Mesh3D
.
load
(
r
'../data/baffle.stl'
)
if
__name__
==
'__main__'
:
unittest
.
main
()
unittest
.
main
()
\ No newline at end of file
tfields/core.py
View file @
a458ade3
...
...
@@ -21,6 +21,7 @@ import numpy as np
import
sympy
import
scipy
as
sp
import
tfields.bases
from
nltk.misc.chomsky
import
objects
np
.
seterr
(
all
=
'warn'
,
over
=
'raise'
)
...
...
@@ -1524,8 +1525,10 @@ class TensorFields(Tensors):
@
classmethod
def
merged
(
cls
,
*
objects
,
**
kwargs
):
if
not
all
([
isinstance
(
o
,
cls
)
for
o
in
objects
]):
types
=
[
type
(
o
)
for
o
in
objects
]
# TODO: could allow if all faceScalars are none
raise
TypeError
(
"Merge constructor only accepts {cls} instances."
"Got objects of types {types} instead."
.
format
(
**
locals
()))
inst
=
super
(
TensorFields
,
cls
).
merged
(
*
objects
,
**
kwargs
)
...
...
tfields/mesh3D.py
View file @
a458ade3
...
...
@@ -311,6 +311,17 @@ class Mesh3D(tfields.TensorMaps):
f
.
write
(
"usemtl mtl_{0}
\n
"
.
format
(
last_scalar
))
f
.
write
(
"f {f[0]} {f[1]} {f[2]}
\n
"
.
format
(
f
=
face
))
@
classmethod
def
_load_stl
(
cls
,
path
):
"""
Factory method
Given a path to a stl file, construct the object
"""
import
stl.mesh
mesh
=
stl
.
mesh
.
Mesh
.
from_file
(
path
)
mesh
=
cls
(
vertices
,
faces
=
faces
)
return
mesh
@
classmethod
def
_load_obj
(
cls
,
path
,
*
group_names
):
"""
...
...
tfields/triangles3D.py
View file @
a458ade3
...
...
@@ -113,12 +113,24 @@ class Triangles3D(tfields.TensorFields):
warnings
.
warn
(
"Index error occured for field.__getitem__. Error "
"message: {err}"
.
format
(
**
locals
()))
return
item
@
classmethod
def
_load_stl
(
cls
,
path
):
"""
Factory method
Given a path to a stl file, construct the object
"""
import
stl.mesh
triangles
=
stl
.
mesh
.
Mesh
.
from_file
(
path
)
obj
=
cls
(
triangles
.
vectors
.
reshape
(
-
1
,
3
))
return
obj
@
classmethod
def
merged
(
cls
,
*
objects
,
**
kwargs
):
with
warnings
.
catch_warnings
():
warnings
.
filterwarnings
(
'ignore'
)
obj
=
super
(
Triangles3D
,
cls
).
merged
(
cls
,
*
objects
,
**
kwargs
)
obj
=
super
(
Triangles3D
,
cls
).
merged
(
*
objects
,
**
kwargs
)
if
not
len
(
obj
)
%
3
==
0
:
warnings
.
warn
(
"Input object of size({0}) has no divider 3 and"
" does not describe triangles."
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment