FreeCAD

Форк
0
/
ArchWindowPresets.py 
525 строк · 26.3 Кб
1
#***************************************************************************
2
#*   Copyright (c) 2020 Yorik van Havre <yorik@uncreated.net>              *
3
#*                                                                         *
4
#*   This program is free software; you can redistribute it and/or modify  *
5
#*   it under the terms of the GNU Lesser General Public License (LGPL)    *
6
#*   as published by the Free Software Foundation; either version 2 of     *
7
#*   the License, or (at your option) any later version.                   *
8
#*   for detail see the LICENCE text file.                                 *
9
#*                                                                         *
10
#*   This program is distributed in the hope that it will be useful,       *
11
#*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12
#*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13
#*   GNU Library General Public License for more details.                  *
14
#*                                                                         *
15
#*   You should have received a copy of the GNU Library General Public     *
16
#*   License along with this program; if not, write to the Free Software   *
17
#*   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
18
#*   USA                                                                   *
19
#*                                                                         *
20
#***************************************************************************
21

22
import FreeCAD
23

24
from FreeCAD import Vector
25
from draftutils.translate import translate
26

27

28
WindowPresets =  ["Fixed", "Open 1-pane", "Open 2-pane", "Sash 2-pane", "Sliding 2-pane",
29
                  "Simple door", "Glass door", "Sliding 4-pane", "Awning", "Opening only"]
30

31
def makeWindowPreset(windowtype,width,height,h1,h2,h3,w1,w2,o1,o2,placement=None):
32

33
    """makeWindowPreset(windowtype,width,height,h1,h2,h3,w1,w2,o1,o2,[placement]): makes a
34
    window object based on the given data. windowtype must be one of the names
35
    defined in Arch.WindowPresets"""
36

37
    if not FreeCAD.ActiveDocument:
38
        FreeCAD.Console.PrintError("No active document. Aborting\n")
39
        return
40

41
    def makeSketch(windowtype,width,height,h1,h2,h3,w1,w2,o1,o2):
42

43
        import Part
44
        import Sketcher
45
        width = float(width)
46
        height = float(height)
47
        h1 = float(h1)
48
        h2 = float(h2)
49
        h3 = float(h3)
50
        w1 = float(w1)
51
        w2 = float(w2)
52
        o1 = float(o1)
53
        o2 = float(o2)
54
        # h1, h2, w1, w2 cannot be null (for now)
55
        # TODO allow these to be null (don't create the component if so)
56
        if h1*h2*w1*w2 == 0:
57
            FreeCAD.Console.PrintError("H1, H2, W1 and W2 parameters cannot be zero. Aborting\n")
58
            return
59
        # small spacing to avoid wrong auto-wires in sketch
60
        tol = h1/10
61
        # glass size divider
62
        gla = 10
63
        s = FreeCAD.ActiveDocument.addObject('Sketcher::SketchObject','Sketch')
64

65
        def addRectangle(s,p1,p2,p3,p4):
66

67
            "adds a rectangle to the given sketch"
68

69
            idx = s.GeometryCount
70
            s.addGeometry(Part.LineSegment(p1,p2))
71
            s.addGeometry(Part.LineSegment(p2,p3))
72
            s.addGeometry(Part.LineSegment(p3,p4))
73
            s.addGeometry(Part.LineSegment(p4,p1))
74
            s.addConstraint(Sketcher.Constraint('Coincident',idx,2,idx+1,1))
75
            s.addConstraint(Sketcher.Constraint('Coincident',idx+1,2,idx+2,1))
76
            s.addConstraint(Sketcher.Constraint('Coincident',idx+2,2,idx+3,1))
77
            s.addConstraint(Sketcher.Constraint('Coincident',idx+3,2,idx,1))
78
            s.addConstraint(Sketcher.Constraint('Horizontal',idx))
79
            s.addConstraint(Sketcher.Constraint('Horizontal',idx+2))
80
            s.addConstraint(Sketcher.Constraint('Vertical',idx+1))
81
            s.addConstraint(Sketcher.Constraint('Vertical',idx+3))
82

83
        def addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8):
84

85
            "adds two rectangles to the given sketch"
86

87
            addRectangle(s,p1,p2,p3,p4)
88
            addRectangle(s,p5,p6,p7,p8)
89

