Page Menu
Home
Search
Configure Global Search
Log In
Files
F8442
catenary_248.py
Public
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Authored By
Brendon Murphy (meta-androcto)
Nov 13 2013, 1:54 PM
Size
5 KB
Subscribers
None
catenary_248.py
View Options
#!BPY
"""
Name: '_Catenary_248'
Blender: 2.48
Group: 'Misc'
Tooltip: 'shape of a perfectly flexible chain suspended by its ends and acted on by gravity'
"""
__author__
=
"Alejandro Omar Chocano Vasquez"
__url__
=
(
"http://alexvaqp.googlepages.com"
)
__version__
=
"1.0"
__bpydoc__
=
"""\
shape of a perfectly flexible chain
suspended by its ends and acted on by gravity
"""
# --------------------------------------------------------------------------
# Catenary by alexv
# --------------------------------------------------------------------------
# ***** BEGIN GPL LICENSE BLOCK *****
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# ***** END GPL LICENCE BLOCK *****
# --------------------------------------------------------------------------
import
Blender
from
Blender
import
*
from
math
import
*
#sin,cos,pi,atan
from
Blender.Draw
import
*
from
Blender
import
Window
from
Blender.BGL
import
*
#variables
#-----------------------------------------------------------------------------
class
GLOBALES
:
pass
glob
=
GLOBALES
()
glob
.
STEPS
=
Create
(
24
)
#vertices in one turn
#first point
glob
.
X_A
=
Create
(
-
5.000
)
glob
.
Z_A
=
Create
(
1.000
)
#second point
glob
.
X_B
=
Create
(
5.000
)
glob
.
Z_B
=
Create
(
3.000
)
glob
.
a
=
Create
(
2.000
)
#catenary parameter
glob
.
CurveType
=
Create
(
4
)
#Nurb or Poly Curve 0 Poly 4 Nurb
#make catenary
#-----------------------------------------------------------------------------
def
catenary
():
glob
.
SpiralNEW
=
Blender
.
Curve
.
New
(
'Spiral'
)
glob
.
SpiralNEW
.
setFlag
(
1
)
glob
.
SCENE
=
Scene
.
getCurrent
()
glob
.
SpiralOB
=
Object
.
New
(
'Curve'
)
glob
.
SpiralOB
.
link
(
glob
.
SpiralNEW
)
glob
.
SCENE
.
link
(
glob
.
SpiralOB
)
L
=
(
glob
.
X_B
.
val
-
glob
.
X_A
.
val
)
#horizontal length
AZ
=
(
glob
.
Z_B
.
val
-
glob
.
Z_A
.
val
)
*
1
#vertical difference
x_v
=
(
glob
.
X_A
.
val
+
(
L
/
2
-
AZ
*
glob
.
a
.
val
/
L
))
z_v
=
(
glob
.
Z_A
.
val
-
((
pow
((
L
/
2
-
AZ
*
glob
.
a
.
val
/
L
),
2
))
/
(
2
*
glob
.
a
.
val
)))
*
1
AL
=
L
/
glob
.
STEPS
.
val
#horizontal increase
i
=
0
#iteracion
while
i
<=
glob
.
STEPS
.
val
:
Ax
=
i
*
AL
x_i
=
glob
.
X_A
.
val
+
Ax
z_i
=
(
z_v
+
(
pow
((
x_i
-
x_v
),
2
)
/
(
2
*
glob
.
a
.
val
)))
*
1
#y_i=y_a+P*cosh((x_i-x_vr)/P)
if
i
==
0
:
glob
.
SpiralNEW
.
appendNurb
([
x_i
,
0
,
z_i
,
1
,
1
])
#REVISAR PARA PUNTO INICIAL
glob
.
SpiralNEW
[
0
]
.
type
=
glob
.
CurveType
.
val
else
:
glob
.
SpiralNEW
.
appendPoint
(
0
,[
x_i
,
0
,
z_i
,
1
])
i
+=
1
glob
.
SpiralNEW
[
0
]
.
setFlagU
(
2
)
glob
.
SpiralNEW
[
0
]
.
setFlagV
(
2
)
glob
.
SpiralNEW
.
update
()
Blender
.
Window
.
RedrawAll
()
#-----------------------------------------------------------------------------
# Function clear window
#-----------------------------------------------------------------------------
def
clear_window
():
glColor3f
(
0.853
,
0.853
,
0.853
)
glClear
(
GL_COLOR_BUFFER_BIT
)
#-----------------------------------------------------------------------------
#menu
#-----------------------------------------------------------------------------
def
menu
():
clear_window
()
glRasterPos2i
(
39
,
230
)
Text
(
'shape of a perfectly flexible'
)
glRasterPos2i
(
35
,
218
)
Text
(
'chain suspended by its ends'
)
glRasterPos2i
(
80
,
195
)
Text
(
'Catenary'
)
glRasterPos2i
(
15
,
190
)
Text
(
'_____________________________'
)
#TOP BOTTONS
#----------------------------------------------------------------------------------------------
curve_type
=
"Curve type%t|Nurb
%x
4|Poly
%x
0"
glob
.
CurveType
=
Menu
(
curve_type
,
2
,
30
,
160
,
50
,
15
,
glob
.
CurveType
.
val
,
"Curve Type"
)
glob
.
STEPS
=
Number
(
"Vertices"
,
2
,
110
,
160
,
90
,
16
,
glob
.
STEPS
.
val
,
3
,
100
,
"vertices in turn"
)
glRasterPos2i
(
30
,
140
)
Text
(
'introduce coordinates manually '
)
glob
.
X_A
=
Number
(
"X_A "
,
1
,
30
,
120
,
80
,
16
,
glob
.
X_A
.
val
,
-
100.00
,
100.00
,
"X in point A"
)
glob
.
Z_A
=
Number
(
"Z_A "
,
1
,
30
,
100
,
80
,
16
,
glob
.
Z_A
.
val
,
-
100.00
,
100.00
,
"Z in point A"
)
glob
.
X_B
=
Number
(
"X_B "
,
1
,
120
,
120
,
80
,
16
,
glob
.
X_B
.
val
,
-
100.00
,
100.00
,
"X in point B"
)
glob
.
Z_B
=
Number
(
"Z_B "
,
1
,
120
,
100
,
80
,
16
,
glob
.
Z_B
.
val
,
-
100.00
,
100.00
,
"Z in point B"
)
glRasterPos2i
(
60
,
85
)
Text
(
'Catenary Parameter '
)
glob
.
a
=
Slider
(
""
,
3
,
60
,
65
,
110
,
16
,
glob
.
a
.
val
,
0.001
,
100.000
,
1
,
"Catenary Parameter"
)
Button
(
"EXIT"
,
6
,
65
,
30
,
100
,
16
,
"Exit of script"
)
glRasterPos2i
(
15
,
20
)
Text
(
'_____________________________'
)
#----------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------
def
event
(
evt
,
val
):
if
(
evt
==
ESCKEY
and
not
val
):
Exit
()
def
bevent
(
event
):
if
event
==
6
:
Exit
()
else
:
glob
.
SCENE
.
unlink
(
glob
.
SpiralOB
)
if
glob
.
X_A
.
val
==
glob
.
X_B
.
val
:
PupMenu
(
"ERROR X_A must be different of X_B"
)
glob
.
X_A
.
val
=-
5
catenary
()
def
main
():
catenary
()
Register
(
menu
,
event
,
bevent
)
main
()
File Metadata
Details
Mime Type
text/x-python
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
ce/9e/1884c63eae5378b82cca7a521b8d
Event Timeline
Log In to Comment