| Basic Library Version: 9 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Wall End Elements1. General DescriptionThis document is a common description of wall end elements in ArchiCAD. For the implementation of wall ends, the ArchiCAD development chose the generic solution of GDL objects. Hereby a user can possibly create specific objects and the ones included into ArchiCAD Library are easy to alter. See the 2D appearance of some wall ends from the Library to get a vision about the possibilites.
2. ParametersOnly the differences from the Building Element subtype are listed here.
3. ArchiCAD context
The object coordinate system is set as shown below: Global variables which describe the wall geometry
The different geometries are the following:
4. ScriptsMaster scriptThe function of a typical wall end master script is to determine the container wall geometry. This means to find out which case of the above compositions is the current one. Example:
EPS = 0.001
length = AC_CutWidth
! --- wall geometry ---
if abs(WIDO_POSITION) < EPS then
onWallBeg = 1
endif
wallIncl = WALL_INCL
maxWThickn = WALL_START_THICKNESS
if maxWThickn < WALL_END_THICKNESS then maxWThickn = WALL_END_THICKNESS
if abs(maxWThickn - WALL_THICKNESS) > EPS and SYMB_MIRRORED then
wallIncl = -WALL_INCL
endif
if abs(maxWThickn - WALL_THICKNESS) < EPS and SYMB_MIRRORED then
wallIncl = -WALL_INCL
endif
isCurved = 0
if abs(WIDO_ORIG_DIST) > EPS then
isCurved = 1
r0 = abs(WIDO_ORIG_DIST)
if WIDO_ORIG_DIST > 0 then
alpha = (length / (r0 - WALL_THICKNESS/2)) / PI*180
r0 = r0 - WALL_THICKNESS
else
alpha = (length / (r0 + WALL_THICKNESS/2)) / PI*180
endif
endif
2D scriptA wall end object has usually three main tasks in 2D: draw the cap/ending, draw the remaining part of the wall and place hotspots.
For that you'll get a natural coordinate system if you start the 2D script with
Draw the End capDrawing the cap itself is the simpliest of the whole thing. If the cap consists of rectangles (in a normal straight wall), it can be worthwhile to use the SkinRect makro, because it handles trapeze and curved walls automatically. If the cap joins the composite structure of the wall, attention must be paid to the position of the last core skin - which shapes trapeze in trapeze walls -, it can be the first, the last or an inner skin. Draw the remaining wallDrawing a wall part isn't an easy thing to do. The outcome of the script must exactly match the wall - which is generated by the ArchiCAD Wall tool. This wall-part is mostly a rectangle, so the usage of SkinRect macro is highly recommended. For a non-composite wall this can be made pretty simple. The example shows the creation of the whole missing wall-segment. fill WALL_FILL call "SkinRect" PARAMETERS startX = 0, startY = 0, endX = AC_CutWidth, endY = WALL_THICKNESS, trapType = 1, innerRadius = innerRadius, incAngle = wallIncl, fillPen = WALL_FILL_PEN, fillBGPen = WALL_FBGD_PEN, startLinePen = WALL_SECT_PEN, startLineCont = 1, bottomLinePen = WALL_SECT_PEN, bottomLineLineType = WALL_LINETYPE, bottomLineCont = 1, topLinePen = WALL_SECT_PEN, topLineLineType = WALL_LINETYPE, topLineCont = 1 In composite walls the following factors must be considered: wall geometry (which side is inclining in a trapeze wall), position of the last core skin, state of the Construction Fills setting in the Display Options dialog (draw line between skins or not). You don't have to care much about display options, if you set correctly the line property of the lines you draw. You can read about this issue in Chapter 4.2 of the GDL Technical Standards. Place hotspots
The four hotspots generated by ArchiCAD may not fulfill all expectations.
For that reason the Resize Wall End macro was developed.
This macro places the following hotspots:
! ===== move the coorinate system to a given X coordinate =====
1:
additionIfMirr = 0
additionNotMirr = 0
if innerRadius > EPS then
if onWallBeg < EPS then
add2 0, -innerRadius
rot2 -(xMoveTo / (innerRadius + WALL_THICKNESS/2)) / PI*180
add2 0, innerRadius
else
add2 0, innerRadius + WALL_THICKNESS
rot2 (xMoveTo / (innerRadius + WALL_THICKNESS/2)) / PI*180
add2 0, -innerRadius - WALL_THICKNESS
endif
moveStepNum = 3
else
if SYMB_MIRRORED then
additionIfMirr = xMoveTo * tan(wallIncl)
else
additionNotMirr = xMoveTo * tan(wallIncl)
endif
add2 xMoveTo, 0
moveStepNum = 1
endif
return
This subroutine moves the coordinate system to a given x position
- even if the wall is curved and this is done by rotation -
and returns additional values for trapeze walls.
When called, the following values have to be set:
Example of usage:
xMoveTo = thickCap gosub 1 hotspot2 0, additionIfMirr + thickFirst, unID unID = unID + 1 hotspot2 0, additionNotMirr + WALL_THICKNESS - thickSecond, unID unID = unID + 1 del moveStepNum 3D scriptA wall end object has usually two main tasks in 3D: cut a hole into the wall and generate a body. The hole generation is only needed is the wall end object cuts into the wall.
The 3D coordinate system is set this way:
elevation = 0
if AC_fit_to_wall_height > EPS then
ZZYZX = WALL_HEIGHT
elevation = -GLOB_ELEVATION
endif
addz elevation
For either the gerenation of the hole and the generation of the body the SkinRect macro can be used. Place hotspotsThe bounding hotspots can be generated using the Resize Wall End macro. If more hotspots are needed, you can use a subroutine for the placing very similar to the 2D one: ! ===== move the coorinate system to a given X coordinate ===== 1: additionIfMirr = 0 additionNotMirr = 0 if innerRadius > EPS then if onWallBeg < EPS then addy -innerRadius rotz -(xMoveTo / (innerRadius + WALL_THICKNESS/2)) / PI*180 addy innerRadius else addy innerRadius + WALL_THICKNESS rotz (xMoveTo / (innerRadius + WALL_THICKNESS/2)) / PI*180 addy -innerRadius - WALL_THICKNESS endif moveStepNum = 3 else if SYMB_MIRRORED then additionIfMirr = xMoveTo * tan(wallIncl) else additionNotMirr = xMoveTo * tan(wallIncl) endif addx xMoveTo moveStepNum = 1 endif return |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
Copyright © 2004 - Graphisoft R&D Software
Development Rt. All rights reserved worldwide. |