90
        def simpleFrame(s,width,height,h1,h2,tol):
91

92
            "creates a simple frame with constraints"
93

94
            p1 = Vector(h1+tol,h1+tol,0)
95
            p2 = Vector(width-(h1+tol),h1+tol,0)
96
            p3 = Vector(width-(h1+tol),height-(h1+tol),0)
97
            p4 = Vector(h1+tol,height-(h1+tol),0)
98
            p5 = Vector(h1+h2,h1+h2,0)
99
            p6 = Vector(width-(h1+h2),h1+h2,0)
100
            p7 = Vector(width-(h1+h2),height-(h1+h2),0)
101
            p8 = Vector(h1+h2,height-(h1+h2),0)
102
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
103
            s.addConstraint(Sketcher.Constraint('DistanceX',8,1,12,1,h2))
104
            s.addConstraint(Sketcher.Constraint('DistanceY',8,1,12,1,h2))
105
            s.addConstraint(Sketcher.Constraint('DistanceX',14,1,10,1,h2))
106
            s.addConstraint(Sketcher.Constraint('DistanceY',14,1,10,1,h2))
107
            s.addConstraint(Sketcher.Constraint('DistanceX',4,1,8,1,tol))
108
            s.addConstraint(Sketcher.Constraint('DistanceY',4,1,8,1,tol))
109
            s.addConstraint(Sketcher.Constraint('DistanceX',10,1,6,1,tol))
110
            s.addConstraint(Sketcher.Constraint('DistanceY',10,1,6,1,tol))
111
            if h2 == h1:
112
                s.renameConstraint(39,'Frame5')
113
                s.renameConstraint(40,'Frame6')
114
                s.renameConstraint(42,'Frame7')
115
                s.renameConstraint(41,'Frame8')
116

117
        def outerFrame(s,width,height,h1,w1,o1):
118

119
            p1 = Vector(0,0,0)
120
            p2 = Vector(width,0,0)
121
            p3 = Vector(width,height,0)
122
            p4 = Vector(0,height,0)
123
            p5 = Vector(h1,h1,0)
124
            p6 = Vector(width-h1,h1,0)
125
            p7 = Vector(width-h1,height-h1,0)
126
            p8 = Vector(h1,height-h1,0)
127
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
128
            s.addConstraint(Sketcher.Constraint('DistanceY',1,height)) #16
129
            s.addConstraint(Sketcher.Constraint('DistanceX',0,width)) #17
130
            s.renameConstraint(16, 'Height')
131
            s.renameConstraint(17, 'Width')
132
            s.addConstraint(Sketcher.Constraint('DistanceY',6,2,2,2,h1))
133
            s.addConstraint(Sketcher.Constraint('DistanceX',2,2,6,2,h1))
134
            s.addConstraint(Sketcher.Constraint('DistanceX',4,2,0,2,h1))
135
            s.addConstraint(Sketcher.Constraint('DistanceY',0,2,4,2,h1))
136
            s.renameConstraint(18, 'Frame1')
137
            s.renameConstraint(19, 'Frame2')
138
            s.renameConstraint(20, 'Frame3')
139
            s.renameConstraint(21, 'Frame4')
140
            s.addConstraint(Sketcher.Constraint('Coincident',0,1,-1,1))
141
            return ["OuterFrame","Frame","Wire0,Wire1",str(w1-w2)+"+V","0.00+V"]
142

143
        def doorFrame(s,width,height,h1,w1,o1):
144

145
            p1 = Vector(0,0,0)
146
            p2 = Vector(width,0,0)
147
            p3 = Vector(width,height,0)
148
            p4 = Vector(0,height,0)
149
            p5 = Vector(h1,0,0)
150
            p6 = Vector(width-h1,0,0)
151
            p7 = Vector(width-h1,height-h1,0)
152
            p8 = Vector(h1,height-h1,0)
153
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
154
            s.addConstraint(Sketcher.Constraint('DistanceY',1,height)) #16
155
            s.addConstraint(Sketcher.Constraint('DistanceX',0,width)) #17
156
            s.renameConstraint(16, 'Height')
157
            s.renameConstraint(17, 'Width')
158
            s.addConstraint(Sketcher.Constraint('DistanceY',6,2,2,2,h1))
