## How to create a curtain wall regular corner frame?

Example object for this post

Created by the Curtain Wall tool the panels of a curtain wall can connect at an angle. From ARCHICAD 22 in these cases the curtain wall frame library part set at the Corner Frame Class is used at the panel connection. This post presents an example for a library part with handling the corner.

In these corner situations the local coordinate system of a curtain wall frame is defined by the angle of the connecting panels: the Y axis is always on the bisectrix of the angle.

From ARCHICAD 22 the main cross-sectional frame sizes of a curtain wall frame – see How to make a curtain wall frame? post – can be handled by ARCHICAD in different ways depending on the value of the ac_iCWFrameType parameter.

If the frame type is set to a Normal Frame, Profile Frame or a Diagonal Corner Frame, the main sizes are measured in the direction of the X and Y axes of the local coordinate system. At the Regular Corner Frame types the ac_frameWidth parameter is measured on the connecting panel’s centerline, the ac_frameBackDepth and the ac_frameDepthparameters are measured perpendicularly to this direction.

### Regular Corner Block Frame example

In the following example a simple butt-glazed regular corner frame model is created. In order to get the Frame Type and Geometry dialog and the symbolic representation handled properly by ARCHICAD, ac_iCWFrameType is set to 3 (Regular Block Corner) and ac_bButtGlazedFrame is set to 1.

The ac_clampVector[2][2] fix named optional parameter gives the direction vectors of the connecting panels. From this data the _vx and _vy unit vector components are calculated.

```EPS = 0.0001

if abs(ac_ClampVector[1][1]) > EPS then
! Calculate Unit vector coordinates from the clamp vector data
_clampVectorLength = sqr(ac_ClampVector[1][2]**2 + ac_ClampVector[1][1]**2)
_vx = ac_ClampVector[1][1] / _clampVectorLength
_vy = ac_ClampVector[1][2] / _clampVectorLength
else
_vx = -1 ! Boundary Frame
_vy = 0
endif
```

The X and Y coordinates of the frame prism points are calculated from the unit vector components and the main cross-sectional frame sizes.

```! Calculate Side Coordinates from sizes and clamp vector data
_coordSideFrontX = _vx * ac_frameWidth - _vy * ac_clampWidth / 2
_coordSideFrontY = _vy * ac_frameWidth + _vx * ac_clampWidth / 2

_coordSideBackX = _vx * ac_frameWidth - _vy * ac_frameDepth
_coordSideBackY = _vy * ac_frameWidth + _vx * ac_frameDepth

! Use cprism_{3} to control line elimination
cprism_{3} _frameSurf, _frameSurf, _frameSurf, 1+2,
6, ZZYZX,
0, (ac_clampWidth / 2) / _vx, 0, 15, _frameSurf,
_coordSideFrontX, _coordSideFrontY, 0, 15, _frameSurf,
_coordSideBackX, _coordSideBackY, 0, 15, _frameSurf,
0, ac_frameDepth / _vx, 0, 15, _frameSurf,
-_coordSideBackX, _coordSideBackY, 0, 15, _frameSurf,
-_coordSideFrontX, _coordSideFrontY, 0, 15, _frameSurf
```

### Frame side offset

The curtain wall frame library part should provide the frame’s side offset from the frame origin for ARCHICAD. As mentioned in the How to make a Curtain Wall Frame? post, this value is always measured on the centerline of the connecting panels, and it is used for various operations by ARCHICAD, which are the following at Regular Corner Frame types:

• Symbolic frame representationARCHICAD draws a bounding polygon for the symbolic 2D representation. The polygon sizes are defined by the ac_frameOffsetSide, ac_frameWidth and ac_frameDepth parameters.

• Geometry for cuttingTo determine the frame cutting geometry, ARCHICAD handles the frames as two cutting planes which are at the distance of the ac_frameOffsetSide parameter’s value from the frame origin.
• Clamp depthAs in the Normal and Diagonal Frame types, the clamp depth, which defines the exact size of the connecting panels, is measured from the frame side offset.

In this example the ac_frameOffsetSide parameter’s value is equal to the ac_frameWidth parameter, which can be set at the Frame Type and Geometry Dialog by the User:

The value of the ac_frameOffsetSide parameter should be set in the parameterscript:

```ac_frameOffsetSide = ac_frameWidth
parameters ac_frameOffsetSide = ac_frameOffsetSide
```

For the complete example check out the AC22_CWRegCornerFrameExample example object.