Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
On Thursday, 7th July from 1 to 3 pm there will be a maintenance with a short downtime of GitLab.
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
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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