159
            s.addConstraint(Sketcher.Constraint('DistanceX',2,2,6,2,h1))
160
            s.addConstraint(Sketcher.Constraint('DistanceX',4,2,0,2,h1))
161
            s.addConstraint(Sketcher.Constraint('DistanceY',0,2,4,2,0.0))
162
            s.addConstraint(Sketcher.Constraint('Coincident',0,1,-1,1))
163
            s.renameConstraint(18, 'Frame1')
164
            s.renameConstraint(19, 'Frame2')
165
            s.renameConstraint(20, 'Frame3')
166
            return ["OuterFrame","Frame","Wire0,Wire1",str(w1-w2)+"+V","0.00+V"]
167

168
        if windowtype == "Fixed":
169

170
            wp = outerFrame(s,width,height,h1,w1,o1)
171
            wp.extend(["Glass","Glass panel","Wire1",str(w1/gla),str(w1/2)+"+V"])
172

173
        elif windowtype == "Open 1-pane":
174

175
            wp = outerFrame(s,width,height,h1,w1,o1)
176
            simpleFrame(s,width,height,h1,h2,tol)
177
            fw = str(w2)
178
            if w2 == w1:
179
                fw = "0.00+V"
180
            wp.extend(["InnerFrame","Frame","Wire2,Wire3,Edge8,Mode1",fw,str(o2)+"+V"])
181
            wp.extend(["InnerGlass","Glass panel","Wire3",str(w2/gla),str(o2+w2/2)+"+V"])
182

183
        elif windowtype == "Open 2-pane":
184

185
            wp = outerFrame(s,width,height,h1,w1,o1)
186
            p1 = Vector(h1+tol,h1+tol,0)
187
            p2 = Vector((width/2)-tol,h1+tol,0)
188
            p3 = Vector((width/2)-tol,height-(h1+tol),0)
189
            p4 = Vector(h1+tol,height-(h1+tol),0)
190
            p5 = Vector(h1+h2,h1+h2,0)
191
            p6 = Vector((width/2)-h2,h1+h2,0)
192
            p7 = Vector((width/2)-h2,height-(h1+h2),0)
193
            p8 = Vector(h1+h2,height-(h1+h2),0)
194
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
195
            p1 = Vector((width/2)+tol,h1+tol,0)
196
            p2 = Vector(width-(h1+tol),h1+tol,0)
197
            p3 = Vector(width-(h1+tol),height-(h1+tol),0)
198
            p4 = Vector((width/2)+tol,height-(h1+tol),0)
199
            p5 = Vector((width/2)+h2,h1+h2,0)
200
            p6 = Vector(width-(h1+h2),h1+h2,0)
201
            p7 = Vector(width-(h1+h2),height-(h1+h2),0)
202
            p8 = Vector((width/2)+h2,height-(h1+h2),0)
203
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
204
            s.addConstraint(Sketcher.Constraint('DistanceY',8,1,12,1,h2))
205
            s.addConstraint(Sketcher.Constraint('DistanceX',8,1,12,1,h2))
206
            s.addConstraint(Sketcher.Constraint('DistanceX',21,2,17,2,h2))
207
            s.addConstraint(Sketcher.Constraint('DistanceY',21,2,17,2,h2))
208
            s.addConstraint(Sketcher.Constraint('DistanceX',16,1,20,1,h2))
209
            s.addConstraint(Sketcher.Constraint('DistanceX',14,1,10,1,h2))
210
            s.addConstraint(Sketcher.Constraint('Equal',22,14))
211
            s.addConstraint(Sketcher.Constraint('DistanceY',8,2,16,1,0.0))
212
            s.addConstraint(Sketcher.Constraint('DistanceY',10,1,18,2,0.0))
213
            s.addConstraint(Sketcher.Constraint('DistanceX',4,1,8,1,tol))
214
            s.addConstraint(Sketcher.Constraint('DistanceY',4,1,8,1,tol))
215
            s.addConstraint(Sketcher.Constraint('DistanceX',6,1,18,1,-tol))
216
            s.addConstraint(Sketcher.Constraint('DistanceY',6,1,18,1,-tol))
217
            s.addConstraint(Sketcher.Constraint('DistanceX',9,1,19,2,tol))
218
            s.addConstraint(Sketcher.Constraint('PointOnObject',13,2,22))
