1- using InternalRealtimeCSG ;
1+ using InternalRealtimeCSG ;
22using System . Collections . Generic ;
33using System . Linq ;
44using UnityEditor ;
@@ -695,6 +695,11 @@ static void CopyLastMaterialInternal(CSGBrush dstBrush, int dstSurfaceIndex, boo
695695 var dstTexGenIndex = dstShape . Surfaces [ dstSurfaceIndex ] . TexGenIndex ;
696696 var srcTexGenIndex = srcShape . Surfaces [ srcSurfaceIndex ] . TexGenIndex ;
697697
698+ var srcBrushScale = srcBrush . transform . lossyScale ;
699+ var dstBrushScale = dstBrush . transform . lossyScale ;
700+
701+ var srcBrushFromLocal = srcBrush . transform . localToWorldMatrix ;
702+ var dstBrushFromLocal = dstBrush . transform . localToWorldMatrix ;
698703 var srcBrushFromWorld = srcBrush . transform . worldToLocalMatrix ;
699704 var dstBrushFromWorld = dstBrush . transform . worldToLocalMatrix ;
700705
@@ -729,9 +734,10 @@ static void CopyLastMaterialInternal(CSGBrush dstBrush, int dstSurfaceIndex, boo
729734 var det = edgeDirection . sqrMagnitude ;
730735 if ( det < MathConstants . AlignmentTestEpsilon )
731736 {
737+ var tangent = GeometryUtility . CalculateTangent ( srcNormal ) ;
732738 // Find 2 pairs of points on each plane, assumes planes are perfectly aligned
733739 srcWorldPoint1 = srcWorldPlane . pointOnPlane ;
734- srcWorldPoint2 = GeometryUtility . ProjectPointOnPlane ( srcWorldPlane , srcWorldPoint1 + MathConstants . oneVector3 ) ;
740+ srcWorldPoint2 = GeometryUtility . ProjectPointOnPlane ( srcWorldPlane , srcWorldPoint1 + tangent ) ;
735741
736742 dstWorldPoint1 = GeometryUtility . ProjectPointOnPlane ( dstWorldPlane , srcWorldPoint1 ) ;
737743 dstWorldPoint2 = GeometryUtility . ProjectPointOnPlane ( dstWorldPlane , srcWorldPoint2 ) ;
@@ -754,8 +760,13 @@ static void CopyLastMaterialInternal(CSGBrush dstBrush, int dstSurfaceIndex, boo
754760 var dstModelPoint1 = dstModelFromWorld . MultiplyPoint ( dstWorldPoint1 ) ;
755761 var dstModelPoint2 = dstModelFromWorld . MultiplyPoint ( dstWorldPoint2 ) ;
756762
763+ var scale = dstBrushScale ;
764+ scale . x /= srcBrushScale . x ; if ( float . IsNaN ( scale . x ) || float . IsInfinity ( scale . x ) ) scale . x = 1 ;
765+ scale . y /= srcBrushScale . y ; if ( float . IsNaN ( scale . y ) || float . IsInfinity ( scale . y ) ) scale . y = 1 ;
766+ scale . z /= srcBrushScale . z ; if ( float . IsNaN ( scale . z ) || float . IsInfinity ( scale . z ) ) scale . z = 1 ;
767+
757768 if ( AlignTextureSpaces ( srcBrushFromModel , srcTexGens [ srcTexGenIndex ] , srcTexGenFlags [ srcTexGenIndex ] , ref srcSurfaces [ srcSurfaceIndex ] , srcModelPoint1 , srcModelPoint2 ,
758- dstBrushFromModel , ref dstTexGens [ dstTexGenIndex ] , dstTexGenFlags [ dstTexGenIndex ] , ref dstSurfaces [ dstSurfaceIndex ] , dstModelPoint1 , dstModelPoint2 , flipX ) )
769+ dstBrushFromModel , ref dstTexGens [ dstTexGenIndex ] , dstTexGenFlags [ dstTexGenIndex ] , ref dstSurfaces [ dstSurfaceIndex ] , dstModelPoint1 , dstModelPoint2 , flipX , scale ) )
759770 {
760771 if ( dstTexGens . Length != dstTexGenFlags . Length )
761772 {
@@ -1264,7 +1275,7 @@ public static bool TranslateTextureCoordInLocalSpace(ref TexGen texGen, TexGenFl
12641275 }
12651276
12661277 public static bool AlignTextureSpaces ( Matrix4x4 src_Brush_From_Model , TexGen srcTexGen , TexGenFlags srcTexGenFlags , ref Surface srcSurface , Vector3 srcModelPoint1 , Vector3 srcModelPoint2 ,
1267- Matrix4x4 dst_Brush_From_Model , ref TexGen dstTexGen , TexGenFlags dstTexGenFlags , ref Surface dstSurface , Vector3 dstModelPoint1 , Vector3 dstModelPoint2 , bool flipX )
1278+ Matrix4x4 dst_Brush_From_Model , ref TexGen dstTexGen , TexGenFlags dstTexGenFlags , ref Surface dstSurface , Vector3 dstModelPoint1 , Vector3 dstModelPoint2 , bool flipX , Vector3 scale )
12681279 {
12691280 var src_Plane_From_Model = GenerateModelSpaceToPlaneSpaceMatrix ( srcSurface , srcTexGenFlags , src_Brush_From_Model ) ;
12701281 var dst_Plane_From_Model = GenerateModelSpaceToPlaneSpaceMatrix ( dstSurface , dstTexGenFlags , dst_Brush_From_Model ) ;
@@ -1311,6 +1322,12 @@ public static bool AlignTextureSpaces(Matrix4x4 src_Brush_From_Model, TexGen
13111322 dstTexGen . RotationAngle = angle ;
13121323 }
13131324
1325+ if ( scale != Vector3 . one )
1326+ {
1327+ var dst_Texture_From_Plane = dstTexGen . GeneratePlaneSpaceToTextureSpaceMatrix ( ) ;
1328+ dstTexGen . Scale = dst_Texture_From_Plane . MultiplyVector ( scale ) ;
1329+ }
1330+
13141331 // Re-align dstTexcoord1 with srcTexcoord1 on dstTexGen
13151332 {
13161333 dstTexGen . Translation = Vector2 . zero ;
0 commit comments