|
|
|
|
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Hi,
A four-centered arch. Macro coming up shortly.
Sam
Post a reply to this message
Attachments:
Download '4-centeredarchc.jpg' (19 KB)
Preview of image '4-centeredarchc.jpg'
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Samuel B." <stb### [at] hotmailcom> wrote:
> [...] Macro coming up shortly.
Here it is. The outer and inner arches are defined separately by width, height
and corner radius (smallest circle). Everything else applies to the entire
object.
#macro FourCenteredArch
(
AW1, // arch width 1 (from center)
AH1, // arch height 1 (from ground)
CR1, // radius 1 (outer corner, >=0 & <=AW1)
AW2, // arch width 2 (from center)
AH2, // arch height 2 (from ground)
CR2, // radius 2 (inner corner, >=0 & <=AW2)
AD, // arch depth (to -z)
BV, // edge bevel radius
)
// a small value
#local Eps = .0001;
// intersection of a vertical line and circle, produces a y value (circle
radius, line x-position)
#macro CircleLineIntercept(CirR, LinX)
#local V = pow(CirR, 2) - pow(LinX, 2);
#if(V>=0)
(sqrt(V))
#else
(0)
#end
#end
// calculate and return various values for shape and bevel macros
#macro GetValues(AW, AH, CR, IO) // IO = is outside inside shape
#declare CR = max(CR, BV*IO+Eps); // prevent circle radius from being negative
#if(CR>=AW) #declare CR = AW-Eps; #end // prevent degenerate plane normal
#declare CV = <AW-CR, AH, 0>; // small circle position
#declare CRT = 2 * CV.x; // get a temporarory circle radius based on distance
between initial circle centers
#declare CY = (CircleLineIntercept(CRT, CV.x)); // get intercept of line and
1st circle
#declare CV2 = CV - 2 * <CV.x, CY, 0>; // large circle's position (will be
used directly for geometry)
#declare CRL = 2 * CRT + CR; // large (second) circle's radius
#declare CY2 = (CircleLineIntercept(CRL, CV2.x)); // value needed for shifting
geometry down (get y intercept of line and 2nd circle)
#declare CO = (CV2.y+CY2-AH); // offset amount to shift geometry downward, to
fit inside box and top margin
#declare CV = <CV.x, CV.y-CO, 0>; // offset CV
#declare CV2 = <CV2.x, CV2.y-CO, 0>; // offset CV2
#declare Dir = vnormalize(CV - CV2); // angle between 1st and 2nd circle
centers, used for various things
#declare DirP = <Dir.y, -Dir.x, 0>; // perpendicular to Dir
#declare ISP = <CV2.x-(CV2.y-CV.y)*Dir.x/Dir.y, CV.y, 0>; // find an
intersection to be used to prevent future CSG issues
#declare PlaneDirP = plane{<CV2.y-CV.y, -CV2.x+CV.x, 0>, 0 translate CV}
#end
// basic shape
#macro MakeShape(AW, AH, CR, AD, IC, IO)
GetValues(AW, AH, CR, IO)
#local IC = Eps * IC; // is a cutting object, so make an offset
union{
// solid portion under curve
box{<-IC, -IC, 0-IC>, <AW, CV.y+Eps, AD+IC>}
#macro Curve()
union{
difference{
cylinder{
z*(-IC), z*(AD+IC), CR
translate CV
}
plane{y, CV.y-Eps}
object{PlaneDirP inverse}
}
difference{
cylinder{
z*(-IC), z*(AD+IC), CRL
translate CV2
}
plane{x, -IC}
object{PlaneDirP translate -y*IC}
}
}
#end
object{Curve()}
translate -z*AD
}
#end
// bevels for curved portion
#macro MakeBevel(AW, AH, CR, IO)
GetValues(AW, AH, CR, IO)
union{
difference{
torus{
CR, BV
rotate x*90
translate CV+z*(BV-AD)
}
plane{y, CV.y}
object{PlaneDirP inverse}
}
difference{
torus{
CRL, BV
rotate x*90
translate CV2+z*(BV-AD)
}
plane{x, 0}
object{PlaneDirP}
}
}
#end
// final object
union{
#local ArchHalf =
union{
// shape offset +z by bevel value
difference{
MakeShape(AW1, AH1, CR1, AD-BV, false, true)
MakeShape(AW2, AH2, CR2, AD-BV, true, false)
}
// shape inset by bevel value
#if(BV>0)
difference{
MakeShape(AW1-BV, AH1-BV, CR1-BV, AD, false, true)
MakeShape(AW2+BV, AH2+BV, CR2+BV, AD, true, false)
}
// bevels
union{
object{MakeBevel(AW1-BV, AH1-BV, CR1-BV, true)}
cylinder{<AW1-BV, 0, -AD+BV>, <AW1-BV, CV.y, -AD+BV>, BV}
object{MakeBevel(AW2+BV, AH2+BV, CR2+BV, false)}
cylinder{<AW2+BV, 0, -AD+BV>, <AW2+BV, CV.y, -AD+BV>, BV}
}
#end
}
object{ArchHalf}
object{ArchHalf scale <-1, 1, 1>}
}
#end
Here's how to call the macro:
object{
FourCenteredArch(
1.0, // arch width 1 (from center)
2.0, // arch height 1 (from ground)
0.5, // radius 1 (outer corner, >=0 & <=arch width 1)
0.6, // arch width 2 (from center)
1.4, // arch height 2 (from ground)
0.2, // radius 2 (inner corner, >=0 & <=arch width 2)
0.3, // arch depth (to -z)
0.03 // edge bevel radius (>arch depth)
)
}
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Samuel B." <stb### [at] hotmailcom> wrote:
> Hi,
>
> A four-centered arch. Macro coming up shortly.
>
> Sam
Nice job!
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Samuel B." <stb### [at] hotmailcom> wrote:
> A four-centered arch.
Here's a helper macro to make arches with inset surfaces. You can specify both
inset amount and inset depth.
#macro FourCenteredArch_Inset(AW1, AH1, CR1, AW2, AH2, CR2, AD, BV, IN, ID)
#local Eps = .0001;
union{
FourCenteredArch(AW1, AH1, CR1, AW2, AH2, CR2, AD-ID, BV)
object{
#local DP = max(BV+Eps, ID);
FourCenteredArch(AW1-IN, AH1-IN, CR1-IN, AW2+IN, AH2+IN, CR2+IN, DP, BV)
translate - z*(AD-DP)
}
}
#end
And its usage:
object{
FourCenteredArch_Inset(
1.0, // arch width 1 (from center)
2.0, // arch height 1 (from ground)
0.3, // radius 1 (outer corner, >=0 & <=arch width 1)
0.6, // arch width 2 (from center)
1.35, // arch height 2 (from ground)
0.1, // radius 2 (inner corner, >=0 & <=arch width 2)
0.3, // arch depth (to -z)
0.013, // edge bevel radius (>arch depth)
0.05 // inset amount
0.025 // inset depth
)
}
Post a reply to this message
Attachments:
Download '4-centeredarchc-inset.jpg' (23 KB)
Preview of image '4-centeredarchc-inset.jpg'
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Mike Miller" <mil### [at] gmailcom> wrote:
> "Samuel B." <stb### [at] hotmailcom> wrote:
> > Hi,
> >
> > A four-centered arch. Macro coming up shortly.
> >
> > Sam
>
> Nice job!
Thank you, Mike~
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Op 24/07/2023 om 03:19 schreef Samuel B.:
> Hi,
>
> A four-centered arch. Macro coming up shortly.
>
> Sam
That is an excellent piece of work, Sam. Thanks for the two macros. RL
is draining me at the moment so I shall not get round to them
immediately, but they are on my ToDo list next to the cathedral window
generator.
--
Thomas
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"Samuel B." <stb### [at] hotmailcom> wrote:
> "Samuel B." <stb### [at] hotmailcom> wrote:
> > A four-centered arch.
>
> Here's a helper macro to make arches with inset surfaces. You can specify both
> inset amount and inset depth.
>
> #macro FourCenteredArch_Inset(AW1, AH1, CR1, AW2, AH2, CR2, AD, BV, IN, ID)
> #local Eps = .0001;
> union{
> FourCenteredArch(AW1, AH1, CR1, AW2, AH2, CR2, AD-ID, BV)
> object{
> #local DP = max(BV+Eps, ID);
> FourCenteredArch(AW1-IN, AH1-IN, CR1-IN, AW2+IN, AH2+IN, CR2+IN, DP, BV)
> translate - z*(AD-DP)
> }
> }
> #end
>
> And its usage:
>
> object{
> FourCenteredArch_Inset(
> 1.0, // arch width 1 (from center)
> 2.0, // arch height 1 (from ground)
> 0.3, // radius 1 (outer corner, >=0 & <=arch width 1)
>
> 0.6, // arch width 2 (from center)
> 1.35, // arch height 2 (from ground)
> 0.1, // radius 2 (inner corner, >=0 & <=arch width 2)
>
> 0.3, // arch depth (to -z)
> 0.013, // edge bevel radius (>arch depth)
>
> 0.05 // inset amount
> 0.025 // inset depth
> )
> }
Looks beautiful.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Thomas de Groot <tho### [at] degrootorg> wrote:
> Op 24/07/2023 om 03:19 schreef Samuel B.:
> > Hi,
> >
> > A four-centered arch. Macro coming up shortly.
>
> That is an excellent piece of work, Sam. Thanks for the two macros. RL
> is draining me at the moment so I shall not get round to them
> immediately, but they are on my ToDo list next to the cathedral window
> generator.
>
> --
> Thomas
Thank you, Thomas. I mainly made it for fun, and to keep my mind busy; I don't
expect anyone to use it, since everyone's got their own favorite projects going
;P
I hope things become less exhausting for you in the near future~
Sam
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
"And" <49341109@ntnu.edu.tw> wrote:
> "Samuel B." <stb### [at] hotmailcom> wrote:
> > "Samuel B." <stb### [at] hotmailcom> wrote:
> > > A four-centered arch.>
>
> Looks beautiful.
Thanks, And.
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
| |
|
|
Op 25-7-2023 om 01:03 schreef Samuel B.:
> Thank you, Thomas. I mainly made it for fun, and to keep my mind busy; I don't
> expect anyone to use it, since everyone's got their own favorite projects going
> ;P
>
I know what you mean. I think I can come up with some project using your
work here. I did for instance with your 'strands' macros. Not good
enough to show here (yet) I am afraid...
> I hope things become less exhausting for you in the near future~
>
Thanks indeed, Sam.
--
Thomas
Post a reply to this message
|
|
| |
| |
|
|
|
|
| |
|
|