219
            s.addConstraint(Sketcher.Constraint('PointOnObject',20,1,12))
220
            if h1 == h2:
221
                s.renameConstraint(55,'Frame5')
222
                s.renameConstraint(56,'Frame6')
223
                s.renameConstraint(57,'Frame7')
224
                s.renameConstraint(58,'Frame8')
225
                s.renameConstraint(59,'Frame9')
226
                s.renameConstraint(60,'Frame10')
227
            fw = str(w2)
228
            if w2 == w1:
229
                fw = "0.00+V"
230
            wp.extend(["LeftFrame","Frame","Wire2,Wire3,Edge8,Mode1",fw,str(o2)+"+V"])
231
            wp.extend(["LeftGlass","Glass panel","Wire3",str(w2/gla),str(o2+w2/2)+"+V"])
232
            wp.extend(["RightFrame","Frame","Wire4,Wire5,Edge6,Mode2",fw,str(o2)+"+V"])
233
            wp.extend(["RightGlass","Glass panel","Wire5",str(w2/gla),str(o2+w2/2)+"+V"])
234

235
        elif windowtype == "Sash 2-pane":
236

237
            wp = outerFrame(s,width,height,h1,w1,o1)
238
            p1 = Vector(h1+tol,h1+tol,0)
239
            p2 = Vector(width-(h1+tol),h1+tol,0)
240
            p3 = Vector(width-(h1+tol),(height/2)-tol,0)
241
            p4 = Vector(h1+tol,(height/2)-tol,0)
242
            p5 = Vector(h1+h2,h1+h2,0)
243
            p6 = Vector(width-(h1+h2),h1+h2,0)
244
            p7 = Vector(width-(h1+h2),(height/2)-h2,0)
245
            p8 = Vector(h1+h2,(height/2)-h2,0)
246
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
247
            p1 = Vector(h1+tol,(height/2)+tol,0)
248
            p2 = Vector(width-(h1+tol),(height/2)+tol,0)
249
            p3 = Vector(width-(h1+tol),height-(h1+tol),0)
250
            p4 = Vector(h1+tol,height-(h1+tol),0)
251
            p5 = Vector(h1+h2,(height/2)+h2,0)
252
            p6 = Vector(width-(h1+h2),(height/2)+h2,0)
253
            p7 = Vector(width-(h1+h2),height-(h1+h2),0)
254
            p8 = Vector(h1+h2,height-(h1+h2),0)
255
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
256
            s.addConstraint(Sketcher.Constraint('DistanceY',8,1,12,1,h2))
257
            s.addConstraint(Sketcher.Constraint('DistanceX',8,1,12,1,h2))
258
            s.addConstraint(Sketcher.Constraint('DistanceX',21,2,17,2,h2))
259
            s.addConstraint(Sketcher.Constraint('DistanceY',21,2,17,2,h2))
260
            s.addConstraint(Sketcher.Constraint('DistanceY',16,2,20,1,h2))
261
            s.addConstraint(Sketcher.Constraint('DistanceY',10,2,14,2,-h2))
262
            s.addConstraint(Sketcher.Constraint('Equal',23,15))
263
            s.addConstraint(Sketcher.Constraint('DistanceX',12,1,20,1,0.0))
264
            s.addConstraint(Sketcher.Constraint('DistanceX',13,2,20,2,0.0))
265
            s.addConstraint(Sketcher.Constraint('DistanceX',4,1,8,1,tol))
266
            s.addConstraint(Sketcher.Constraint('DistanceY',4,1,8,1,tol))
267
            s.addConstraint(Sketcher.Constraint('DistanceX',6,1,18,1,-tol))
268
            s.addConstraint(Sketcher.Constraint('DistanceY',6,1,18,1,-tol))
269
            s.addConstraint(Sketcher.Constraint('DistanceY',10,1,16,1,tol))
270
            s.addConstraint(Sketcher.Constraint('PointOnObject',9,2,17))
271
            s.addConstraint(Sketcher.Constraint('PointOnObject',16,1,11))
272
            if h1 == h2:
273
                s.renameConstraint(55,'Frame5')
274
                s.renameConstraint(56,'Frame6')
275
                s.renameConstraint(57,'Frame7')
276
                s.renameConstraint(58,'Frame8')
277
                s.renameConstraint(59,'Frame9')
