TheaterDesign
is a visualizer for theater layout.
An XML description of the space allows for venue and show-specific elements to be displayed in a desktop
app and for drawings to be generated.
Venue elements can include walls, stage, proscenium arch, fixed lighting positions, etc.
Show-specific elements can include temporary lighting positions, sets, etc
Pipes and Luminaires can be specified as permanent installations in a venue or as transient setups for a show.
See release at ________________ on github for a MacOS package
For other platforms, you'll have to build your own. I would welcome prebuilt packages to include with the releases.
TheaterDesign
is in the process of being reworked to include an interactive element so that XML
files do not have to be crafted by hand.
It is not yet there - right now, one would still need to write one's own XML.
The units of the numbers should not matter, so long as you are consistent. The drawings scale to fit the output medium.
I use inches, because I live in a backwards country that is out of step with the rest of the world.
The origin of the room is in the top left corner, but see Proscenium
, below.
TheaterDesign
generates plan and section views of the space.
Detail drawings of lighting pipes (including their Luminaires) can be requested.
Currently supported entities are:
Names and describes the venue. There should be exactly one of these.
Attributes:
building
- string - name of buildingroom
- string - Name of roomwidth
,depth
,height
- dimensions of room
<venue building="Federation HQ" room="Zefram Cochrane Auditorium" width="2160" depth="2160" height="1080" />
Describes the position of a wall. Not required, but your room will be devoid of context. Walls are represented as a line between the two points specified. Walls always use the top left corner of the drawing as their origin.
Attributes:
x1
,y1
- coordinates of one end of the wallx2
,y2
- coordinates of the other end of the wall
<wall x1="13" y1="27" x2="13" y2="743" />
There is a default floor at z=0. When that does not cover your situation (e.g. for a built-in stage, landing, etc) floors at other levels can be specified. Currently, only a level rectangle is supported.
<floor z="36" x="0" y="0" width="336" depth="136" />
Describes a regular flight of steps. Currently, it can only be oriented with the top of stair towards the origin of the venue.
<stair x="1" y="118" z="17.75" width="29" steps="3" run="11" rise="6" />
Describes the location of a proscenium arch. Optional. If it is present, it redefines the origin for the room to be the downstage center of the proscenium. Its own location is relative to the top left corner of the drawing.
Attributes:
x
,y
,z
- coordinates of the center of the proscenium arch at stage-floor levelheight
,width
- dimensions of the proscenium archdepth
- thickness of the proscenium wall
<proscenium x="1080" y="480" z="42" height="288" width="800" depth="14"/>
Typical lighting pipe. Things get hung from it. By default, a fixed lighting position.
When a pipe is the child of a pipebase element, it is vertical and gets its coordinates from its parent.
Attributes:
id
- name of pipe. Only needed when something will be referring to this pipex
,y
,z
- coordinates of the leftmost end of the pipelength
- length of pipelocation
- when attached to another pipe, the place along that pipe to mount this one
Children can be luminaire elements and these luminaires do not need to specify their pipe.
<pipe id="1st electric" y="33" x="-288" z="184" length="576" />
Weighted base with threaded receiver for 2" pipe.
Attributes:
x
,y
,z
- coordinates of the pipebaseid
- optional name of pipebaseowner
- optional owner of pipebase
Child should be a pipe element.
<pipebase y="33" x="-288" z="0" />
Names the event for which the drawing is relevant.
Attributes:
id
- name of event
<event id="Graduation"/>
Describes a type of lighting instrument and provides an SVG icon for it. If you define a
Attributes:
name
- type of luminaire being describedwidth
,length
- dimensions of the unitweight
- weight of the unitcomplete
- set if description is a complete luminaire
Child should be an svg element to be used as the icon for this type of luminaire. Note that the WFL example builds on the svg drawing provided by the MFL example.
<luminaire-definition name="Source Four PAR MFL" complete="1" width="10" length="11" weight="9.8" >
<svg overflow="visible">
<path fill="none" stroke="black" stroke-width="1"
d="M -4.1 5 L -4.1 0.5 L -0.5 -5.7 L 0.5 -5.7 L 4.1 0.5 L 4.1 5 Z"
/>
</svg>
</luminaire-definition>
<luminaire-definition name="Source Four PAR WFL" complete="1" width="10" length="11" weight="9.8" >
<svg overflow="visible">
<use xlink:href="#Source Four PAR MFL" />
<path fill="none" stroke="black"
d="M -5.1 5 L 0 1 L 5.1 5"
/>
</svg>
</luminaire-definition>
One instance of the referenced type of lighting instrument.
Attributes:
type
- type of luminaire being usedlocation
- position on pipe of this instrumenton
- name of pipe, required only if luminaire element is not a child of the pipe element it is hung oncircuit
,dimmer
,address
,channel
,color
- descriptive information regarding this instrumentinfo
,owner
,label
- descriptive information regarding this instrument
<luminaire type="Source Four PAR WFL" location="-202" dimmer="17" channel="36" color="R61" label="Center" />
Encloses the component pieces of a setpiece and sets the location.
Attributes:
x
,y
- coordinates of the setpiece
<setpiece x="0" y="186" >
<set-platform x="-96" y="0" z="36">
<shape rectangle="96 48" />
</set-platform>
<set-platform x="0" y="0" z="36">
<shape rectangle="96 48" />
</set-platform>
<set-platform x="-96" y="-30" z="27">
<shape rectangle="48 12" />
</set-platform>
</setpiece>
Provides offset from the Setpiece
origin at which the enclosed Shape
is displayed.
Attributes:
x
,y
,z
- coordinates of the platform relative to the enclosing setpiece
Children should be shape elements
Provides a shape with dimensions to describe a SetPlatform
Attributes:
rectangle
- describes dimension of a rectangle
Defines a drawing that will be produced. Currently, only the pipe detail is implemented.
Attributes:
id
- title of drawingfilename
- base name of HTML file to be generatedpipe
- name of pipe from which drawing detail is extracted
<drawing id="First Electric Detail" filename="electric1" pipe="1st" />
<plot>
<drawing id="House Pipe Detail" filename="housepipe" pipe="house1" />
<luminaire-definition name="Lighting Blaster 3000" complete="1" width="8" length="9" weight="14.5" >
<svg overflow="visible">
<path fill="white" stroke="black" stroke-width="1"
d="M -4.5 5 L -4.5 -4.5 L -4 -4.5 A 3.5 3 0 0 1 4 -4.5 L 4.5 -4.5 L 4.5 5 L 5 6 L 5 6.5 L -5 6.5 L -5 6 Z"
/>
</svg>
</luminaire-definition>
<venue building="Federation HQ" room="Zefram Cochrane Auditorium" width="2160" depth="2160" height="1080">
<wall x1="13" y1="27" x2="13" y2="743" />
<proscenium x="1080" y="480" z="42" height="288" width="800" depth="14"/>
<zone id="DSC" x="0" y="-20" z="60" r="90" />
<pipe id="house1" x="-520" y="-320" z="400" length="1040">
<luminaire type="Lighting Blaster 3000" location="-202" address="1" channel="1" target="DSC" label="Center Left" />
<luminaire type="Lighting Blaster 3000" location="202" address="101" channel="2" target="DSC" label="Center Right" />
</pipe>
<event id="Graduation">
<luminaire type="Lighting Blaster 3000" on="house1" location="0" address="201" channel="3" target="DSC" label="Center" />
</event>
</venue>
</plot>
The UI shows a plan view, but Luminaire icons are not yet displayed. I will need to figure out how to render SVG elements in Compose.
Currently, the app opens up the file named $HOME/TheaterPlot/plotfile.xml
.
That is less than optimal, but enough for me to get by while I bring this codebase up to matching what the old code did.
Eventually this will need a file picker and perhaps a command-line argument to choose a file.
Currently, the app needs the directory $HOME/TheaterPlot/out
to exist.
Again, less than optimal.
Buttons will turn on additional features. The only one yet implemented displays the lighting instruments hung on each of the pipes. Selecting a section highlights the appropriate pipe in the drawing. I expect to build on this to allow the data to be edited.
Point is just (x, y, z) coordinates in a data class. Values are Float.
VenuePoint is relative to the origin of the Venue? Maybe?
Wall start and end points are VenuePoint. Proscenium.origin is VenuePoint.
VenuePoint keeps track of the largest and smallest value for each dimension. VenuePoint will report the difference between the smallest and largest value for each dimension.
width, depth, and height