@@ -77,38 +77,29 @@ abstract class Container extends Element implements IContainer {
77
77
let maxX = - Infinity ;
78
78
let minY = Infinity ;
79
79
let maxY = - Infinity ;
80
- let hitChild = false ;
80
+ const xArr = [ ] ;
81
+ const yArr = [ ] ;
81
82
// 将可见元素、图形以及不为空的图形分组筛选出来,用于包围盒合并
82
- this . getChildren ( ) . forEach ( ( child ) => {
83
- if (
84
- child . get ( 'visible' ) &&
85
- ( ! child . isGroup ( ) || ( child . isGroup ( ) && ( child as IGroup ) . getChildren ( ) . length > 0 ) )
86
- ) {
87
- hitChild = true ;
88
- const { minX : childMinX , maxX : childMaxX , minY : childMinY , maxY : childMaxY } = child . getBBox ( ) ;
89
-
90
- if ( childMinX < minX ) {
91
- minX = childMinX ;
92
- }
93
- if ( childMaxX > maxX ) {
94
- maxX = childMaxX ;
95
- }
96
- if ( childMinY < minY ) {
97
- minY = childMinY ;
98
- }
99
- if ( childMaxY > maxY ) {
100
- maxY = childMaxY ;
101
- }
102
- }
103
- } ) ;
104
-
105
- if ( ! hitChild ) {
83
+ const children = this . getChildren ( ) . filter (
84
+ ( child ) =>
85
+ child . get ( 'visible' ) && ( ! child . isGroup ( ) || ( child . isGroup ( ) && ( child as IGroup ) . getChildren ( ) . length > 0 ) )
86
+ ) ;
87
+ if ( children . length > 0 ) {
88
+ each ( children , ( child : IElement ) => {
89
+ const box = child . getBBox ( ) ;
90
+ xArr . push ( box . minX , box . maxX ) ;
91
+ yArr . push ( box . minY , box . maxY ) ;
92
+ } ) ;
93
+ minX = min ( xArr ) ;
94
+ maxX = max ( xArr ) ;
95
+ minY = min ( yArr ) ;
96
+ maxY = max ( yArr ) ;
97
+ } else {
106
98
minX = 0 ;
107
99
maxX = 0 ;
108
100
minY = 0 ;
109
101
maxY = 0 ;
110
102
}
111
-
112
103
const box = {
113
104
x : minX ,
114
105
y : minY ,
@@ -128,38 +119,29 @@ abstract class Container extends Element implements IContainer {
128
119
let maxX = - Infinity ;
129
120
let minY = Infinity ;
130
121
let maxY = - Infinity ;
131
- let hitChild = false ;
122
+ const xArr = [ ] ;
123
+ const yArr = [ ] ;
132
124
// 将可见元素、图形以及不为空的图形分组筛选出来,用于包围盒合并
133
- this . getChildren ( ) . forEach ( ( child ) => {
134
- if (
135
- child . get ( 'visible' ) &&
136
- ( ! child . isGroup ( ) || ( child . isGroup ( ) && ( child as IGroup ) . getChildren ( ) . length > 0 ) )
137
- ) {
138
- hitChild = true ;
139
- const { minX : childMinX , maxX : childMaxX , minY : childMinY , maxY : childMaxY } = child . getCanvasBBox ( ) ;
140
-
141
- if ( childMinX < minX ) {
142
- minX = childMinX ;
143
- }
144
- if ( childMaxX > maxX ) {
145
- maxX = childMaxX ;
146
- }
147
- if ( childMinY < minY ) {
148
- minY = childMinY ;
149
- }
150
- if ( childMaxY > maxY ) {
151
- maxY = childMaxY ;
152
- }
153
- }
154
- } ) ;
155
-
156
- if ( ! hitChild ) {
125
+ const children = this . getChildren ( ) . filter (
126
+ ( child ) =>
127
+ child . get ( 'visible' ) && ( ! child . isGroup ( ) || ( child . isGroup ( ) && ( child as IGroup ) . getChildren ( ) . length > 0 ) )
128
+ ) ;
129
+ if ( children . length > 0 ) {
130
+ each ( children , ( child : IElement ) => {
131
+ const box = child . getCanvasBBox ( ) ;
132
+ xArr . push ( box . minX , box . maxX ) ;
133
+ yArr . push ( box . minY , box . maxY ) ;
134
+ } ) ;
135
+ minX = min ( xArr ) ;
136
+ maxX = max ( xArr ) ;
137
+ minY = min ( yArr ) ;
138
+ maxY = max ( yArr ) ;
139
+ } else {
157
140
minX = 0 ;
158
141
maxX = 0 ;
159
142
minY = 0 ;
160
143
maxY = 0 ;
161
144
}
162
-
163
145
const box = {
164
146
x : minX ,
165
147
y : minY ,
0 commit comments