[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3421] contrib/py/scripts/addons/ add_mesh_clusters/add_mesh_cluster.py:
Clemens Barth
barth at root-1.de
Wed May 30 00:03:50 CEST 2012
Revision: 3421
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3421
Author: blendphys
Date: 2012-05-29 22:03:48 +0000 (Tue, 29 May 2012)
Log Message:
-----------
The code for calculating cluster shapes has been improved.
Last changes have been done.
Blendphys.
Modified Paths:
--------------
contrib/py/scripts/addons/add_mesh_clusters/add_mesh_cluster.py
Modified: contrib/py/scripts/addons/add_mesh_clusters/add_mesh_cluster.py
===================================================================
--- contrib/py/scripts/addons/add_mesh_clusters/add_mesh_cluster.py 2012-05-29 18:23:52 UTC (rev 3420)
+++ contrib/py/scripts/addons/add_mesh_clusters/add_mesh_cluster.py 2012-05-29 22:03:48 UTC (rev 3421)
@@ -195,16 +195,6 @@
radii,radii_ionic)
ATOM_CLUSTER_ELEMENTS.append(li)
-# -----------------------------------------------------------------------------
-# Some small vector routines
-
-def vec_dist_point_plane(ne, gamma, v):
-
- return abs( (ne * v - gamma) / ne.length )
-
-def vec_on_plane(n,atom,dist):
-
- return (atom - n * (dist/n.length)).length
# -----------------------------------------------------------------------------
# Routines for shapes
@@ -311,21 +301,7 @@
g4 = g1
n5 = Vector(( 0.0, 0.0, -1/2)) * size2
g5 = -1/8 * size3
-
- """
- distance_plane_1 = vec_dist_point_plane(n1, g1, atom_pos)
- on_plane_1 = vec_on_plane(n1,atom_pos,distance_plane_1)
- distance_plane_2 = vec_dist_point_plane(n2, g2, atom_pos)
- on_plane_2 = vec_on_plane(n2,atom_pos,distance_plane_2)
- distance_plane_3 = vec_dist_point_plane(n3, g3, atom_pos)
- on_plane_3 = vec_on_plane(n3,atom_pos,distance_plane_3)
- distance_plane_4 = vec_dist_point_plane(n4, g4, atom_pos)
- on_plane_4 = vec_on_plane(n4,atom_pos,distance_plane_4)
- distance_plane_5 = vec_dist_point_plane(n5, g5, atom_pos)
- on_plane_5 = vec_on_plane(n5,atom_pos,distance_plane_5)
- """
-
distance_plane_1 = abs((n1 * atom_pos - g1)/n1.length)
on_plane_1 = (atom_pos - n1 * (distance_plane_1/n1.length)).length
distance_plane_2 = abs((n2 * atom_pos - g2)/n2.length)
@@ -398,12 +374,16 @@
a = size/2.0
#c = size/2.0*cos((30/360)*2.0*pi)
- c= size * 0.4330127020
+ c = size * 0.4330127020
#s = size/2.0*sin((30/360)*2.0*pi)
s = size * 0.25
#h = 2.0 * (sqrt(6.0)/3.0) * c
h = 1.632993162 * c
+ """
+ Please, if possible leave all this! The code documents the
+ mathemetical way of cutting a tetraeder.
+
P1 = Vector((0.0, a, 0.0))
P2 = Vector(( -c, -s, 0.0))
P3 = Vector(( c, -s, 0.0))
@@ -437,16 +417,26 @@
v42 = P2 - P3
n4 = v41.cross(v42)
g4 = -n4 * P1
+ """
- distance_plane_1 = vec_dist_point_plane(n1, g1, atom_pos)
- on_plane_1 = vec_on_plane(n1,atom_pos,distance_plane_1)
- distance_plane_2 = vec_dist_point_plane(n2, g2, atom_pos)
- on_plane_2 = vec_on_plane(n2,atom_pos,distance_plane_2)
- distance_plane_3 = vec_dist_point_plane(n3, g3, atom_pos)
- on_plane_3 = vec_on_plane(n3,atom_pos,distance_plane_3)
- distance_plane_4 = vec_dist_point_plane(n4, g4, atom_pos)
- on_plane_4 = vec_on_plane(n4,atom_pos,distance_plane_4)
+ n1 = Vector(( -h*(a+s), c*h, c*a ))
+ g1 = -1/2*c*(a*h+s*h)
+ n2 = Vector(( 0, -2*c*h, 2*c*s ))
+ g2 = -1/2*c*(a*h+s*h)
+ n3 = Vector(( h*(a+s), c*h, a*c ))
+ g3 = -1/2*c*(a*h+s*h)
+ n4 = Vector(( 0, 0, -2*c*(s+a) ))
+ g4 = -1/2*h*c*(s+a)
+ distance_plane_1 = abs((n1 * atom_pos - g1)/n1.length)
+ on_plane_1 = (atom_pos - n1 * (distance_plane_1/n1.length)).length
+ distance_plane_2 = abs((n2 * atom_pos - g2)/n2.length)
+ on_plane_2 = (atom_pos - n2 * (distance_plane_2/n2.length)).length
+ distance_plane_3 = abs((n3 * atom_pos - g3)/n3.length)
+ on_plane_3 = (atom_pos - n3 * (distance_plane_3/n3.length)).length
+ distance_plane_4 = abs((n4 * atom_pos - g4)/n4.length)
+ on_plane_4 = (atom_pos - n4 * (distance_plane_4/n4.length)).length
+
regular = True
inner = True
if(atom_pos.length > on_plane_1):
@@ -471,49 +461,24 @@
#h = 2.0 * (sqrt(6.0)/3.0) * c
h = 1.632993162 * c
- P1 = Vector((0.0, a, 0.0))
- P2 = Vector(( -c, -s, 0.0))
- P3 = Vector(( c, -s, 0.0))
- P4 = Vector((0.0, 0.0, h))
- C = (P1+P2+P3+P4)/4.0
- P1 = P1 - C
- P2 = P2 - C
- P3 = P3 - C
- P4 = P4 - C
-
- # First face
- v11 = P1 - P2
- v12 = P1 - P4
- n1 = v11.cross(v12)
- g1 = -n1 * P1
-
- # Second face
- v21 = P2 - P3
- v22 = P2 - P4
- n2 = v21.cross(v22)
- g2 = -n2 * P2
+ n1 = Vector(( -h*(a+s), c*h, c*a ))
+ g1 = -1/2*c*(a*h+s*h)
+ n2 = Vector(( 0, -2*c*h, 2*c*s ))
+ g2 = -1/2*c*(a*h+s*h)
+ n3 = Vector(( h*(a+s), c*h, a*c ))
+ g3 = -1/2*c*(a*h+s*h)
+ n4 = Vector(( 0, 0, -2*c*(s+a) ))
+ g4 = -1/2*h*c*(s+a)
- # Third face
- v31 = P3 - P1
- v32 = P3 - P4
- n3 = v31.cross(v32)
- g3 = -n3 * P3
+ distance_plane_1 = abs((n1 * atom_pos - g1)/n1.length)
+ on_plane_1 = (atom_pos - n1 * (distance_plane_1/n1.length)).length
+ distance_plane_2 = abs((n2 * atom_pos - g2)/n2.length)
+ on_plane_2 = (atom_pos - n2 * (distance_plane_2/n2.length)).length
+ distance_plane_3 = abs((n3 * atom_pos - g3)/n3.length)
+ on_plane_3 = (atom_pos - n3 * (distance_plane_3/n3.length)).length
+ distance_plane_4 = abs((n4 * atom_pos - g4)/n4.length)
+ on_plane_4 = (atom_pos - n4 * (distance_plane_4/n4.length)).length
- # Forth face
- v41 = P2 - P1
- v42 = P2 - P3
- n4 = v41.cross(v42)
- g4 = -n4 * P1
-
- distance_plane_1 = vec_dist_point_plane(n1, g1, atom_pos)
- on_plane_1 = vec_on_plane(n1,atom_pos,distance_plane_1)
- distance_plane_2 = vec_dist_point_plane(n2, g2, atom_pos)
- on_plane_2 = vec_on_plane(n2,atom_pos,distance_plane_2)
- distance_plane_3 = vec_dist_point_plane(n3, g3, atom_pos)
- on_plane_3 = vec_on_plane(n3,atom_pos,distance_plane_3)
- distance_plane_4 = vec_dist_point_plane(n4, g4, atom_pos)
- on_plane_4 = vec_on_plane(n4,atom_pos,distance_plane_4)
-
inner = False
if(atom_pos.length > on_plane_1):
inner = True
@@ -613,25 +578,6 @@
n8 = Vector((-1/4, 1/4, 1/4)) * size2
g8 = g1
- """
- distance_plane_1 = vec_dist_point_plane(n1, g1, atom_pos)
- on_plane_1 = vec_on_plane(n1,atom_pos,distance_plane_1)
- distance_plane_2 = vec_dist_point_plane(n2, g2, atom_pos)
- on_plane_2 = vec_on_plane(n2,atom_pos,distance_plane_2)
- distance_plane_3 = vec_dist_point_plane(n3, g3, atom_pos)
- on_plane_3 = vec_on_plane(n3,atom_pos,distance_plane_3)
- distance_plane_4 = vec_dist_point_plane(n4, g4, atom_pos)
- on_plane_4 = vec_on_plane(n4,atom_pos,distance_plane_4)
- distance_plane_5 = vec_dist_point_plane(n5, g5, atom_pos)
- on_plane_5 = vec_on_plane(n5,atom_pos,distance_plane_5)
- distance_plane_6 = vec_dist_point_plane(n6, g6, atom_pos)
- on_plane_6 = vec_on_plane(n6,atom_pos,distance_plane_6)
- distance_plane_7 = vec_dist_point_plane(n7, g7, atom_pos)
- on_plane_7 = vec_on_plane(n7,atom_pos,distance_plane_7)
- distance_plane_8 = vec_dist_point_plane(n8, g8, atom_pos)
- on_plane_8 = vec_on_plane(n8,atom_pos,distance_plane_8)
- """
-
distance_plane_1 = abs((n1 * atom_pos - g1)/n1.length)
on_plane_1 = (atom_pos - n1 * (distance_plane_1/n1.length)).length
distance_plane_2 = abs((n2 * atom_pos - g2)/n2.length)
More information about the Bf-extensions-cvs
mailing list