You can use any shape you can make in a model editor (x.file model) you wish and use it as a world block if you like.
If you want to use an unorthodox shape as a segment (part of) - you really need to make your segment tile size. i.e. so that it fits into one FPSC size tile cube.
If necessary you can use a level one above to place a segment at a differing height above the standard tile height in an open area (an area with no ceiling at single tile height)
I use oblong blocks, as doorway (or other square) headers if I am not placing a door and want a wide opening without frame as FPSC does not leave a header wall piece when walls/room segments are joined and you knock out one wall without actually leaving the wall where it is and placing a door in it, which would leave a header - albeit not very high - some doors cut a doorway very near a ceiling, or only cut a small opening.
You could of course make a specific .x.model shape to use as a piece which cuts an opening using copies of a default hole segment and scripts dropping out the frame part. Look at the default scripts to see how they work. You need the bit referenced as the punch object - it cuts your hole. You can control its position in the script too.
Not sure this method though would work with anything other than rectangular shapes the results could be dramatic.
Personally for unauthodax shapes, I just use an x.model as an entity and place it at the required height via the script file. A simple script is all thats needed as the object just appears and becomes part of the scenery. An entity can be basically any shape and size.
In the case of my opening headers I just have one single .x file model for all similar header shapes - thats all thats needed - then I just reference in script the single .x file in all instances and just change the texture reference in instance script files so that the same .x file can be used in differing locations, matching up the texture to various locations accordingly. As long as you have textures available its a quick way to add lots of the same object while having different textures on them. Only one model to make and just the script texture reference to change where necessary. You may even be able to place many instances and just change the texture refs in the editor - though in script its more certain that they show up correctly.
Archway - Just make the top of the arch (and sides if you wish, no base) as an entity and place at the height (in script "defaultheight = yourheight"))and position you require. Once in editor and positioned in level - right mouse click and set the properties you require.
Same with any other object.
Cylinders - too make an .x model - best used as static enity I would think. FPSC in my experience so far is fussy when it comes to how it renders cylinders though - in some instances it does not join the polys well and leaves gaps. Might be my models though they look fine outside of FPSC.
Hope that helps a
little.