Arch Ogive

here is may be the beginning for a great script for classical architecture
and the shapes of arches and ogive windows and doors ect…

here is the difference between Ogive and Parabola arches
see pic

Thanks

Thanks for the visuals. I’ll start coding tomorrow.

Edit: for people who are wondering what this is about, check here.

with the basic done then i wold like to make a script to do windows like this one
from classical architecture

see pic

everything is pure math and easy to do in a script

and with the script you redo it in a a second
instead of doing it by hand which may takes a few hours the first time

Salutations

if it is possible i think would easier to do it with polar coordinates
because later on if you want to modify it to do stone it will be easier

so here is an example of a polar script i did


 
#!BPY
"""
Name: 'Arch / polar Parabola RickyBlender'
Blender: 2.48a
Group: 'AddMesh'
"""
import BPyAddMesh
import Blender
from math import sqrt, sin, cos, pi
 
def add_paraboloid(segments,rings,radius,height):
v=[]
f=[]
#Creating the verticies
 
dtd=10 # DELTA DEGREES
dtr=dtd*pi/180
AMAX=100
AMAXR=AMAX*pi/180
rm1=0
 
pr=1.6
z=0
 
 
# loop with step 
#for i in range(1,10, 2):
# print i
 
for i in range(1,rings+1):
 
an1=dtr*i # angle in radians
 
rm1=i 
r1=pr/(1+cos(an1))
rx=r1*cos(an1)
ry=r1*sin(an1)
 
if an1 >AMAXR:
break # Break away i > than angle max 
 
 
print 'I = ',i,' Ang = ',an1*180/pi ,' degrees radius = ',r1, 'x = ',rx,' y = ',ry
v.append([rx,z,ry])
v.append([rx,z,-ry])
 
 
#adding the central vertex
 
# angle is zero degrees
an2=0
r1=pr/(1+cos(an2))
rx=r1*cos(an2)
ry=r1*sin(an2) 
v.append([rx,z,ry])
 
 
 
 
return v,f
 
 
 
def main():
 
# segments=Blender.Draw.Create(32) # number segment in 3 D around 
# if segment = 1 do 1/2 parabola - if segment= 2 do full parabola 
segments=Blender.Draw.Create(2) 
rings=Blender.Draw.Create(70)
height=Blender.Draw.Create(1.0)
radius=Blender.Draw.Create(1.0)
 
# if segment = 1 do 1/2 parabola - if segment= 2 do full parabola 
 
if not Blender.Draw.PupBlock('Add Polar Parabola',[\
('segments:',segments,1,500,'number of segments per ring'),\
('rings:',rings,2,500,'number of rings'),\
('height:',height,0.0,10.0,'height of parabola'),\
('radius:',radius,0.0,10.0,'radius of parabola'),\
]):
return 
 
v,f = add_paraboloid(segments.val,rings.val,radius.val,height.val)
BPyAddMesh.add_mesh_simple('Parabola',v,[],f)
main()
 

the srpt is not complete yet but it’s a beginning

also check the pic for the formula

