From Unreal Wiki, The Unreal Engine Documentation Site
Jump to navigation Jump to search
Object >> BrushBuilder >> TarquinBuilderBase

This is not yet released. An abstract class that holds functions used by the other builders in the Tarquin pack. This page is a reference for the foolhardy wishing to script builders which inherit the functions of this class.


this is used to set polygon names with expressions. (kudos to Mych for the idea. :) )


An extension of Epic's AlignToSide parameter for cylinder-type objects:
  • AL_Plain,
  • AL_Side,
  • AL_Caps.
* ET_None,
* ET_Clockwise,
* ET_AntiClockwise,
* ET_Alternating
* IN_Levels,
* IN_Slices,
* IN_All


  • UUCircle = 65536.0f – a full circle in UU angle units
  • ZeroVect = vect(0,0,0) – because "vect(0,0,0)" doesn't work inside function calls & so forth
  • SheetPolyFlags = 0x00000108 – for testing purposes. If a brush isn't complete, UnrealEd is happier if it's marked as a sheet. This constant is here because I couldn't be bothered looking up the correct flag setting every time.

General Functions

divides operator

See Useful Maths functions


Assume( float UserInput, float AssumeValue 

This is a way of coding in a single place the interface shortcuts such as "set SidesUsed to zero to mean use the value of Sides". Embed a call to Assume in a function call.

Returns UserInput unless it's non-positive. In this case, return AssumeValue. Note that it's still the responsiblity of the brushbuilder class to check parameters make sense.

Example 1: A value of 0 for InnerHeight means "use value of OuterHeight"

Assume( InnerHeight, OuterHeight )

Example 2: A negative value in InnerRadius means use it as a thickness; remember the minus sign is included in InnerRadius.

Assume( InnerRadius, OuterRadius+InnerRadius ) 

Building functions


Creates a ring of vertices, partial or complete. The cylinder, sphere and pyramid all use this.

float xRadius, yRadius
Radii of the ring. If the values are different, the ring will be elliptical.
float z
Height of the ring: z coordinate of all created vertices.
float Crowning
rotates all the vertices around the centre. Expressed as a fraction of the Side angle.
int Sides, SidesUsed
work as expected. Note that the function handles the user-convenience value SidesUsed=0, and also deals with SidesUsed > Sides, so there's no need to check this input.
EAlignStyle Alignment
Pass the user-set alignment value.
bool Pole
Whether or not to build a pole depends on a number of factors, including 1) whether the user has selected a split cap 2) the ratio of SidesUsed to Sides
Note to self
why isn't this automatic? Why can't the function determine for itself whether a pole is needed or not? There should probably be an override for things like the Torus. So this would mean another enum: True, False, Auto
(june 03) false = no pole; true = pole if function believes needed.


  • Cylinder: builds pole itself since height different (innerHeight / OuterHeight)
  • Pyramid: passes a Pole variable it has set itself: this could be nicely passed up to the Base class
  • Pano: not yet switch to use Base (is pano useful in UEd3?)
  • Torus: not yet switch to use Base.

Dressing Functions

Dressing functions handle the definition of polys once the vertices have been created. There are currently 4 of these: two are general, and two are specialized for the cylinder.


This handles a ring of vertices that are to be made into a cap.

int Dir 
direction of polys: sgn to pass on to the poly building functions.
int StartVertex 
index of the first vertex
int Sides 
number of sides (direct user input: special meanings handled)
int SidesUsed 
number of sides used (direct user input: special meanings handled)
bool SplitCaps 
Force cap to be split into triangles even is this is not required by the geometry
bool Pole 
whether to build a pole. If SplitCaps == true, this is irrelevant
int vPole 
the pole vertex. if -1, assumed to be at the end of the circlet vertices. Only used by the split cap section (whether split is forced by the input or necessary)
EAlignStyle Alignment 


This handles caps on cylinder shapes:

  • supports partial cap
  • feed it the alignment type and the user's set sides: no need to work out how many sides there actually are.
int Layers 
number of solid layers, like a cake. Note this is a different concept to DressTube's Levels parameter. Yes, it's illogical, I know. DressTube is at a lower level conceptually & deals with raw data, ie vertex rings. DCC deals with user parameters and the user thinks in solid layers. See? There's some sense there if you look hard enough...
int Sides 
int SidesUsed 
bool Pole
bool Hollow
EAlignStyle Alignment
bool SplitCaps 
Gives the option to force the cap to be made from triangles. Some configurations will force this anyway.


This handles all the side polys on cylinders.

int Layers
int Sides
int SidesUsed 
bool Pole
bool Hollow
EAlignStyle Alignment
EEdgeTriangulation SideTri 


The multi-purpose all-singing, all dancing poly building function.

int sgn 
orientation of polys. Same as sgn paramter in Poly3i etc.
int Ofs 
the number of the first vertex.
int LevelOfs 
number of vertices to skip between rings.
int Panels 
number of desired poly panels per layer
int Levels
number of vertex rings ie number of layers + 1 for unlooped.
bool Looped 
creates an extra row of polys that joins the last vertex ring to the first
bool Closed 
joins the first poly panel to the last, like a cylinder. With both Looped and Closed set to false, this function makes a tesselated square of polys.
EEdgeTriangulation PanelStyle 
options to split the panel polys into triangles
EItemNaming ItemStyle 
item naming options
optional name ItemName 
item name given to the polys. ItemStyle options append a number to this
optional int PolyFlags 
same as the native poly building functions

Related Topics