public static OpeningDefinitions convert2TempOpening(MemorySafe_OpeningDefinitions opening) { OpeningDefinitions Opening = new OpeningDefinitions(); foreach (Vector.MemorySafe_CartCoord coord in opening.coordinateList) { Vector.CartCoord opCoord = new Vector.CartCoord(); opCoord.X = coord.X; opCoord.Y = coord.Y; opCoord.Z = coord.Z; Opening.coordinateList.Add(opCoord); } Vector.CartVect RHR = Vector.convertToTempVector(opening.rHRVector); Opening.nameId = opening.nameId; Opening.openingType = opening.openingType; Opening.parentSurfaceNameId = opening.parentSurfaceNameId; Opening.parentAzimuth = opening.parentAzimuth; Opening.parentTilt = opening.parentTilt; Opening.outsideBoundaryConditionObj = opening.outsideBoundaryConditionObj; Opening.viewFactortoGround = opening.viewFactortoGround; Opening.shadeControlSch = opening.shadeControlSch; Opening.Azimuth = opening.Azimuth; Opening.Tilt = opening.Tilt; Opening.rHRVector = RHR; Opening.constructionName = opening.constructionName; Opening.frameAndDividerName = opening.frameAndDividerName; Opening.multiplier = opening.multiplier; Opening.numVertices = opening.numVertices; Opening.area = opening.area; return(Opening); }
public static Surface convert2TempSurface(MemorySafe_Surface surface) { Surface tempSurface = new Surface(); foreach (Vector.MemorySafe_CartCoord coord in surface.SurfaceCoords) { Vector.CartCoord surfaceCoord = new Vector.CartCoord(); surfaceCoord.X = coord.X; surfaceCoord.Y = coord.Y; surfaceCoord.Z = coord.Z; tempSurface.SurfaceCoords.Add(surfaceCoord); } tempSurface.name = surface.name; tempSurface.multiplier = surface.multiplier; tempSurface.surfaceType = surface.surfaceType; tempSurface.constructionName = surface.constructionName; tempSurface.outsideBoundary = surface.outsideBoundary; tempSurface.zoneName = surface.zoneName; tempSurface.outsideBoundaryCondition = surface.outsideBoundaryCondition; tempSurface.sunExposureVar = surface.sunExposureVar; tempSurface.windExposureVar = surface.windExposureVar; tempSurface.viewFactor = surface.viewFactor; tempSurface.numVertices = surface.numVertices; tempSurface.tilt = surface.tilt; tempSurface.azimuth = surface.azimuth; return(tempSurface); }
public static LLRet GetLLForFloor(List <Vector.MemorySafe_CartCoord> surfacecoords) { LLRet ll = new LLRet(); ll.indices = new List <int>(); int surfindex = -1; CartesianPoint cp = new CartesianPoint(); Vector.CartCoord llsurf = new Vector.CartCoord(); Vector.MemorySafe_CartVect RHRVector = Vector.GetMemRHR(surfacecoords); if (Math.Abs(RHRVector.X) == 0 && RHRVector.Y == 0 && RHRVector.Z == -1) { for (int sccount = 0; sccount < surfacecoords.Count; sccount++) { if (sccount == 0) { llsurf.X = surfacecoords[sccount].X; llsurf.Y = surfacecoords[sccount].Y; llsurf.Z = surfacecoords[sccount].Z; surfindex = sccount; continue; } //get lower left...most low(smallest Y), then most left (largest X) if (surfacecoords[sccount].Y <= llsurf.Y) { if (surfacecoords[sccount].X > llsurf.X) { llsurf.X = surfacecoords[sccount].X; llsurf.Y = surfacecoords[sccount].Y; llsurf.Z = surfacecoords[sccount].Z; surfindex = sccount; } } } } else { //special procedure for this type of floor } Vector.MemorySafe_CartCoord LLeft = new Vector.MemorySafe_CartCoord(llsurf.X, llsurf.Y, llsurf.Z); cp = makegbCartesianPt(LLeft); ll.cp = cp; ll.indices.Add(surfindex); return(ll); }
//Reminder to factor in CADAzimuth if appropriate public static LLRet GetLLForOpening(List <Vector.MemorySafe_CartCoord> surfacecoords, List <Vector.MemorySafe_CartCoord> openingcoords) { LLRet ll = new LLRet(); ll.indices = new List <int>(); int surfindex = -1; int opindex = -1; CartesianPoint cp = new CartesianPoint(); //we want to verify that this is indeed correct //west-facing Vector.MemorySafe_CartVect RHRVector = Vector.GetMemRHR(surfacecoords); if (Math.Abs(RHRVector.X) == -1 && RHRVector.Y == 0 && RHRVector.Z == 0) { Vector.CartCoord llsurf = new Vector.CartCoord(); for (int sccount = 0; sccount < surfacecoords.Count; sccount++) { if (sccount == 0) { llsurf.X = surfacecoords[sccount].X; llsurf.Y = surfacecoords[sccount].Y; llsurf.Z = surfacecoords[sccount].Z; surfindex = sccount; continue; } //get lower left...most lowest(smallest Z), then most left (largest Y) if (surfacecoords[sccount].Z <= llsurf.Z) { if (surfacecoords[sccount].Y > llsurf.Y) { llsurf.X = surfacecoords[sccount].X; llsurf.Y = surfacecoords[sccount].Y; llsurf.Z = surfacecoords[sccount].Z; surfindex = sccount; } } } Vector.CartCoord llopening = new Vector.CartCoord(); for (int occount = 0; occount < openingcoords.Count; occount++) { if (occount == 0) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; continue; } //get lower left...most low(lowest Z), then most left (largest Y) if (openingcoords[occount].Z <= llopening.Z) { if (openingcoords[occount].Y > llopening.Y) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; } } } double diffX = Math.Abs(llsurf.Y - llopening.Y); double diffY = Math.Abs(llopening.Z - llsurf.Z); Vector.MemorySafe_CartCoord LLeft = new Vector.MemorySafe_CartCoord(diffX, diffY, 0); cp = makegbCartesianPt(LLeft); } //north-facing else if (Math.Abs(RHRVector.X) == 0 && RHRVector.Y == 1 && RHRVector.Z == 0) { Vector.CartCoord llsurf = new Vector.CartCoord(); for (int sccount = 0; sccount < surfacecoords.Count; sccount++) { if (sccount == 0) { llsurf.X = surfacecoords[sccount].X; llsurf.Y = surfacecoords[sccount].Y; llsurf.Z = surfacecoords[sccount].Z; surfindex = sccount; continue; } //get lower left...most low(smallest Z), then most left (largest X) if (surfacecoords[sccount].Z <= llsurf.Z) { if (surfacecoords[sccount].X > llsurf.X) { llsurf.X = surfacecoords[sccount].X; llsurf.Y = surfacecoords[sccount].Y; llsurf.Z = surfacecoords[sccount].Z; surfindex = sccount; } } } Vector.CartCoord llopening = new Vector.CartCoord(); for (int occount = 0; occount < openingcoords.Count; occount++) { if (occount == 0) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; continue; } //get lower left...most low(smallest Z), then most left (largest X) if (openingcoords[occount].Z <= llopening.Z) { if (openingcoords[occount].X > llopening.X) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; } } } double diffX = Math.Abs(llsurf.X - llopening.X); double diffY = Math.Abs(llsurf.Z - llopening.Z); Vector.MemorySafe_CartCoord LLeft = new Vector.MemorySafe_CartCoord(diffX, diffY, 0); cp = makegbCartesianPt(LLeft); } //south-facing else if (Math.Abs(RHRVector.X) == 0 && RHRVector.Y == -1 && RHRVector.Z == 0) { Vector.CartCoord llsurf = new Vector.CartCoord(); for (int sccount = 0; sccount < surfacecoords.Count; sccount++) { if (sccount == 0) { llsurf.X = surfacecoords[sccount].X; llsurf.Y = surfacecoords[sccount].Y; llsurf.Z = surfacecoords[sccount].Z; surfindex = sccount; continue; } //get lower left...most low(smaller Z), then most left (smallest X) if (surfacecoords[sccount].Z <= llsurf.Z) { if (surfacecoords[sccount].X < llsurf.X) { llsurf.X = surfacecoords[sccount].X; llsurf.Y = surfacecoords[sccount].Y; llsurf.Z = surfacecoords[sccount].Z; surfindex = sccount; } } } Vector.CartCoord llopening = new Vector.CartCoord(); for (int occount = 0; occount < openingcoords.Count; occount++) { if (occount == 0) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; continue; } //get lower left...most low(smallest Z), then most left (smallest X) if (openingcoords[occount].Z <= llopening.Z) { if (openingcoords[occount].X < llopening.X) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; } } } double diffX = Math.Abs(llsurf.X - llopening.X); double diffY = Math.Abs(llsurf.Z - llopening.Z); Vector.MemorySafe_CartCoord LLeft = new Vector.MemorySafe_CartCoord(diffX, diffY, 0); cp = makegbCartesianPt(LLeft); } //east-facing else if (Math.Abs(RHRVector.X) == 1 && RHRVector.Y == 0 && RHRVector.Z == 0) { Vector.CartCoord llsurf = new Vector.CartCoord(); for (int sccount = 0; sccount < surfacecoords.Count; sccount++) { if (sccount == 0) { llsurf.X = surfacecoords[sccount].X; llsurf.Y = surfacecoords[sccount].Y; llsurf.Z = surfacecoords[sccount].Z; surfindex = sccount; continue; } //get lower left...most low(smaller Z), then most left (smallest Y) if (surfacecoords[sccount].Z <= llsurf.Z) { if (surfacecoords[sccount].Y < llsurf.Y) { llsurf.X = surfacecoords[sccount].X; llsurf.Y = surfacecoords[sccount].Y; llsurf.Z = surfacecoords[sccount].Z; surfindex = sccount; } } } Vector.CartCoord llopening = new Vector.CartCoord(); for (int occount = 0; occount < openingcoords.Count; occount++) { if (occount == 0) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; continue; } //get lower left...most low(smallest Z), then most left (smallest Y) if (openingcoords[occount].Z <= llopening.Z) { if (openingcoords[occount].Y < llopening.Y) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; } } } double diffX = Math.Abs(llsurf.Y - llopening.Y); double diffY = Math.Abs(llsurf.Z - llopening.Z); Vector.MemorySafe_CartCoord LLeft = new Vector.MemorySafe_CartCoord(diffX, diffY, 0); cp = makegbCartesianPt(LLeft); } //floors else if (Math.Abs(RHRVector.X) == 0 && RHRVector.Y == 0 && RHRVector.Z == -1) { Vector.CartCoord llsurf = new Vector.CartCoord(); LLRet llroof = GetLLForFloor(surfacecoords); llsurf.X = Convert.ToDouble(llroof.cp.Coordinate[0]); llsurf.Y = Convert.ToDouble(llroof.cp.Coordinate[1]); llsurf.Z = Convert.ToDouble(llroof.cp.Coordinate[2]); surfindex = llroof.indices[0]; Vector.CartCoord llopening = new Vector.CartCoord(); for (int occount = 0; occount < openingcoords.Count; occount++) { if (occount == 0) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; continue; } //get lower left...most low(smallest Y), then most left (largest X) if (openingcoords[occount].Y <= llopening.Y) { if (openingcoords[occount].X > llopening.X) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; } } } double diffX = Math.Abs(llsurf.X - llopening.X); double diffY = Math.Abs(llsurf.Y - llopening.Y); Vector.MemorySafe_CartCoord LLeft = new Vector.MemorySafe_CartCoord(diffX, diffY, 0); cp = makegbCartesianPt(LLeft); } //flat roof else if (Math.Abs(RHRVector.X) == 0 && RHRVector.Y == 0 && RHRVector.Z == 1) { Vector.CartCoord llsurf = new Vector.CartCoord(); LLRet llroof = GetLLForRoof(surfacecoords); llsurf.X = Convert.ToDouble(llroof.cp.Coordinate[0]); llsurf.Y = Convert.ToDouble(llroof.cp.Coordinate[1]); llsurf.Z = Convert.ToDouble(llroof.cp.Coordinate[2]); surfindex = llroof.indices[0]; Vector.CartCoord llopening = new Vector.CartCoord(); for (int occount = 0; occount < openingcoords.Count; occount++) { if (occount == 0) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; continue; } //get lower left...most low(largest Y), then most left (smallest X) if (openingcoords[occount].Y >= llopening.Y) { if (openingcoords[occount].X < llopening.X) { llopening.X = openingcoords[occount].X; llopening.Y = openingcoords[occount].Y; llopening.Z = openingcoords[occount].Z; opindex = occount; } } } double diffX = Math.Abs(llsurf.X - llopening.X); double diffY = Math.Abs(llsurf.Y - llopening.Y); Vector.MemorySafe_CartCoord LLeft = new Vector.MemorySafe_CartCoord(diffX, diffY, 0); cp = makegbCartesianPt(LLeft); } //plane does not reside on a primary axis else { //I will deal with this later //have to factor in what is a "roof" or "floor" or "wall" based on the default tilt settings } ll.cp = cp; ll.indices.Add(surfindex); ll.indices.Add(opindex); return(ll); }