11using System ;
22using System . Collections . Generic ;
33using UnityEngine ;
4- using UnityEngine . Assertions ;
54
65namespace ProceduralToolkit . Examples
76{
@@ -15,7 +14,7 @@ public static MeshDraft Generate(
1514 float roofHeight ,
1615 RoofConfig roofConfig )
1716 {
18- List < Vector2 > roofPolygon = OffsetPolygon ( foundationPolygon , roofConfig . overhang ) ;
17+ List < Vector2 > roofPolygon = Geometry . OffsetPolygon ( foundationPolygon , roofConfig . overhang ) ;
1918
2019 MeshDraft roofDraft ;
2120 switch ( roofConfig . type )
@@ -90,6 +89,7 @@ public static MeshDraft GenerateHipped(List<Vector2> roofPolygon, RoofConfig roo
9089 Vector3 ridgeOffset = ( b - a ) . normalized * 2 ;
9190 Vector3 ridge0 = ( a + d ) / 2 + ridgeHeight + ridgeOffset ;
9291 Vector3 ridge1 = ( b + c ) / 2 + ridgeHeight - ridgeOffset ;
92+
9393 var roofDraft = new MeshDraft ( ) ;
9494 roofDraft . AddQuad ( a , ridge0 , ridge1 , b ) ;
9595 roofDraft . AddTriangle ( b , ridge1 , c ) ;
@@ -102,52 +102,14 @@ private static MeshDraft GenerateBorder(List<Vector2> roofPolygon, RoofConfig ro
102102 {
103103 List < Vector3 > lowerRing = roofPolygon . ConvertAll ( v => v . ToVector3XZ ( ) ) ;
104104 List < Vector3 > upperRing = roofPolygon . ConvertAll ( v => v . ToVector3XZ ( ) + Vector3 . up * roofConfig . thickness ) ;
105- var border = new MeshDraft ( ) . AddFlatQuadBand ( lowerRing , upperRing , false ) ;
106- return border ;
105+ return new MeshDraft ( ) . AddFlatQuadBand ( lowerRing , upperRing , false ) ;
107106 }
108107
109108 private static MeshDraft GenerateOverhang ( List < Vector2 > foundationPolygon , List < Vector2 > roofPolygon )
110109 {
111110 List < Vector3 > lowerRing = foundationPolygon . ConvertAll ( v => v . ToVector3XZ ( ) ) ;
112111 List < Vector3 > upperRing = roofPolygon . ConvertAll ( v => v . ToVector3XZ ( ) ) ;
113- var overhang = new MeshDraft ( ) . AddFlatQuadBand ( lowerRing , upperRing , false ) ;
114- return overhang ;
115- }
116-
117- private static List < Vector2 > OffsetPolygon ( List < Vector2 > polygon , float distance )
118- {
119- var newPolygon = new List < Vector2 > ( ) ;
120- for ( int i = 0 ; i < polygon . Count ; i ++ )
121- {
122- var previous = polygon . GetLooped ( i - 1 ) ;
123- var current = polygon [ i ] ;
124- var next = polygon . GetLooped ( i + 1 ) ;
125- float angle ;
126- Vector2 bisector = GetBisector ( previous , current , next , out angle ) ;
127- float hypotenuse = distance / GetBisectorSin ( angle ) ;
128-
129- newPolygon . Add ( current + bisector * hypotenuse ) ;
130- }
131- return newPolygon ;
132- }
133-
134- private static Vector2 GetBisector ( Vector2 previous , Vector2 current , Vector2 next , out float angle )
135- {
136- Vector2 toPrevious = ( previous - current ) . normalized ;
137- Vector2 toNext = ( next - current ) . normalized ;
138-
139- angle = VectorE . SignedAngle ( toPrevious , toNext ) ;
140- Assert . IsFalse ( float . IsNaN ( angle ) ) ;
141- return toPrevious . RotateCW ( angle / 2 ) ;
142- }
143-
144- private static float GetBisectorSin ( float angle )
145- {
146- if ( angle > 180 )
147- {
148- angle = 360 - angle ;
149- }
150- return Mathf . Sin ( angle / 2 * Mathf . Deg2Rad ) ;
112+ return new MeshDraft ( ) . AddFlatQuadBand ( lowerRing , upperRing , false ) ;
151113 }
152114 }
153115
0 commit comments