Re: How to create a named compound 3D object?
- To: mathgroup at smc.vnet.net
- Subject: [mg113364] Re: How to create a named compound 3D object?
- From: "Sjoerd C. de Vries" <sjoerd.c.devries at gmail.com>
- Date: Mon, 25 Oct 2010 06:41:42 -0400 (EDT)
- References: <ia10fk$ot7$1@smc.vnet.net>
Graphics3D expects one set with graphics commands, so you simply need
to put { } around them.
Graphics3D[
{
Rails[{0, 0, 0}, {10, 0, 0}, 1],
Rails[{0, 0, 0}, {0, 10, 0}, 1]
}
]
This is true whether you use multiple simple graphics primitives or
complex combinations of them in lists. You can nest lists. They sort
of set up local environments; colors, point & line sizes defined in a
nested list do not effect higher levels.
Cheers -- Sjoerd
On Oct 24, 12:06 pm, Dims <dim... at hotmail.com> wrote:
> I wrote a code to draw a circle in 3D:
>
> Perp[v_] := If[v[[2]] != 0 || v[[3]] != 0,
> Cross[v, {1, 0, 0}],
> Cross[v, {0, 1, 0}]]
>
> Circle3D[center_, dir_] :=
> Block[{perp1, perp2, pts, factor},
> perp1 = Normalize[Perp[dir]]*Norm[dir];
> perp2 = Normalize[Cross[dir, perp1]]*Norm[dir];
> factor = 0.6;
> pts = {
> center + perp1,
> center + perp1 + perp2*factor,
> center + perp1*factor + perp2,
> center + perp2,
> center - perp1*factor + perp2,
> center - perp1 + perp2*factor,
> center - perp1,
> center - perp1 - perp2*factor,
> center - perp1*factor - perp2,
> center - perp2,
> center - perp2 + perp1*factor,
> center - perp2*factor + perp1,
> center + perp1};
> (*{{BezierCurve[pts],Green,Line[pts],Red,Point[pts]}};*)
> BezierCurve[pts]
> ]
>
> Then I create a compound object (which looks like a line,
> circuferenced with serie of circles):
>
> Rails[p1_, p2_, t_] := Block[{totlen, dirvect, preans},
> totlen = Norm[p2 - p1];
> dirvect = Normalize[p2 - p1];
> preans = {Line[{p2, p1}]};
> For[p = p1, Norm[p - p1] < totlen, p += dirvect*t,
> preans = Append[preans, Circle3D[p, dirvect]]];
> preans];
>
> But unfortunately, I was to prepare an anwer as a List. But this is
> not very suitable to use in Graphics, because I need to use Join to
> draw:
>
> Graphics3D[
> Join[Rails[{0, 0, 0}, {10, 0, 0}, 1],
> Rails[{0, 0, 0}, {0, 10, 0}, 1]]]
>
> Is it possible to define compound object so that it can be used like
> normal ones:
>
> Graphics3D[
> Rails[{0, 0, 0}, {10, 0, 0}, 1],
> Rails[{0, 0, 0}, {0, 10, 0}, 1]]
>
> ?
>
> Thanks.