Files
envi-code/SourceCode/Code2026/tg_shs/shs_kernal/BayWindow.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

574 lines
17 KiB
C++

#include "stdafx.h"
//Acad::ErrorStatus XBayWindow::GetPolyCurve(XPoint ptLoc, double nExtDir, double nWidth, double nWallThick,
// BOOL bLeftSlab, BOOL bRightSlab, DList<XPoly2D> &polyCurves,
// double dWallInsut, double dInsutAdd) const
Acad::ErrorStatus XBayWindow::GetPolyCurve(XPoint ptLoc, double nExtDir, double nWidth, double nWallThick,
BOOL bLeftSlab, BOOL bRightSlab, DList<XPoly2D> &polyCurves,
double dWallInsut, double dInsutAdd, BOOL bAllInsut) const
{
// sg modify 120518,不使用固定值,而是使用保存在对象中的值
// double nBayThick = 120.0;
double nBayThick = m_dBayThick;
XPoint ptBase, ptVert, ptVertInst, ptInsBack;
// modify by xlc on 110624 解决梯形凸窗,三角凸窗,圆弧凸窗所在墙上有保温时保温线豁口的问题
// ads_polar(ptLoc, nExtDir, nWallThick/2.0, ptBase);
double dWallThick = nWallThick/2.0;
double dWallInsutOld = dWallInsut;
if (m_nStyle == BWS_TRAPEZIA ||
m_nStyle == BWS_TRIANGLE ||
m_nStyle == BWS_ARC)
{
dWallThick -= dWallInsut;
dWallInsut = 0.0;
}
ads_polar(ptLoc, nExtDir, dWallThick, ptBase);
m_dInsback = nBayThick;
if (m_nStyle == BWS_TRAPEZIA) // 梯形
{
// 墙有保温时,出挑长需要去掉保温层厚度
double h = m_nProtrude - dWallInsut;
double w0 = nWidth/2;
double d = nBayThick;
double t = m_nTrapezia/2;
double a = h/(d*d) - 1/h;
double b = 2*t/h - 2*h*w0/(d*d);
double c = h*w0*w0/(d*d) - t*t/h -h;
ASSERT(b*b-4*a*c>0.0);
double y1 = (-b + sqrt(b*b-4*a*c))/2/a;
double y2 = (-b - sqrt(b*b-4*a*c))/2/a;
double x1 = w0+t-t*d/h+(d/h-1)*y1;
double x2 = w0+t-t*d/h+(d/h-1)*y2;
double x,
y = 0.0;
if (x1>0.0 && x1<t && y1>w0)
{
x = x1;
y = y1;
}
else if (x2>0.0 && x2<t && y2>w0)
{
x = x2;
y = y2;
}
else
{
ASSERT(0);
}
XPoint vt0[4], vt2[4], vt1[4];
double t0 = x,
w = y;
ads_polar(ptBase, nExtDir-PI/2, w0, vt0[0]);
ads_polar(ptBase, nExtDir-PI/2, t0, vt0[1]);
ads_polar(XPoint(vt0[1]), nExtDir, h-d, vt0[1]);
ads_polar(ptBase, nExtDir+PI/2, w0, vt0[3]);
ads_polar(ptBase, nExtDir+PI/2, t0, vt0[2]);
ads_polar(XPoint(vt0[2]), nExtDir, h-d, vt0[2]);
ads_polar(ptBase, nExtDir-PI/2, w, vt2[0]);
ads_polar(ptBase, nExtDir-PI/2, t, vt2[1]);
ads_polar(XPoint(vt2[1]), nExtDir, h, vt2[1]);
ads_polar(ptBase, nExtDir+PI/2, w, vt2[3]);
ads_polar(ptBase, nExtDir+PI/2, t, vt2[2]);
ads_polar(XPoint(vt2[2]), nExtDir, h, vt2[2]);
for (int i=0; i<4; i++)
{
// sg modify 120521,凸窗2侧窗台板延伸长度不再是固定的120,而是可以设置的,但是玻璃线的40是固定的
//vt1[i].x = vt0[i].x + (vt2[i].x-vt0[i].x)/3.0;
//vt1[i].y = vt0[i].y + (vt2[i].y-vt0[i].y)/3.0;
//vt1[i].z = vt0[i].z + (vt2[i].z-vt0[i].z)/3.0;
vt1[i].x = vt0[i].x + (vt2[i].x-vt0[i].x)*40/d;
vt1[i].y = vt0[i].y + (vt2[i].y-vt0[i].y)*40/d;
vt1[i].z = vt0[i].z + (vt2[i].z-vt0[i].z)*40/d;
}
// wlw add 有保温层时,需要延长至墙线上
m_dInsback = vt0[0].Distance(vt2[0]);
// modify by xlc on 110624 解决梯形凸窗所在墙上有保温时保温线豁口的问题
m_dInsback -= (w0-t0) * dWallInsutOld /(h - d); // 梯形斜边影响的保温长度
if (dWallInsut > 0.01)
{
dWallInsut = dWallInsut * (vt0[0].Distance(vt0[1])) / (m_nProtrude - dWallInsut - nBayThick);
AcGeVector3d vtTemp;
vtTemp = vt0[0] - vt0[1];
vtTemp.normalize();
vt0[0] += vtTemp * dWallInsut;
vtTemp = vt0[3] - vt0[2];
vtTemp.normalize();
vt0[3] += vtTemp * dWallInsut;
vtTemp = vt1[0] - vt1[1];
vtTemp.normalize();
vt1[0] += vtTemp * dWallInsut;
vtTemp = vt1[3] - vt1[2];
vtTemp.normalize();
vt1[3] += vtTemp * dWallInsut;
vtTemp = vt2[0] - vt2[1];
vtTemp.normalize();
vt2[0] += vtTemp * dWallInsut;
vtTemp = vt2[3] - vt2[2];
vtTemp.normalize();
vt2[3] += vtTemp * dWallInsut;
}
XPoly2D *pPoly1 = new XPoly2D(0);
for (i=0; i<4; i++)
pPoly1->AppendNode(vt0[i]);
polyCurves.Append(pPoly1);
XPoly2D *pPoly2 = new XPoly2D(0);
for(i=0; i<4; i++)
pPoly2->AppendNode(vt1[i]);
polyCurves.Append(pPoly2);
XPoly2D *pPoly3 = new XPoly2D(0);
for (i=0; i<4; i++)
pPoly3->AppendNode(vt2[i]);
polyCurves.Append(pPoly3);
return Acad::eOk;
}
// sg modify 120521,凸窗2侧窗台板延伸长度不再是固定的120,而是可以设置的,但是玻璃线的40是固定的
//double nOffsetDist[3] = {0.0, nBayThick/3, nBayThick};
double nOffsetDist[3] = {0.0, 40, nBayThick};
// wlw add 补豁口dInsutAdd
for (int idx=0; idx<3; idx++)
{
XPoly2D poly2d(0);
if (m_nStyle == BWS_RECT)
{
if (bLeftSlab && bRightSlab)
{
ads_polar(ptBase, nExtDir-PI/2, nWidth/2, ptVert);
//if (dInsutAdd > 0.01 && dWallInsut < 0.01)
if (dInsutAdd > 0.01 && (dWallInsut < 0.01 || bAllInsut))
{
// 补豁口
ads_polar(ptVert, nExtDir-PI/2, dInsutAdd, ptVert);
}
if (dWallInsut > 0.01)
{
// 外墙有保温
ads_polar(XPoint(ptVert), nExtDir, m_nProtrude - dWallInsut + dInsutAdd - nBayThick + nOffsetDist[idx], ptVert);
}
else
{
ads_polar(XPoint(ptVert), nExtDir, m_nProtrude - nBayThick + nOffsetDist[idx], ptVert);
}
poly2d.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir+PI/2, nWidth, ptVert);
//if (dInsutAdd > 0.01 && dWallInsut < 0.01)
if (dInsutAdd > 0.01 && (dWallInsut < 0.01 || bAllInsut))
{
// 补豁口
ads_polar(ptVert, nExtDir+PI/2, dInsutAdd*2, ptVert);
}
poly2d.AppendNode(ptVert);
}
else if (bRightSlab)
{
ads_polar(ptBase, nExtDir-PI/2, nWidth/2, ptVert);
// if (dInsutAdd > 0.01 && dWallInsut < 0.01)
if (dInsutAdd > 0.01 && (dWallInsut < 0.01 || bAllInsut))
{
// 补豁口
ads_polar(ptVert, nExtDir-PI/2, dInsutAdd, ptVert);
}
if (dWallInsut > 0.01)
{
ads_polar(XPoint(ptVert), nExtDir, m_nProtrude - dWallInsut + dInsutAdd - nBayThick + nOffsetDist[idx], ptVert);
}
else
{
ads_polar(XPoint(ptVert), nExtDir, m_nProtrude - nBayThick + nOffsetDist[idx], ptVert);
}
poly2d.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir+PI/2, nWidth+nOffsetDist[idx], ptVert);
if (dInsutAdd > 0.01 && dWallInsut < 0.01)
{
// 补豁口
ads_polar(ptVert, nExtDir+PI/2, dInsutAdd, ptVert);
}
poly2d.AppendNode(ptVert);
ads_polar(ptBase, nExtDir+PI/2, nWidth/2+nOffsetDist[idx], ptVert);
if (dWallInsut > 0.01)
{
ads_polar(ptVert, nExtDir - PI, dWallInsut, ptVert);
}
poly2d.AppendNode(ptVert);
}
else if (bLeftSlab)
{
ads_polar(ptBase, nExtDir-PI/2, nWidth/2+nOffsetDist[idx], ptVert);
if (dWallInsut > 0.01)
{
ads_polar(ptVert, nExtDir - PI, dWallInsut, ptVertInst);
poly2d.AppendNode(ptVertInst);
ads_polar(XPoint(ptVert), nExtDir, m_nProtrude - dWallInsut + dInsutAdd - nBayThick + nOffsetDist[idx], ptVert);
}
else
{
poly2d.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir, m_nProtrude - nBayThick + nOffsetDist[idx], ptVert);
}
poly2d.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir+PI/2, nWidth+nOffsetDist[idx], ptVert);
// if (dInsutAdd > 0.01 && dWallInsut < 0.01)
if (dInsutAdd > 0.01 && (dWallInsut < 0.01 || bAllInsut))
{
// 补豁口
ads_polar(ptVert, nExtDir+PI/2, dInsutAdd, ptVert);
}
poly2d.AppendNode(ptVert);
}
else
{
ads_polar(ptBase, nExtDir-PI/2, nWidth/2+nOffsetDist[idx], ptVert);
if (dWallInsut > 0.01)
{
ads_polar(ptVert, nExtDir - PI, dWallInsut, ptVertInst);
poly2d.AppendNode(ptVertInst);
// sg add 110816,没有挡板的时候,也就不用考虑挡板的保温厚度
//ads_polar(XPoint(ptVert), nExtDir, m_nProtrude - dWallInsut + dInsutAdd - nBayThick + nOffsetDist[idx], ptVert);
ads_polar(XPoint(ptVert), nExtDir, m_nProtrude - dWallInsut - nBayThick + nOffsetDist[idx], ptVert);
}
else
{
poly2d.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir, m_nProtrude - nBayThick + nOffsetDist[idx], ptVert);
}
poly2d.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir+PI/2, nWidth+nOffsetDist[idx]*2, ptVert);
poly2d.AppendNode(ptVert);
ads_polar(ptBase, nExtDir+PI/2, nWidth/2+nOffsetDist[idx], ptVert);
if (dWallInsut > 0.01)
{
ads_polar(ptVert, nExtDir - PI, dWallInsut, ptVert);
}
poly2d.AppendNode(ptVert);
}
}
else if (m_nStyle == BWS_TRIANGLE)
{
double a = ((m_nProtrude - dWallInsut)/(nWidth/2))*((m_nProtrude- dWallInsut)/(nWidth/2))+1.0;
double b = -2.0* (m_nProtrude - dWallInsut)*nBayThick/(nWidth*nWidth/4);
double c = (nBayThick/(nWidth/2))*(nBayThick/(nWidth/2))-1.0;
ASSERT(b*b-4*a*c>0.0);
double y1 = (-b + sqrt(b*b-4*a*c))/2/a;
double y2 = (-b - sqrt(b*b-4*a*c))/2/a;
double y = 0.0;
if (y1>0.0 && y1<1.0)
y = y1;
else if (y2>-0.0 && y2<1.0)
y = y2;
else
ASSERT(0);
double x = ((m_nProtrude - dWallInsut)*y-nBayThick)/(nWidth/2); //sqrt(1.0-y*y);
ASSERT(x>0.0 && x<1.0);
ads_polar(ptBase, nExtDir-PI/2, nWidth/2+nOffsetDist[idx]/fabs(x), ptVert);
poly2d.AppendNode(ptVert);
ads_polar(ptBase, nExtDir, (m_nProtrude - dWallInsut)-nBayThick/fabs(y)+nOffsetDist[idx]/fabs(y), ptVert);
poly2d.AppendNode(ptVert);
ads_polar(ptBase, nExtDir+PI/2, nWidth/2+nOffsetDist[idx]/fabs(x), ptVert);
poly2d.AppendNode(ptVert);
}
else if (m_nStyle == BWS_ARC)
{
double h0 = m_nProtrude - dWallInsut-nBayThick;
double r0 = (nWidth*nWidth/4.0/h0+h0)/2.0;
double dh = nOffsetDist[idx];
double l = sqrt(2*r0*h0 + dh*dh + 2*dh*r0 - h0*h0);
//double p1=m_nProtrude-nBayThick;
//double p=p1+nOffsetDist[idx];
//double nOffHor=nWidth/2.0*(p/p1-1.0);
//double l=nWidth/2.0+nOffHor; //弦长的一半
if (l < _DIST_SNAP)
return Acad::eInvalidInput;
double nSweepAng = 4*atan((h0+nOffsetDist[idx])/l);
ads_polar(ptBase, nExtDir-PI/2, l, ptVert);
poly2d.AppendNode(ptVert, nSweepAng);
ads_polar(ptBase, nExtDir+PI/2, l, ptVert);
poly2d.AppendNode(ptVert);
}
else
{
return Acad::eInvalidInput;
}
if (!!poly2d)
{
// wlw add 110216 保温需要的回退值m_dInsback
if (idx == 0)
{
ptInsBack = *poly2d[0];
}
if (idx == 2)
{
m_dInsback = ptInsBack.Distance(*poly2d[0]);
// add by xlc on 110624 解决三角凸窗,圆弧凸窗所在墙上有保温时保温线豁口的问题
if(m_nStyle == BWS_TRIANGLE)
{
m_dInsback -= (ptBase.Distance(*poly2d[0])) * dWallInsutOld /(ptBase.Distance(*poly2d[1])); // 三角形斜边影响的保温长度
}
else if(m_nStyle == BWS_ARC)
{
// 圆弧影响的保温长度
m_dInsback = sqrt((m_nProtrude-dWallInsutOld)*((m_dInsback+nWidth*0.5)*(m_dInsback+nWidth*0.5)/(m_nProtrude) +dWallInsutOld))-nWidth*0.5;
}
}
polyCurves.Append(new XPoly2D(poly2d));
}
}
return Acad::eOk;
}
Acad::ErrorStatus GetClipBoundary(const XBayWindow *pBayWin, XPoint ptLoc, double nExtDir, double nWidth,
double nWallThick, double nSlabThick, BOOL bLeftSlab, BOOL bRightSlab, XPoly2D &poly2d)
{
// 不使用固定值,而是使用保存在对象中的值
// double nBayThick = 120.0;
double nBayThick = pBayWin->m_dBayThick;
XPoint ptBase, ptVert;
ads_polar(ptLoc, nExtDir, nWallThick/2.0, ptBase);
if (pBayWin->m_nStyle == XBayWindow::BWS_TRAPEZIA) // 梯形
{
double h=pBayWin->m_nProtrude;
double w0=nWidth/2;
double d=nBayThick;
double t=pBayWin->m_nTrapezia/2;
double a = h/(d*d) - 1/h;
double b = 2*t/h - 2*h*w0/(d*d);
double c = h*w0*w0/(d*d) - t*t/h -h;
ASSERT(b*b-4*a*c>0.0);
double y1= (-b + sqrt(b*b-4*a*c))/2/a;
double y2= (-b - sqrt(b*b-4*a*c))/2/a;
double x1=w0+t-t*d/h+(d/h-1)*y1;
double x2=w0+t-t*d/h+(d/h-1)*y2;
double x, y=0.0;
if(x1>0.0 && x1<t && y1>w0)
{
x=x1;
y=y1;
}
else if(x2>0.0 && x2<t && y2>w0)
{
x=x2;
y=y2;
}
else
{
ASSERT(0);
}
XPoint vt0[4], vt2[4], vt1[4];
double t0=x, w=y;
ads_polar(ptBase, nExtDir-PI/2, w0, vt0[0]);
ads_polar(ptBase, nExtDir-PI/2, t0, vt0[1]);
ads_polar(XPoint(vt0[1]), nExtDir, h-d, vt0[1]);
ads_polar(ptBase, nExtDir+PI/2, w0, vt0[3]);
ads_polar(ptBase, nExtDir+PI/2, t0, vt0[2]);
ads_polar(XPoint(vt0[2]), nExtDir, h-d, vt0[2]);
ads_polar(ptBase, nExtDir-PI/2, w, vt2[0]);
ads_polar(ptBase, nExtDir-PI/2, t, vt2[1]);
ads_polar(XPoint(vt2[1]), nExtDir, h, vt2[1]);
ads_polar(ptBase, nExtDir+PI/2, w, vt2[3]);
ads_polar(ptBase, nExtDir+PI/2, t, vt2[2]);
ads_polar(XPoint(vt2[2]), nExtDir, h, vt2[2]);
for (int i=0; i<4; i++)
{
// sg modify 120521,凸窗2侧窗台板延伸长度不再是固定的120,而是可以设置的,但是玻璃线的40是固定的
//vt1[i].x = vt0[i].x + (vt2[i].x-vt0[i].x)/3.0;
//vt1[i].y = vt0[i].y + (vt2[i].y-vt0[i].y)/3.0;
//vt1[i].z = vt0[i].z + (vt2[i].z-vt0[i].z)/3.0;
vt1[i].x = vt0[i].x + (vt2[i].x-vt0[i].x)*40/d;
vt1[i].y = vt0[i].y + (vt2[i].y-vt0[i].y)*40/d;
vt1[i].z = vt0[i].z + (vt2[i].z-vt0[i].z)*40/d;
}
for (i=0; i<4; i++)
poly2d.AppendNode(vt2[i]);
poly2d.SetFlag(1);
return Acad::eOk;
}
double nOffset = nBayThick;
if (pBayWin->m_nStyle == XBayWindow::BWS_RECT)
{
//if(bLeftSlab&&bRightSlab)
//{
// ads_polar(ptBase, nExtDir-PI/2, nWidth/2, ptVert);
// ads_polar(XPoint(ptVert), nExtDir, pBayWin->m_nProtrude-nBayThick+nOffset, ptVert);
// poly2d.AppendNode(ptVert);
// ads_polar(XPoint(ptVert), nExtDir+PI/2, nWidth, ptVert);
// poly2d.AppendNode(ptVert);
//}
//else if(bRightSlab)
//{
// ads_polar(ptBase, nExtDir-PI/2, nWidth/2, ptVert);
// ads_polar(XPoint(ptVert), nExtDir, pBayWin->m_nProtrude-nBayThick+nOffset, ptVert);
// poly2d.AppendNode(ptVert);
// ads_polar(XPoint(ptVert), nExtDir+PI/2, nWidth+nOffset, ptVert);
// poly2d.AppendNode(ptVert);
// ads_polar(ptBase, nExtDir+PI/2, nWidth/2+nOffset, ptVert);
// poly2d.AppendNode(ptVert);
//}
//else if(bLeftSlab)
//{
// ads_polar(ptBase, nExtDir-PI/2, nWidth/2+nOffset, ptVert);
// poly2d.AppendNode(ptVert);
// ads_polar(XPoint(ptVert), nExtDir, pBayWin->m_nProtrude-nBayThick+nOffset, ptVert);
// poly2d.AppendNode(ptVert);
// ads_polar(XPoint(ptVert), nExtDir+PI/2, nWidth+nOffset, ptVert);
// poly2d.AppendNode(ptVert);
//}
//else
{
if (bRightSlab)
ads_polar(ptBase, nExtDir-PI/2, nWidth/2+nSlabThick, ptVert);
else
ads_polar(ptBase, nExtDir-PI/2, nWidth/2+nOffset, ptVert);
poly2d.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir, pBayWin->m_nProtrude, ptVert);
poly2d.AppendNode(ptVert);
double width1 = nWidth;
width1 += bRightSlab ? nSlabThick : nOffset;
width1 += bLeftSlab ? nSlabThick : nOffset;
ads_polar(XPoint(ptVert), nExtDir+PI/2, width1, ptVert);
poly2d.AppendNode(ptVert);
if (bLeftSlab)
ads_polar(ptBase, nExtDir+PI/2, nWidth/2+nSlabThick, ptVert);
else
ads_polar(ptBase, nExtDir+PI/2, nWidth/2+nOffset, ptVert);
poly2d.AppendNode(ptVert);
}
}
else if (pBayWin->m_nStyle == XBayWindow::BWS_TRIANGLE)
{
double a = (pBayWin->m_nProtrude/(nWidth/2))*(pBayWin->m_nProtrude/(nWidth/2))+1.0;
double b = -2.0*pBayWin->m_nProtrude*nBayThick/(nWidth*nWidth/4);
double c = (nBayThick/(nWidth/2))*(nBayThick/(nWidth/2))-1.0;
ASSERT(b*b-4*a*c>0.0);
double y1 = (-b + sqrt(b*b-4*a*c))/2/a;
double y2 = (-b - sqrt(b*b-4*a*c))/2/a;
double y = 0.0;
if (y1>0.0 && y1<1.0)
y=y1;
else if (y2>-0.0 && y2<1.0)
y=y2;
else
ASSERT(0);
double x = (pBayWin->m_nProtrude*y-nBayThick)/(nWidth/2); //sqrt(1.0-y*y);
ASSERT(x>0.0 && x<1.0);
ads_polar(ptBase, nExtDir-PI/2, nWidth/2+nOffset/fabs(x), ptVert);
poly2d.AppendNode(ptVert);
ads_polar(ptBase, nExtDir, pBayWin->m_nProtrude-nBayThick/fabs(y)+nOffset/fabs(y), ptVert);
poly2d.AppendNode(ptVert);
ads_polar(ptBase, nExtDir+PI/2, nWidth/2+nOffset/fabs(x), ptVert);
poly2d.AppendNode(ptVert);
}
else if (pBayWin->m_nStyle == XBayWindow::BWS_ARC)
{
double h0 = pBayWin->m_nProtrude-nBayThick;
double r0 = (nWidth*nWidth/4.0/h0+h0)/2.0;
double dh = nOffset;
double l = sqrt(2*r0*h0 + dh*dh + 2*dh*r0 - h0*h0);
//double p1=m_nProtrude-nBayThick;
//double p=p1+nOffsetDist[idx];
//double nOffHor=nWidth/2.0*(p/p1-1.0);
//double l=nWidth/2.0+nOffHor; //弦长的一半
if(l<_DIST_SNAP)
return Acad::eInvalidInput;
double nSweepAng = 4*atan((h0+nOffset)/l);
ads_polar(ptBase, nExtDir-PI/2, l, ptVert);
poly2d.AppendNode(ptVert, nSweepAng);
ads_polar(ptBase, nExtDir+PI/2, l, ptVert);
poly2d.AppendNode(ptVert);
}
else
{
return Acad::eInvalidInput;
}
poly2d.SetFlag(1);
return Acad::eOk;
}
Acad::ErrorStatus XBayWindow::GetVertSlabPoly(XPoint ptLoc, double nExtDir, double nWidth,
double nWallThick, double nSlabThick,
XPoly2D &polyLeft,XPoly2D&polyRight)const
{
XPoint ptBase, ptVert;
ads_polar(ptLoc, nExtDir, nWallThick/2.0, ptBase);
{
ads_polar(ptBase, nExtDir-PI/2, nWidth/2+nSlabThick, ptVert);
polyRight.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir, m_nProtrude, ptVert);
polyRight.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir+PI/2, nSlabThick, ptVert);
polyRight.AppendNode(ptVert);
ads_polar(ptBase, nExtDir-PI/2, nWidth/2, ptVert);
polyRight.AppendNode(ptVert);
}
{
ads_polar(ptBase, nExtDir+PI/2, nWidth/2+nSlabThick, ptVert);
polyLeft.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir, m_nProtrude, ptVert);
polyLeft.AppendNode(ptVert);
ads_polar(XPoint(ptVert), nExtDir-PI/2, nSlabThick, ptVert);
polyLeft.AppendNode(ptVert);
ads_polar(ptBase, nExtDir+PI/2, nWidth/2, ptVert);
polyLeft.AppendNode(ptVert);
polyLeft.Reverse();
}
return Acad::eOk;
}