@@ -374,6 +374,82 @@ MergeResult<Path> MergePaths(Path a, TimeRange aRange, Path b, TimeRange bRange)
374374 return new MergeResult < Path > ( new Path ( args , a . DrawingDirection , geometryData . Value ! ) ) ;
375375 }
376376
377+ MergeResult < Rectangle > MergeRectangles ( Rectangle a , TimeRange aRange , Rectangle b , TimeRange bRange )
378+ {
379+ if ( a . BlendMode != b . BlendMode || a . DrawingDirection != b . DrawingDirection )
380+ {
381+ return MergeResult < Rectangle > . Failed ;
382+ }
383+
384+ var args = new ShapeLayerContentArgs
385+ {
386+ Name = $ "{ a . Name } { b . Name } ",
387+ MatchName = $ "{ a . MatchName } { b . MatchName } ",
388+ BlendMode = a . BlendMode ,
389+ } ;
390+
391+ var position = MergeIAnimatableVector3 ( a . Position , aRange , b . Position , bRange ) ;
392+ var size = MergeIAnimatableVector3 ( a . Size , aRange , b . Size , bRange ) ;
393+ var roundness = MergeAnimatable ( a . Roundness , aRange , b . Roundness , bRange ) ;
394+
395+ if ( ! position . Success || ! size . Success || ! roundness . Success )
396+ {
397+ return MergeResult < Rectangle > . Failed ;
398+ }
399+
400+ return new MergeResult < Rectangle > ( new Rectangle ( args , a . DrawingDirection , position . Value ! , size . Value ! , roundness . Value ! ) ) ;
401+ }
402+
403+ MergeResult < TrimPath > MergeTrimPaths ( TrimPath a , TimeRange aRange , TrimPath b , TimeRange bRange )
404+ {
405+ if ( a . BlendMode != b . BlendMode || a . TrimPathType != b . TrimPathType )
406+ {
407+ return MergeResult < TrimPath > . Failed ;
408+ }
409+
410+ var args = new ShapeLayerContentArgs
411+ {
412+ Name = $ "{ a . Name } { b . Name } ",
413+ MatchName = $ "{ a . MatchName } { b . MatchName } ",
414+ BlendMode = a . BlendMode ,
415+ } ;
416+
417+ var start = MergeAnimatable ( a . Start , aRange , b . Start , bRange ) ;
418+ var end = MergeAnimatable ( a . End , aRange , b . End , bRange ) ;
419+ var offset = MergeAnimatable ( a . Offset , aRange , b . Offset , bRange ) ;
420+
421+ if ( ! start . Success || ! end . Success || ! offset . Success )
422+ {
423+ return MergeResult < TrimPath > . Failed ;
424+ }
425+
426+ return new MergeResult < TrimPath > ( new TrimPath ( args , a . TrimPathType , start . Value ! , end . Value ! , offset . Value ! ) ) ;
427+ }
428+
429+ MergeResult < RoundCorners > MergeRoundCorners ( RoundCorners a , TimeRange aRange , RoundCorners b , TimeRange bRange )
430+ {
431+ if ( a . BlendMode != b . BlendMode )
432+ {
433+ return MergeResult < RoundCorners > . Failed ;
434+ }
435+
436+ var args = new ShapeLayerContentArgs
437+ {
438+ Name = $ "{ a . Name } { b . Name } ",
439+ MatchName = $ "{ a . MatchName } { b . MatchName } ",
440+ BlendMode = a . BlendMode ,
441+ } ;
442+
443+ var radius = MergeAnimatable ( a . Radius , aRange , b . Radius , bRange ) ;
444+
445+ if ( ! radius . Success )
446+ {
447+ return MergeResult < RoundCorners > . Failed ;
448+ }
449+
450+ return new MergeResult < RoundCorners > ( new RoundCorners ( args , radius . Value ! ) ) ;
451+ }
452+
377453 MergeResult < Ellipse > MergeEllipses ( Ellipse a , TimeRange aRange , Ellipse b , TimeRange bRange )
378454 {
379455 if ( a . BlendMode != b . BlendMode || a . DrawingDirection != b . DrawingDirection )
@@ -508,20 +584,26 @@ MergeResult<ShapeLayerContent> MergeShapeLayerContents(ShapeLayerContent a, Time
508584
509585 switch ( a . ContentType )
510586 {
511- case ShapeContentType . Group :
512- return MergeResult < ShapeLayerContent > . From ( MergeShapeGroup ( ( ShapeGroup ) a , aRange , ( ShapeGroup ) b , bRange ) ) ;
513- case ShapeContentType . Path :
514- return MergeResult < ShapeLayerContent > . From ( MergePaths ( ( Path ) a , aRange , ( Path ) b , bRange ) ) ;
515587 case ShapeContentType . Ellipse :
516588 return MergeResult < ShapeLayerContent > . From ( MergeEllipses ( ( Ellipse ) a , aRange , ( Ellipse ) b , bRange ) ) ;
589+ case ShapeContentType . Group :
590+ return MergeResult < ShapeLayerContent > . From ( MergeShapeGroup ( ( ShapeGroup ) a , aRange , ( ShapeGroup ) b , bRange ) ) ;
517591 case ShapeContentType . LinearGradientFill :
518592 return MergeResult < ShapeLayerContent > . From ( MergeLinearGradientFills ( ( LinearGradientFill ) a , aRange , ( LinearGradientFill ) b , bRange ) ) ;
519- case ShapeContentType . Transform :
520- return MergeResult < ShapeLayerContent > . From ( MergeTransform ( ( Transform ) a , aRange , ( Transform ) b , bRange ) ) ;
593+ case ShapeContentType . Path :
594+ return MergeResult < ShapeLayerContent > . From ( MergePaths ( ( Path ) a , aRange , ( Path ) b , bRange ) ) ;
595+ case ShapeContentType . Rectangle :
596+ return MergeResult < ShapeLayerContent > . From ( MergeRectangles ( ( Rectangle ) a , aRange , ( Rectangle ) b , bRange ) ) ;
597+ case ShapeContentType . RoundCorners :
598+ return MergeResult < ShapeLayerContent > . From ( MergeRoundCorners ( ( RoundCorners ) a , aRange , ( RoundCorners ) b , bRange ) ) ;
521599 case ShapeContentType . SolidColorFill :
522600 return MergeResult < ShapeLayerContent > . From ( MergeSolidColorFills ( ( SolidColorFill ) a , aRange , ( SolidColorFill ) b , bRange ) ) ;
523601 case ShapeContentType . SolidColorStroke :
524602 return MergeResult < ShapeLayerContent > . From ( MergeSolidColorStrokes ( ( SolidColorStroke ) a , aRange , ( SolidColorStroke ) b , bRange ) ) ;
603+ case ShapeContentType . Transform :
604+ return MergeResult < ShapeLayerContent > . From ( MergeTransform ( ( Transform ) a , aRange , ( Transform ) b , bRange ) ) ;
605+ case ShapeContentType . TrimPath :
606+ return MergeResult < ShapeLayerContent > . From ( MergeTrimPaths ( ( TrimPath ) a , aRange , ( TrimPath ) b , bRange ) ) ;
525607 }
526608
527609 return MergeResult < ShapeLayerContent > . Failed ;
@@ -678,16 +760,6 @@ MergeResult<Asset> MergeAssets(Asset a, TimeRange aParentRange, Asset b, TimeRan
678760
679761 public MergeResult < LayerGroup > MergeLayerGroups ( LayerGroup a , LayerGroup b )
680762 {
681- if ( a . MainLayer is PreCompLayer || b . MainLayer is PreCompLayer )
682- {
683- return MergeResult < LayerGroup > . Failed ;
684- }
685-
686- if ( a . MatteLayer is PreCompLayer || b . MatteLayer is PreCompLayer )
687- {
688- return MergeResult < LayerGroup > . Failed ;
689- }
690-
691763 if ( ! a . CanBeMerged || ! b . CanBeMerged )
692764 {
693765 return MergeResult < LayerGroup > . Failed ;
@@ -836,7 +908,7 @@ MergeResult<PreCompLayer> MergePreCompLayers(PreCompLayer a, PreCompLayer b)
836908
837909 var bAsset = GetAssetById ( b . RefId ) ;
838910
839- if ( aAsset is not LayerCollectionAsset || bAsset is not LayerCollectionAsset || aAsset == bAsset )
911+ if ( aAsset is not LayerCollectionAsset || bAsset is not LayerCollectionAsset )
840912 {
841913 return MergeResult < PreCompLayer > . Failed ;
842914 }
0 commit comments