278
                s.renameConstraint(60,'F10')
279
                s.setExpression('.Constraints.F10','-.Constraints.Frame5')
280
            fw = str(w2)
281
            if w2 == w1:
282
                fw = "0.00+V"
283
            wp.extend(["LowerFrame","Frame","Wire2,Wire3",fw,str(o2+w2)+"+V"])
284
            wp.extend(["LowerGlass","Glass panel","Wire3",str(w2/gla),str(o2+w2+w2/2)+"+V"])
285
            wp.extend(["UpperFrame","Frame","Wire4,Wire5",fw,str(o2)+"+V"])
286
            wp.extend(["UpperGlass","Glass panel","Wire5",str(w2/gla),str(o2+w2/2)+"+V"])
287

288
        elif windowtype == "Sliding 2-pane":
289

290
            wp = outerFrame(s,width,height,h1,w1,o1)
291
            p1 = Vector(h1+tol,h1+tol,0)
292
            p2 = Vector((width/2)-tol,h1+tol,0)
293
            p3 = Vector((width/2)-tol,height-(h1+tol),0)
294
            p4 = Vector(h1+tol,height-(h1+tol),0)
295
            p5 = Vector(h1+h2,h1+h2,0)
296
            p6 = Vector((width/2)-h2,h1+h2,0)
297
            p7 = Vector((width/2)-h2,height-(h1+h2),0)
298
            p8 = Vector(h1+h2,height-(h1+h2),0)
299
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
300
            p1 = Vector((width/2)+tol,h1+tol,0)
301
            p2 = Vector(width-(h1+tol),h1+tol,0)
302
            p3 = Vector(width-(h1+tol),height-(h1+tol),0)
303
            p4 = Vector((width/2)+tol,height-(h1+tol),0)
304
            p5 = Vector((width/2)+h2,h1+h2,0)
305
            p6 = Vector(width-(h1+h2),h1+h2,0)
306
            p7 = Vector(width-(h1+h2),height-(h1+h2),0)
307
            p8 = Vector((width/2)+h2,height-(h1+h2),0)
308
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
309
            s.addConstraint(Sketcher.Constraint('DistanceY',8,1,12,1,h2))
310
            s.addConstraint(Sketcher.Constraint('DistanceX',8,1,12,1,h2))
311
            s.addConstraint(Sketcher.Constraint('DistanceX',21,2,17,2,h2))
312
            s.addConstraint(Sketcher.Constraint('DistanceY',21,2,17,2,h2))
313
            s.addConstraint(Sketcher.Constraint('DistanceX',16,1,20,1,h2))
314
            s.addConstraint(Sketcher.Constraint('DistanceX',14,1,10,1,h2))
315
            s.addConstraint(Sketcher.Constraint('Equal',22,14))
316
            s.addConstraint(Sketcher.Constraint('DistanceY',8,2,16,1,0.0))
317
            s.addConstraint(Sketcher.Constraint('DistanceY',10,1,18,2,0.0))
318
            s.addConstraint(Sketcher.Constraint('DistanceX',4,1,8,1,tol))
319
            s.addConstraint(Sketcher.Constraint('DistanceY',4,1,8,1,tol))
320
            s.addConstraint(Sketcher.Constraint('DistanceX',6,1,18,1,-tol))
321
            s.addConstraint(Sketcher.Constraint('DistanceY',6,1,18,1,-tol))
322
            s.addConstraint(Sketcher.Constraint('DistanceX',9,1,19,2,tol))
323
            s.addConstraint(Sketcher.Constraint('PointOnObject',13,2,22))
324
            s.addConstraint(Sketcher.Constraint('PointOnObject',12,2,20))
325
            if h1 == h2:
326
                s.renameConstraint(55,'Frame5')
327
                s.renameConstraint(56,'Frame6')
328
                s.renameConstraint(57,'Frame7')
329
                s.renameConstraint(58,'Frame8')
330
                s.renameConstraint(59,'Frame9')
331
                s.renameConstraint(60,'Frame10')
332
            fw = str(w2)
333
            if w2 == w1:
334
                fw = "0.00+V"
335
            wp.extend(["LeftFrame","Frame","Wire2,Wire3",fw,str(o2)+"+V"])
