Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.postscript > #961

Heineken time

From "luser.droog" <luser.droog@gmail.com>
Newsgroups comp.lang.postscript
Subject Heineken time
Date 2012-09-15 16:50 -0500
Organization unorganized
Message-ID <k32t79$bmo$1@dont-email.me> (permalink)
References (15 earlier) <4b7086f3-24d9-40e7-b1c8-da165ee98c12@googlegroups.com> <8185ea95-cd36-462d-8a3b-d0109b7a970d@googlegroups.com> <eed0f57a-1a9c-4528-9259-e7525dccb1af@googlegroups.com> <ee2cb1c5-cd26-49ad-b070-a86e35b5be4f@googlegroups.com> <szi9moh828nm.199hpmrhszz6l$.dlg@40tude.net>

Show all headers | View raw


tlvp wrote:

> On Thu, 13 Sep 2012 19:07:37 -0700 (PDT), luser- -droog wrote:
> 
>> ... I've got to go
>> newsserver shopping again ...
> 
> http://aioe.org/ ... news.eternal-september.org ... freenews.netfront.net
> 
> There are others, too. HTH. Cheers, -- tlvp

Awesome! thnx. And eternal-september has its own calendrical system!

So I did some further reorganizing and added normal-visibility and
simplified the model->object transform. Even without lighting and color,
I think it looks pretty cool now.

625(1)04:49 PM:ps 1> cat 3d5.ps
%!
%Steinmertz, take 5: NEEDFORSPEED
(mat.ps)run

%/forall { pstack()= forall } bind def

%The horizontal chopping cylinder
/cylxz <<
    /inside { % x y z . bool
        exch pop
        dup mul exch dup mul add R^2 le } bind
>> def

%The vertical chopping cylinder
/cylyz <<
    /inside { % x y z . bool
        dup mul exch dup mul add R^2 le
        exch pop } bind
>> def

%Check that the vertices of a face
%are inside a specified chopping cylinder
/checkface { % [ v1 v2 v3 v4 ] dict
    begin
    { aload pop inside } forall
    4 copy eq 3 1 roll eq eq { % all-eq
        pop pop pop
    }{ % uneq in>=1 out>=1
        pop pop pop %TODO: clipface
        %pop false
    } ifelse
end } bind def

%Write the vertex array [v1 v2 v3 v4]
%to outfile with embedded drawing command
/writeface {
    out ([) writestring
    [ v1 v2 v3 v4 ]{ % forall vertices
        out ([) writestring
        { % forall coords of vertex
            out exch outbuf cvs writestring
            out ( ) writestring
        } forall
        out ( ) writestring
        out (]) writestring
    } forall
    out (] drawface\n) writestring
    out flushfile
} def

%Generate the faces of the Forward cylinder
%and eliminate faces outside the chopping cylinders
/steinmertz-gen { 20 dict begin
    /N exch def
    /R exch def
    /R^2 R dup mul def
    /h exch def
    /dz 1 N div def
    /dt 360 dz mul def
    /hdz h dz mul def

    0 dz 1 dz sub {
        h mul h 2 div sub /z exch def

        0 dt dup N 3 add mul { /t exch def
            /v1 [ t cos R mul
                  t sin R mul
                  z ] def
            /v4 [ t cos R mul
                  t sin R mul
                  z hdz add ] def
            /t t dt add def
            /v2 [ t cos R mul
                  t sin R mul
                  z ] def
            /v3 [ t cos R mul
                  t sin R mul
                  z hdz add ] def
            /face [ v1 v2 v3 v4 ] def

            face cylxz checkface {
                face cylyz checkface {
                    doface
                } if
            } if
        } for
    } for
end } bind def

%Action performed by steinmertz-gen
%on each face that survives the chopping
/doface {
    usecache? {
        writeface
    }{
        face drawface
    } ifelse
} def


%This controls the parameters of the
%wireframe approximation of the cylinder
/genfaces {
   % Generate the faces
   %h R N
    4 2 89 steinmertz-gen
} def



%Default modeling transform
/I3 3 ident def
/MO I3 def % model->object
/model {} def
/OW I3 def % object->world

/fill? true def
/wire? true def
/wirecolor
%{} def
{1 setgray} def
%Perform modeling transform
%Perform object->world transform
%Perform perspective projection
%Check visibility
    %Fill if fill?
    %Draw Outline if wire?
/drawface { DICT begin % [ v1 v2 v3 v4 ]
    /face exch def
    /action { moveto /action { lineto } def } def

    face { % [ x y z ]
        aload 4 1 roll model 4 3 roll astore
        %MO matmul
        dup OW matmul 0 get exch copy pop
    } forall

    { %exitloop
        face visible not { exit } if
        face {
            aload pop
            proj %X Y
            action
        } forall
        closepath
        %set color
        fill? { gsave fill grestore } if
        wire? { gsave wirecolor stroke grestore } if
        newpath
    exit } loop
end } dup 0 2 dict put bind def

/E [ 0 0 10 ] def %eye point
/crackE { % set pointers into E
    /ex E 0 1 getinterval cvx def
    /ey E 1 1 getinterval cvx def
    /ez E 2 1 getinterval cvx def
} def crackE
/E^ E dup [ exch mag neg dup dup ] { div } vop def %eye center vec

