| Home Page | Recent Changes | Preferences

# TarquinBuilderBase

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.

## Variables

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

## Enumerations

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

## Constants

- 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

     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

### BuildCirclet

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.

Use:

- 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.

### DressCap

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

### DressCylinderCap

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.

### DressCylinderSides

This handles all the side polys on cylinders.

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

### DressTube

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

- BrushBuilder class
- Brushbuilders in general

The Unreal Engine Documentation Site

Wiki Community

Topic Categories

Image Uploads

Random Page

Recent Changes

Offline Wiki

Unreal Engine

Console Commands

Terminology

Mapping Topics

Mapping Lessons

UnrealEd Interface

Questions&Answers

Scripting Topics

Scripting Lessons

Making Mods

Class Tree

Questions&Answers

Modeling Topics

Questions&Answers

Log In