336
            wp.extend(["LeftGlass","Glass panel","Wire3",str(w2/gla),str(o2+w2/2)+"+V"])
337
            wp.extend(["RightFrame","Frame","Wire4,Wire5",fw,str(o2+w2)+"+V"])
338
            wp.extend(["RightGlass","Glass panel","Wire5",str(w2/gla),str(o2+w2+w2/2)+"+V"])
339

340
        elif windowtype == "Sliding 4-pane":
341

342
            wp = outerFrame(s,width,height,h1,w1,o1)
343
            p1 = Vector(h1+tol,h1+tol,0)
344
            p2 = Vector(width/4-tol,h1+tol,0)
345
            p3 = Vector(width/4-tol,height-(h1+tol),0)
346
            p4 = Vector(h1+tol,height-(h1+tol),0)
347
            p5 = Vector(h1+h2,h1+h2,0)
348
            p6 = Vector(width/4-h2,h1+h2,0)
349
            p7 = Vector(width/4-h2,height-(h1+h2),0)
350
            p8 = Vector(h1+h2,height-(h1+h2),0)
351
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
352
            p1 = Vector(width/4+tol,h1+tol,0)
353
            p2 = Vector(width/2-tol,h1+tol,0)
354
            p3 = Vector(width/2-tol,height-(h1+tol),0)
355
            p4 = Vector(width/4+tol,height-(h1+tol),0)
356
            p5 = Vector(width/4+h2,h1+h2,0)
357
            p6 = Vector(width/2-h2,h1+h2,0)
358
            p7 = Vector(width/2-h2,height-(h1+h2),0)
359
            p8 = Vector(width/4+h2,height-(h1+h2),0)
360
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
361
            p1 = Vector(width/2+tol,h1+tol,0)
362
            p2 = Vector(width*3/4-tol,h1+tol,0)
363
            p3 = Vector(width*3/4-tol,height-(h1+tol),0)
364
            p4 = Vector(width/2+tol,height-(h1+tol),0)
365
            p5 = Vector(width/2+h2,h1+h2,0)
366
            p6 = Vector(width*3/4-h2,h1+h2,0)
367
            p7 = Vector(width*3/4-h2,height-(h1+h2),0)
368
            p8 = Vector(width/2+h2,height-(h1+h2),0)
369
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
370
            p1 = Vector(width*3/4+tol,h1+tol,0)
371
            p2 = Vector(width-(h1+tol),h1+tol,0)
372
            p3 = Vector(width-(h1+tol),height-(h1+tol),0)
373
            p4 = Vector(width*3/4+tol,height-(h1+tol),0)
374
            p5 = Vector(width*3/4+h2,h1+h2,0)
375
            p6 = Vector(width-(h1+h2),h1+h2,0)
376
            p7 = Vector(width-(h1+h2),height-(h1+h2),0)
377
            p8 = Vector(width*3/4+h2,height-(h1+h2),0)
378
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
379
            s.addConstraint(Sketcher.Constraint('DistanceX',4,1,8,1,tol))
380
            s.addConstraint(Sketcher.Constraint('DistanceX',8,2,16,1,tol))
381
            s.addConstraint(Sketcher.Constraint('DistanceX',17,1,27,2,tol))
382
            s.addConstraint(Sketcher.Constraint('DistanceX',24,2,32,1,tol))
383
            s.addConstraint(Sketcher.Constraint('DistanceX',32,2,4,2,tol))
384
            s.addConstraint(Sketcher.Constraint('DistanceY',4,1,8,1,tol))
385
            s.addConstraint(Sketcher.Constraint('DistanceY',10,2,6,2,tol))
386
            s.addConstraint(Sketcher.Constraint('DistanceY',17,2,26,2,0.0))
387
            s.addConstraint(Sketcher.Constraint('DistanceY',25,2,34,2,0.0))
388
            s.addConstraint(Sketcher.Constraint('DistanceY',8,2,16,1,0.0))
389
            s.addConstraint(Sketcher.Constraint('DistanceY',9,2,18,2,0.0))
390
            s.addConstraint(Sketcher.Constraint('DistanceY',16,2,24,1,0.0))
391
            s.addConstraint(Sketcher.Constraint('DistanceY',24,2,32,1,0.0))
392
            s.addConstraint(Sketcher.Constraint('DistanceX',8,1,12,1,h2))