%Check visibility from the eye
/visible { % [ v1 v2 v3 v4 ] . bool
    dup 0 get 1 index 1 get 2 index 3 get % [] v1 v2 v4
    2 index { sub } vop % [] v1 v2 v14
    3 1 roll exch { sub } vop % [] v14 v12
    cross /normal exch def %normal ==
    %/normal [ normal mag dup dup ] { div } vop def
    dup 0 get E { sub } vop % [] ve1
    /ev exch def %ev ==
    ev normal dot %dup =
    0 gt % [] bool
    exch pop
} def

/proj { DICT begin /z exch def /y exch def /x exch def
    1 ez z sub div
    x ez mul z ex mul sub
    1 index mul
    y ez mul z ey mul sub
    3 2 roll mul
end } dup 0 10 dict put bind def


/setuppage {
    300 400 translate
    1 90 dup dup scale div setlinewidth
} def

/usecache? true def
usecache? { % Generate Data File to cache the faces
    /data (stein.fac) def
    {
        /in data (r) file def
    } stopped {
        clear
        /out data (w) file def
        /outbuf 128 string def
        genfaces
        flush out closefile
        /out null def
        /in data (r) file def
    } if
    /reopen { in closefile /in data (r) file def } def
    /drawshape { in cvx exec reopen } def
}{ % Generate fresh data for each shape
    /drawshape { genfaces } def
} ifelse

/up 90 rotx def
/left 90 roty def

/ang 0 def
{
    /OW ang roty def
    /ang ang 10 add def

    setuppage

    /model {} def % x y z -> x y z
    %/MO I3 def
    drawshape
    /model { exch neg } def % x y z -> x z -y
    %/MO up def
    drawshape
    /model { 3 1 roll exch neg } def % x y z -> z y -x
    %/MO left def
    drawshape

    showpage
} loop
                     

Back to comp.lang.postscript | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-07-17 04:48 -0400
  Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-07-17 08:16 -0700
    Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-07-17 19:25 -0400
  Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-08-17 23:40 -0700
    Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-08-18 00:14 -0700
      Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-08-18 22:44 -0400
        Moire Madness! Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-08-23 13:00 -0700
          Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-08-24 01:45 -0400
            Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-08-24 01:49 -0400
            Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-08-23 23:11 -0700
              Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? luser- -droog <mijoryx@yahoo.com> - 2012-08-23 23:58 -0700
                Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-08-25 02:17 -0400
                Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? Luser droog <mijoryx@yahoo.com> - 2012-08-29 18:25 -0500
                Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? Luser droog <mijoryx@yahoo.com> - 2012-08-29 21:32 -0500
                Re: Moire Madness! Re: ping luser- -droog: SVG or PS project for you? tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-08-30 05:26 -0400
                Hula-Hoop Hullaballoo! Re: ping luser- -droog: SVG or PS project for you? Luser droog <mijoryx@yahoo.com> - 2012-09-02 16:04 -0500
                Re: Hula-Hoop Hullaballoo! Re: ping luser- -droog: SVG or PS project for you? Luser droog <mijoryx@yahoo.com> - 2012-09-03 12:29 -0500
                Re: Hula-Hoop Hullaballoo! Re: ping luser- -droog: SVG or PS project for you? Luser droog <mijoryx@yahoo.com> - 2012-09-04 12:04 -0500
                Re: Hula-Hoop Hullaballoo! Re: ping luser- -droog: SVG or PS project for you? "M. Joshua Ryan" <mijoryx@yahoo.com> - 2012-09-04 12:49 -0500
                A shaded cylinder luser- -droog <mijoryx@yahoo.com> - 2012-09-04 18:11 -0700
                Re: A shaded cylinder luser- -droog <mijoryx@yahoo.com> - 2012-09-11 13:03 -0700
                Spinning Steinmertz Solid (approx.) luser- -droog <mijoryx@yahoo.com> - 2012-09-11 21:29 -0700
                Mulligan (again) luser- -droog <mijoryx@yahoo.com> - 2012-09-13 19:07 -0700
                Re: Mulligan (again) tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-09-14 05:05 -0400
                Heineken time "luser.droog" <luser.droog@gmail.com> - 2012-09-15 16:50 -0500
                Bigger and Badderer "luser.droog" <luser.droog@gmail.com> - 2012-09-16 23:33 -0500
                Re: Bigger and Badderer "luser.droog" <luser.droog@gmail.com> - 2012-09-16 23:37 -0500
                QapplaH! "luser.droog" <luser.droog@gmail.com> - 2012-09-17 11:34 -0500
                Re: QapplaH! (appendix: updated mat.ps) "luser.droog" <luser.droog@gmail.com> - 2012-09-17 13:05 -0500
                one more cup of coffee for the road. "luser.droog" <luser.droog@gmail.com> - 2012-09-18 02:51 -0500
                Re: Bigger and Badderer tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-09-18 21:52 -0400
                Re: Bigger and Badderer "luser.droog" <luser.droog@gmail.com> - 2012-09-18 22:30 -0500
                Re: Bigger and Badderer tlvp <mPiOsUcB.EtLlLvEp@att.net> - 2012-09-19 00:59 -0400
                Re: Bigger and Badderer "luser.droog" <luser.droog@gmail.com> - 2012-09-19 00:48 -0500
                Revolving Camera prototype "luser.droog" <luser.droog@gmail.com> - 2012-09-23 22:30 -0500
                Steinmetz with Revolving Camera "luser.droog" <luser.droog@gmail.com> - 2012-09-24 09:30 -0500

csiph-web