the last [pic show a little what you can do with arches on building

Salutations

here are 2 other common type of arches used for windows in classical architecture

see pic for Arch lancet and the Arch equilateral

Salutations

:eek:
woooowoow!
It seems very very nice… In moments like this i’d wish to know python programming, just to help in any way… but… :frowning:

well, thanks in advance for this script guys!

This looks like it will be very useful!
I’ll definatly be watching this.

Alright, coding has started.
http://bartius.crouch2.googlepages.com/arch_ss01.png

The results aren’t as spectacular as what Ricky has posted so far, but you’ve got to start somewhere.

And a picture of the GUI so far. At this stage it is just there to make it easier for me to test the script and so it will probably still change a lot.
http://bartius.crouch2.googlepages.com/arch_ss02.png

Implemented:

  • Basic foundation for creating arches
  • Circle arch
  • Parabola arch

Some notes:
Circle

  • The width parameter sets the distance along the x-axis between the two points on the curve that are furthest away from each other (on that axis).
  • Radials tells how many radials the circle should consist of, also look at the image for a better idea of how it works.
  • Resolution is the number of vertices on the curve. However when you enter an even number you wouldn’t have a center vertex at the highest point of the curve, so in that case an extra vertex is added.
    Parabola
  • Width and resolution work the same as with circle

Ricky: for both shapes I’ve used polar coordinates, but I’m not certain what you meant in the other thread:

because later on if you want to put stones on that shape it is easier to follow it
because the angle is constant and the lines are perpendicular to the tangent!
On the parabola I can see the angle being constant, but I don’t get the lines being perpendicular (see image below)
http://bartius.crouch2.googlepages.com/arch_ss03.png

One other question I have about parabolas: how can I get them more pointy?
I’m using: r = p / (1+sin(t))
But changing p doesn’t help obviously, it only scale the parabola. Any ideas?

Next on the list is the ogive, but that will probably take a bit longer. I will have to do some research on that first.

Oh, and here is a snapshot (so no cleaning) of my code so far:

import bpy
import Blender
from Blender import *
from math import cos, sin, pi

print "_____________v0.1________________________"

# Global constants
c = {
    'Circle': 1,
    'Parabola': 2,
    'ArchTypes': "Circle|Parabola",
    
    'Bheight': 20,        # normal Button height
    
    'BEcreate': 101,    # BE = Button Event
    'BEexit': 102,
    'BEresolution': 103,
    'BEwidth': 104,
    'BEarchtype': 105,
    'BEradials': 106
    }

# Global variables
g = {
    'ArchType' : Draw.Create(c['Circle']),
    'Resolution': Draw.Create(10),
    'Width': Draw.Create(2.0),
    'Radials': Draw.Create(1.0)
    }

# Create the vertice, edge and face data
def createData():
    v = []
    ed = []
    f = []
    res = int(g['Resolution'].val)
    width = g['Width'].val
    
    # Create data for a circle
    if g['ArchType'].val == c['Circle']:
        # Factor to set the widest point of the circle always to the given width
        if g['Radials'].val<1.0:
            xScale = (width/2.0)/(cos((g['Radials'].val/2.0-0.5)*pi)/2.0*width)
        else:
            xScale = 1
        # Factor to set the lowest point of the circle at z = 0
        yOffset = sin((g['Radials'].val/2.0-0.5)*pi)/2.0*width*xScale
        if res%2 == 1:
            res-=1
        for i in xrange(res+1):
            t = ((i/float(res))*g['Radials'].val-g['Radials'].val/2.0+0.5)*pi
            x = cos(t)/2.0*width*xScale
            y = sin(t)/2.0*width*xScale+yOffset
            v.append([x,0,y])
        for i in xrange(res):
            ed.append([i, i+1])
    
    # Create data for a parabola
    elif g['ArchType'].val == c['Parabola']:
        if res%2 == 1:
            res-=1
        for i in xrange(res+1):
            t = i/float(res)*pi
            p = width/2.0
            if sin(t) != -1:
                r = p / (1+sin(t))
                x = r*cos(t)
                y = r*sin(t)
                v.append([x,0,y])
        for i in xrange(res):
            ed.append([i,i+1])
    
    return v, ed

# Add the mesh to the scene
def addMesh(v, ed):
    me = bpy.data.meshes.new('Arch')
    me.verts.extend(v)
    me.edges.extend(ed)
    scn = bpy.data.scenes.active
    ob = scn.objects.new(me, 'Arch')
    scn.objects.active = ob
    scn.objects.selected = [ob]
    Blender.Redraw()

# Calls the correct functions
def main():
    v, ed = createData()
    addMesh(v, ed)

################## GUI ##############################

# Drawing the GUI
def gui():
    Draw.PushButton("Create", c['BEcreate'], 5, 5, 50, c['Bheight'], "Create the mesh")
    Draw.PushButton("Exit", c['BEexit'], 75, 5, 50, c['Bheight'], "Exit the script, created meshes won't be deleted")
    g['Resolution'] = Draw.Number("Resolution: ", c['BEresolution'], 5, 30, 120, c['Bheight'], g['Resolution'].val, 2, 100, "Higher values result in more vertices and smoother shapes")
    g['Width'] = Draw.Number("Width: ", c['BEwidth'], 5, 55, 120, c['Bheight'], g['Width'].val, 0.1, 10, "Width of the shape in Blender Units")
    if g['ArchType'].val == c['Circle']:
        g['Radials'] = Draw.Number("Radials ", c['BEradials'], 5, 80, 120, c['Bheight'], g['Radials'].val, 0.1, 1.9, "Angle of the centrepoint of the arch. 1 = 1*pi = half a circle")
    g['ArchType'] = Draw.Menu("Arch Type%t|"+c['ArchTypes'], c['BEarchtype'], 5, 105, 120, c['Bheight'], g['ArchType'].val, "The shape of the arch")

# Processing of keyboard and mouse events
def event(evt,val):
    if evt == Draw.ESCKEY or evt == Draw.QKEY or evt == Draw.XKEY:
        Draw.Exit()

# Processing of button events
def bevent(evt):
    if evt == c['BEcreate']:
        main()
    elif evt == c['BEexit']:
        Draw.Exit()
    elif evt == c['BEresolution']:
        pass
    elif evt == c['BEwidth']:
        pass
    elif evt == c['BEarchtype']:
        Draw.Redraw()
    elif evt == c['BEradials']:
        pass

Draw.Register(gui, event, bevent)

you cannot have pointed parabola this is where you have to go with what is called ogive arches made with 2 segment of circle - i think i’v include an example of this earlier check it out!

now in terms of names

i think for the widt of arches it is called more often like Span of base

for the height well you can find sag ect,
i’ll try to find other more common definitions ind the standar litterature for architecture

now the inside of an arch is called the intrados and the outise the extrados
which can be parabola or straight it’s the upper part of the arch
like for a bridge the top is straight not like a parabola generaly specaking there are some bridge with a curvying slab going up toward the center of the brdige too

but this has to do with the sthength of the structure and is outside this little thread content i guess

i’ll be back with other answers to your questions later on this night

Saluations

1 - for most of the arches the stone or bricks lines are going to the center of the arches
if there is one or 2 1/2 circles to make as in the case of ogive arches
see pic which i have done very fast and not very precise

the lines are normal to the intrados or extrados if the same shape as intrados
going to the center of the circles or circles

2 - i m wondering if it would be good to have an extra object added to help set in stones like guides lines as radials lines of a circle - one or two in the case of ogive arches

3 - for the ogives arches i think there are a few types for theses

1- is the full width ogive - the equilateral ogive
2 - the 1/3 ogives lancet ogive thre a pic already given earlier on this
3- the oversize ogives with a ration greater than one as shown earlier
let say with a factor < than 1 like 1.2 or 1.4 ect…
4- the general one where the factor can be varied fron almost 0 to whatever you want
5 - you also have the type like horshoe which have 2 types
i’ll put a pic for that later

Salutations

Wow! This will definitely add a lot to Blender! Looking forward to seeing this finished. Do you plan on integrating this into the normal Blender release? Or will it be a separate addon?

i doubt that this will be included in blender
but it will be a good script for people dong works with classical architecture
at least as a tool to help

i’v included some more info on different types of arches

see pic

SAlutations

ounce you ahve the perfect arch shape then you can begin modelling archivolt door
with nail-head and dogtooth

see pic

the last pic is for trfoil arches which are found mostly in door and windows

Salutations

last i began doing by hand some trefoil and quadfoil
i wish i had a script to do the initial shape to do it it would have save a lot of time

see pic

mind you that you can find more than 3 foils it can go up to 5 and 6 foils
here are some of the dwg i did also

Salutations

ok i’v been able to download the script and make it work

GREAT WORK ITs’ BEGINNING TO TAKE FORM AND LOOKS VERY PROMISSING
IF YOU NEED MORE TIME OR WANT TO TAKE A MONTH OR 2 TO DO IT
JUST SAY SO I DON’T WANT TO SOUND LIKE YOUR BOSS OR TO CREATE PRESSURE
AND SCREW UP YOUR SHCEDULE OR OTHER PRIORITIES IN LIFE !
I WISH I KNEW MORE IN TERM OF PYTHON PROGRAMMATION
BUT I’M STILL A NEWBIE AND LEARNING NEW THINGS WITH THIS NEW
SCRIPT IT’S FUN TO LEARN NEW THINGS IN PYTHON

RESUME
i did a lot of arches for classical architecture and know the pit fall
when trying to do arches to set in somes stones and it not easy to
work when you have to do all the PRECISE shapes FOR ARCHES ect
so this script WILL help a lot to get the right shape with
the required resolution
and that’s why i think it is an important tool that should
proivide the needed guides lines to help complete models of arches
FOR CLASSICAL ARCHITECTURE OR WHATEVER ELSE MODEL WITH ARCHES

AND i thank you very much for helping getting this script working
i’m certain many people will appreciate this new script

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

SO HERE ARE SOME COMMENTS and suggestions ON THIS NEW SCRIPT

1 -script works and some color would be nice - later on

2 - Definitions for radial and resolution

with the use of polar i would think this would be the same thing?
i mean the number of segment is equal to the number of radial
why have 2 variables here
not certain what the goal is can you explain more
I THINK THE WORD SEGMENT IS MORE APPROPIRATE HERE I THINK !
LIKE IN BLENDER WHEN YOU ADD A CIRCLE THE NUMBER OF SEGMENTS DEFINE
HOW MANY RADIALS OR VERTICIES YOU HAVE IN A WAY

3 - when using theses shape for arches it would be nice to
have the radials lines if needed as guidelines to set stones
in place but this should be an independant object so it can be
removed afterward

4 - Also if required write the names and height span of the arch
now i can add this later myself i know how
WHEN DOING ARCH PARABOLA IT WOULD BE NICE TO ADD THE
LOCATION OF THE FOCUS - BUT THIS IS MORE A NICE THING
WHEN PRINTING THE DATA
LIKE LOCATION OF FOCUS THE LATUS RECTUM ARC LENGHT
FOR PEOPLE REQUIREING THE DATA FOR MATH DATA

5- if required a double arch where the thickness can be specified would also
be a good thing to guide to set stone in place
this thickness would be added to the basic widht of the first arch
to draw the second arch
6 - a programmable name would be good THING TOO i think

7 - it would be appropriate to also have a vertex or 2 at the center added

if required to help get the center of the basic circle or 2 circles
in case of ogives arches

8 - IN THE SCRIPT I SEE A VARIALBE FOR THE HEIGHT BUT DON’T SEE
ANY BUTTON FOR IT

9 - I SEE THERE IS PROVISON FOR FACES
IN THE CASE OF DOULBE PARABOLA OR ARCHES IT WOULD BE A GOOD OPTION
TO HAVE THE FACES INCLUDED WITH A TOGGLE BUTTON AS AN OPTION

HOPE IT HELPS YOU DEFINED AND UNDERSTAND MORE ABOUT ARCHES
I HOPE THIS SCRIPT CAN BECOME PART OF BLENDER IT WOULD BE
A GREAT TOOL FOR EVERYBODY

IF YOU HaVE ANY QUESTIONS DON’T HESITATE PUT IT UP ON wip OR pm ME
I’LL BE GLAD TO HELP

i’v included 2 pic one for a new suggested layout
and one showing a 3D arch with stone wich can be added easily if you have good guide lines
like a suggested earlier

sorry should have use small letters

this is a great new tool

SALUTATIONS

look at pic i’v shown that in case of ogive arch you need to 1/2 circles

for the lancet there may be oneparamete to set the new center on each side of the base from wich you can draw the 2 1/2 circle making the ogive

with the equilateral one the centers are at the end of the base

see pic

hoe this help you

SAlutations

Don’t worry about putting too much pressure on me, when I don’t have time or don’t want to do something, I simply won’t do it. This script is interesting me though, so I work on it as my free time permits.

Implemented since the previous version:

  • The Ogive shape. It uses a parameter called ‘Sharpness’, which is exactly the same as defined in this wikipedia article.
  • Changed width to span and archtype to intrados
  • Keybrick. This defines whether you want the top of the intrados to be flat (so it allows to position a keybrick at that location) or whether there should be a vertex at the highest point of the intrados

Not implemented yet, but started working on:

  • Ogee shape. (it’s already an option in the gui, but it isn’t working yet. Since this code is only a snapshot of what I’m currently working on, I didn’t feel like removing it)
  • ID properties. This is to allow editing arches that have been created a previous time (it saves all information inside the blend file)

Some quick (I’ve got to run) replies to Ricky:
1 - Colour etc, are for at the end. I’m first concentrating on getting everything to work properly.

2 - I have to think about these two for a bit. They are two different things, but the words I chose weren’t very good. I will have to think about this for a bit.

3 - I’ve actually already kept this in mind while writing the code, as I was planning on adding this in the next stage. So it’s on my todo-list.

4 & 7 - This would be nice to add as an optional toggle. Just press the button if you need it. Added to todo-list

5 - I’m actually entertaining a much more ambitious idea that will totally take care of this, but I’ll keep silent for now as I don’t know if I’ll be able to pull it off.

6 - Good idea, and easy to implement. I will add it to the next version.

8 - Height is determined by the other variable you set, so you can’t manually set it. The height variable you saw is to set the height of the buttons to 20 pixels.

9 - Faces will indeed be included at a later stage.

And here is a new snapshot of the code:

import bpy
import Blender
from Blender import *
from math import cos, sin, tan, pi, acos, atan

print "_____________v0.11________________________"

# Global constants
c = {
    'Circle': 1,
    'Ogee': 2,
    'Ogive': 3,
    'Parabola': 4,
    'Intrados': "Circle|Ogee|Ogive|Parabola",
    
    'Bheight': 20,        # normal Button height
    
    'BEcreate': 101,    # BE = Button Event
    'BEexit': 102,
    'BEresolution': 103,
    'BEspan': 104,
    'BEintrados': 105,
    'BEradials': 106,
    'BEkeybrick': 107,
    'BEsharpness': 108
    }

# Global variables
g = {
    'Intrados' : Draw.Create(c['Circle']),
    'Resolution': Draw.Create(10),
    'Span': Draw.Create(2.0),
    'Radials': Draw.Create(1.0),
    'Keybrick': Draw.Create(1),
    'Sharpness': Draw.Create(1.2)
    }

# Create the vertice, edge and face data
def createData():
    v = []    # list of created vertices
    ed = []    # list of created edges
    f = []    # list of created faces
    intrados = g['Intrados'].val
    res = int(g['Resolution'].val)
    span = g['Span'].val
    keybrick = int(g['Keybrick'].val)
    # If there is a keybrick, we want res to be an even number
    # If there is no keybrick, we want res to be an odd number
    if res%2 == keybrick:
        res+=1
    
    # Create data for a circle
    if intrados == c['Circle']:
        radials = g['Radials'].val
        # Factor to set the span correctly
        xScale = (span/2.0)/(cos((radials/2.0-0.5)*pi)/2.0*span)
        # Factor to set the lowest point of the circle at z = 0
        yOffset = sin((radials/2.0-0.5)*pi)/2.0*span*xScale
        for i in xrange(res):
            t = ((i/float(res-1))*radials-radials/2.0+0.5)*pi
            x = cos(t)/2.0*span*xScale
            y = sin(t)/2.0*span*xScale+yOffset
            v.append([x,0,y])
        for i in xrange(res-1):
            ed.append([i, i+1])
    
    # Create data for an ogee
    if intrados == c['Ogee']:
        radius = span/2.0
        rise = tan(1/3.0*pi)*0.5*span
        tMax = 1.0/3.0*pi
        if keybrick:
            resright = resleft = res/2
        else:
            resright = (res+1)/2
            resleft = (res-1)/2
        if resright%2 == 0:
            tOffset = (1.0/resright)*tMax
            resrightlow = resrighthigh = resright/2
        else:
            tOffset = 0
            resrightlow = (resright+1)/2
            resrighthigh = (resright-1)/2
        print resrightlow, resrighthigh
        for i in xrange(resrightlow):
            t = i/float(resrightlow-1)*(tMax-tOffset)
            x = cos(t)*radius
            y = sin(t)*radius
            v.append([x,0,y])
    
    # Create data for an ogive
    if intrados == c['Ogive']:
        sharpness = g['Sharpness'].val
        radius = sharpness*span
        centre = (0.5*span)+(radius-span)
        tMax = acos(centre/radius)
        if keybrick:
            resright = resleft = res/2
        else:
            resright = (res+1)/2
            resleft = (res-1)/2
        for i in xrange(resright):
            t = i/float(resright-1+keybrick*0.5)*tMax
            x = cos(t)*radius-centre
            y = sin(t)*radius
            v.append([x,0,y])
        for i in xrange(resleft):
            t = i/float(resleft-1)
            if keybrick:
                tOffset = tMax/(res-1)
            else:
                tOffset = tMax/(res/2)
            t = (t + (1-t)*((pi-tMax+tOffset)/pi))*pi
            x = cos(t)*radius+centre
            y = sin(t)*radius
            v.append([x,0,y])
        for i in xrange(res-1):
            ed.append([i, i+1])
    
    # Create data for a parabola
    elif intrados == c['Parabola']:
        for i in xrange(res):
            t = i/float(res-1)*pi
            p = span/2.0
            if sin(t) != -1:
                r = p / (1+sin(t))
                x = r*cos(t)
                y = r*sin(t)
                v.append([x,0,y])
        for i in xrange(res-1):
            ed.append([i,i+1])
    
    return v, ed

# Add the mesh to the scene
def addMesh(v, ed):
    me = bpy.data.meshes.new('Arch')
    me.verts.extend(v)
    me.edges.extend(ed)
    scn = bpy.data.scenes.active
    ob = scn.objects.new(me, 'Arch')
    scn.objects.active = ob
    scn.objects.selected = [ob]
    ob.properties['Arches'] = {}
    for i in g:
        ob.properties['Arches']['Version'] = "0.11"
        ob.properties['Arches'][i] = g[i].val
    #for i in ob.properties['Arches']:
    #    print i, ob.properties['Arches'][i]
    Blender.Redraw()

# Calls the correct functions
def main():
    v, ed = createData()
    addMesh(v, ed)

################## GUI ##############################

# Drawing the GUI
def gui():
    Draw.PushButton("Create", c['BEcreate'], 5, 5, 50, c['Bheight'], "Create the mesh")
    Draw.PushButton("Exit", c['BEexit'], 75, 5, 50, c['Bheight'], "Exit the script, created meshes won't be deleted")
    g['Resolution'] = Draw.Number("Resolution: ", c['BEresolution'], 5, 30, 120, c['Bheight'], g['Resolution'].val, 2, 100, "Higher values result in more vertices and smoother shapes")
    g['Keybrick'] = Draw.Toggle("Keybrick", c['BEkeybrick'], 130, 30, 60, c['Bheight'], g['Keybrick'].val, "If there isn't a keybrick, there will be a center vertex at the highest point")
    g['Span'] = Draw.Number("Span: ", c['BEspan'], 5, 55, 120, c['Bheight'], g['Span'].val, 0.1, 10, "Span of the base of the intrados, measured in Blender Units")
    if g['Intrados'].val == c['Circle']:
        g['Radials'] = Draw.Number("Radials: ", c['BEradials'], 5, 80, 120, c['Bheight'], g['Radials'].val, 0.1, 1.9, "Angle of the centrepoint of the arch. 1 = 1*pi = half a circle")
    if g['Intrados'].val == c['Ogive']:
        g['Sharpness'] = Draw.Number("Sharpness: ", c['BEsharpness'], 5, 80, 120, c['Bheight'], g['Sharpness'].val, 0.5, 15, "Sharpness (E) of the ogive")
    g['Intrados'] = Draw.Menu("Intrados%t|"+c['Intrados'], c['BEintrados'], 5, 105, 120, c['Bheight'], g['Intrados'].val, "The shape of the inner arch")

# Processing of keyboard and mouse events
def event(evt,val):
    if evt in [Draw.ESCKEY, Draw.QKEY, Draw.XKEY]:
        Draw.Exit()

# Processing of button events
def bevent(evt):
    if evt == c['BEcreate']:
        main()
    elif evt == c['BEexit']:
        Draw.Exit()
    elif evt == c['BEresolution']:
        pass
    elif evt == c['BEspan']:
        pass
    elif evt == c['BEintrados']:
        Draw.Redraw()
    elif evt == c['BEradials']:
        pass
    elif evt == c['BEkeybrick']:
        pass
    elif evt == c['BEsharpness']:
        pass

Draw.Register(gui, event, bevent)

Sorry if I sounded a bit rude, but I’m out of time right now, so see you again tomorrow :wink:

ok after revewing the doc i got this for lancet and depressed arches

have a look

ok for the height i understand ounce you set the base for a circular arch then the height is automatically set = to 1/2 the base

but this is not thrue in the case of a parabola you can set the base and height
so in this case may be we should be able to set the height to whatever you want!

have you seen the scritp for 3D vault exploding
i dont know if we could get in touch with this guy and ask permission to use his scipt for 3D vault - but i have to find the URL for this and if there is a contact stab?

mind you this is not a rib vault!

hey good work

SAluattions

see pic for math relationship between side of triangle and then circles for arches

correction i tried it in blender but the circ le center is not at 5/8 so i have to dig more to find the exact value
it is not a simple number but i’ll find it soon !

it’s one quarter of the upper height see picture so simple when you know it !

Salutations

Some quick notes:

Equilateral, Lancet and Depressed arches
I think these are already all implemented with the ogive option. If you set sharpness to 1 you get an equilateral arch. Sharpness < 1 gives a depressed arch and sharpness > 1 gives a lancet arch.
So for the Salisbury cathedral you set sharpness to 0.833 and for the choir at Lincoln you set sharpness to 0.6
For the lancet you set the sharpness between 1.333 and 1.666 to reflect the values in that image.
Illustration (shapes created with script):
http://bartius.crouch2.googlepages.com/arch_ss04.png

Parabola height
This was actually what I meant the other day when I was asking about ‘pointiness’ (good illustration of my inability to express myself clearly). So I’ll look into this again as we should indeed be able to set it.

3D vault exploding
I haven’t seen that script, is it written for Blender? The result in that second image you attached (the reddish 3D vault) is what I’m aiming for to be able to achieve with this script as well.

Trifoil
Thanks for doing the hard work for me. I also found another method, but I’ll see what is easier to implement. But I’m not quite in the stage to add it yet.