393
            s.addConstraint(Sketcher.Constraint('DistanceY',8,1,12,1,h2))
394
            s.addConstraint(Sketcher.Constraint('DistanceX',13,2,9,2,h2))
395
            s.addConstraint(Sketcher.Constraint('DistanceY',13,2,9,2,h2))
396
            s.addConstraint(Sketcher.Constraint('DistanceX',16,1,20,1,h2))
397
            s.addConstraint(Sketcher.Constraint('DistanceY',16,1,20,1,h2))
398
            s.addConstraint(Sketcher.Constraint('DistanceX',21,2,17,2,h2))
399
            s.addConstraint(Sketcher.Constraint('DistanceY',21,2,17,2,h2))
400
            s.addConstraint(Sketcher.Constraint('DistanceX',24,1,28,1,h2))
401
            s.addConstraint(Sketcher.Constraint('DistanceY',24,1,28,1,h2))
402
            s.addConstraint(Sketcher.Constraint('DistanceX',29,2,25,2,h2))
403
            s.addConstraint(Sketcher.Constraint('DistanceY',29,2,25,2,h2))
404
            s.addConstraint(Sketcher.Constraint('DistanceX',32,1,36,1,h2))
405
            s.addConstraint(Sketcher.Constraint('DistanceY',32,1,36,1,h2))
406
            s.addConstraint(Sketcher.Constraint('DistanceX',37,2,33,2,h2))
407
            s.addConstraint(Sketcher.Constraint('DistanceY',37,2,33,2,h2))
408
            s.addConstraint(Sketcher.Constraint('Equal',14,22))
409
            s.addConstraint(Sketcher.Constraint('Equal',22,30))
410
            s.addConstraint(Sketcher.Constraint('Equal',30,38))
411
            if h1 == h2:
412
                s.renameConstraint(100,'Frame5')
413
                s.renameConstraint(101,'Frame6')
414
                s.renameConstraint(102,'Frame7')
415
                s.renameConstraint(103,'Frame8')
416
                s.renameConstraint(104,'Frame9')
417
                s.renameConstraint(105,'Frame10')
418
                s.renameConstraint(106,'Frame11')
419
                s.renameConstraint(107,'Frame12')
420
                s.renameConstraint(108,'Frame13')
421
                s.renameConstraint(109,'Frame14')
422
                s.renameConstraint(110,'Frame15')
423
                s.renameConstraint(111,'Frame16')
424
                s.renameConstraint(112,'Frame17')
425
                s.renameConstraint(113,'Frame18')
426
                s.renameConstraint(114,'Frame19')
427
                s.renameConstraint(115,'Frame20')
428
            fw = str(w2)
429
            if w2 == w1:
430
                fw = "0.00+V"
431
            wp.extend(["LeftMostFrame","Frame","Wire2,Wire3",fw,str(o2)+"+V"])
432
            wp.extend(["LeftMostGlass","Glass panel","Wire3",str(w2/gla),str(o2+w2/2)+"+V"])
433
            wp.extend(["LeftFrame","Frame","Wire4,Wire5",fw,str(o2+w2)+"+V"])
434
            wp.extend(["LeftGlass","Glass panel","Wire5",str(w2/gla),str(o2+w2+w2/2)+"+V"])
435
            wp.extend(["RightFrame","Frame","Wire6,Wire7",fw,str(o2+w2)+"+V"])
436
            wp.extend(["RightGlass","Glass panel","Wire7",str(w2/gla),str(o2+w2+w2/2)+"+V"])
437
            wp.extend(["RightMostFrame","Frame","Wire8,Wire9",fw,str(o2)+"+V"])
438
            wp.extend(["RightMostGlass","Glass panel","Wire9",str(w2/gla),str(o2+w2/2)+"+V"])
439

440
        elif windowtype == "Awning":
441

442
            wp = outerFrame(s,width,height,h1,w1,o1)
443
            simpleFrame(s,width,height,h1,h2,tol)
444
            fw = str(w2)
445
            if w2 == w1:
446
                fw = "0.00+V"
447
            wp.extend(["InnerFrame","Frame","Wire2,Wire3,Edge7,Mode1",fw,str(o2)+"+V"])
448
            wp.extend(["InnerGlass","Glass panel","Wire3",str(w2/gla),str(o2+w2/2)+"+V"])
449

450

451
        elif windowtype == "Simple door":
452

453
            wp = doorFrame(s,width,height,h1,w1,o1)
454
            wp.extend(["Door","Solid panel","Wire1,Edge8,Mode1",str(w2),str(o2)+"+V"])
455

456
        elif windowtype == "Glass door":
457

458
            wp = doorFrame(s,width,height,h1,w1,o1)
459
            p1 = Vector(h1+tol,h1+tol,0)
460
            p2 = Vector(width-(h1+tol),h1+tol,0)
461
            p3 = Vector(width-(h1+tol),height-(h1+tol),0)
462
            p4 = Vector(h1+tol,height-(h1+tol),0)
463
            p5 = Vector(h1+h2,h1+h3,0)
464
            p6 = Vector(width-(h1+h2),h1+h3,0)
465
            p7 = Vector(width-(h1+h2),height-(h1+h2),0)
466
            p8 = Vector(h1+h2,height-(h1+h2),0)
467
            addFrame(s,p1,p2,p3,p4,p5,p6,p7,p8)
468
            s.addConstraint(Sketcher.Constraint('DistanceX',8,1,12,1,h2))
469
            s.addConstraint(Sketcher.Constraint('DistanceY',8,1,12,1,h3))
470
            s.addConstraint(Sketcher.Constraint('DistanceX',14,1,10,1,h2))
471
            s.addConstraint(Sketcher.Constraint('DistanceY',14,1,10,1,h2))
472
            s.addConstraint(Sketcher.Constraint('DistanceX',4,1,8,1,tol))
473
            s.addConstraint(Sketcher.Constraint('DistanceY',4,1,8,1,tol))
474
            s.addConstraint(Sketcher.Constraint('DistanceX',10,1,6,1,tol))
475
            s.addConstraint(Sketcher.Constraint('DistanceY',10,1,6,1,tol))
476
            if h2 == h1:
477
                s.renameConstraint(39,'Frame5')
478
                s.renameConstraint(40,'Frame6')
479
                s.renameConstraint(42,'Frame7')
480
                s.renameConstraint(41,'Frame8')
481
            fw = str(w2)
482
            if w2 == w1:
483
                fw = "0.00+V"
484
            wp.extend(["InnerFrame","Frame","Wire2,Wire3,Edge8,Mode1",fw,str(o2)+"+V"])
485
            wp.extend(["InnerGlass","Glass panel","Wire3",str(w2/gla),str(o2+w2/2)+"+V"])
486

487
        elif windowtype == "Opening only":
488

489
            wp = []
490
            p1 = Vector(0,0,0)
491
            p2 = Vector(width,0,0)
492
            p3 = Vector(width,height,0)
493
            p4 = Vector(0,height,0)
494
            addRectangle(s,p1,p2,p3,p4)
495
            s.addConstraint(Sketcher.Constraint('Coincident',0,1,-1,1))
496
            s.addConstraint(Sketcher.Constraint('DistanceX',0,width))
497
            s.addConstraint(Sketcher.Constraint('DistanceY',1,height))
498
            s.renameConstraint(9,'Width')
499
            s.renameConstraint(10,'Height')
500

501
        return (s,wp)
502

503
    if windowtype in WindowPresets:
504
        import Arch
505
        default = makeSketch(windowtype,width,height,h1,h2,h3,w1,w2,o1,o2)
506
        FreeCAD.ActiveDocument.recompute()
507
        if default:
508
            if placement:
509
                default[0].Placement = placement
510
                FreeCAD.ActiveDocument.recompute()
511
            obj = Arch.makeWindow(default[0],width,height,default[1])
512
            obj.Preset = WindowPresets.index(windowtype)+1
513
            obj.Frame = w2
514
            obj.Offset = o1
515
            obj.Placement = FreeCAD.Placement() # unable to find where this bug comes from...
516
            if "door" in windowtype.lower():
517
                obj.IfcType = "Door"
518
                obj.Label = translate("Arch","Door")
519
            elif "opening" in windowtype.lower():
520
                obj.IfcType = "Opening Element"
521
                obj.Label = translate("Arch","Opening")
522
            FreeCAD.ActiveDocument.recompute()
523
            return obj
524

525
    print("Arch: Unknown window type")
526

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.