Hide menu
Loading...
Searching...
No Matches
utilities/progress_bar/progress_bar.py

Refer to the Progress Bar Example.

1#!/usr/bin/env python3
2
3# $Id$
4
5# Copyright (C) 2008-2014, Roman Lygin. All rights reserved.
6# Copyright (C) 2014-2025, CADEX. All rights reserved.
7
8# This file is part of the Manufacturing Toolkit software.
9
10# You may use this file under the terms of the BSD license as follows:
11
12# Redistribution and use in source and binary forms, with or without
13# modification, are permitted provided that the following conditions are met:
14# * Redistributions of source code must retain the above copyright notice,
15# this list of conditions and the following disclaimer.
16# * Redistributions in binary form must reproduce the above copyright notice,
17# this list of conditions and the following disclaimer in the documentation
18# and/or other materials provided with the distribution.
19
20# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
24# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30# POSSIBILITY OF SUCH DAMAGE.
31
32import sys
33import os
34
35from pathlib import Path
36
37import manufacturingtoolkit.CadExMTK as mtk
38
39sys.path.append(os.path.abspath(os.path.dirname(Path(__file__).resolve()) + r"/../../"))
40
41import mtk_license as license
42
43class ProgressBarObserver(mtk.ProgressStatus_Observer):
44 def __init__(self):
45 super().__init__()
46
47 def ChangedValue(self, theInfo: mtk.ProgressStatus):
48 print(theInfo.Value())
49
50 def Completed(self, theInfo: mtk.ProgressStatus):
51 print(f"{theInfo.Value()}: complete!")
52
53def main(theSource: str):
54 aKey = license.Value()
55
56 if not mtk.LicenseManager.Activate(aKey):
57 print("Failed to activate Manufacturing Toolkit license.")
58 return 1
59
60 aModel = mtk.ModelData_Model()
61
62 # An observer must outlive progress status,
63 # so it is created outside the using scope
64 anObserver = ProgressBarObserver()
65
66 with mtk.ProgressStatus() as aStatus:
67 # Register an observer to progress status
68 aStatus.Register(anObserver)
69
70 # The top scope occupies the whole progress status range
71 with mtk.ProgressScope(aStatus) as aTopScope:
72 # 50% of TopScope for file importing
73 with mtk.ProgressScope(aTopScope, 50) as aReaderScope:
74 aReader = mtk.ModelData_ModelReader()
75 # Connect progress status object
76 aReader.SetProgressStatus(aStatus)
77 aReader.Read(mtk.UTF16String(theSource), aModel)
78
79 if not aModel.IsEmpty() and not aStatus.WasCanceled():
80 # The remaining 50% of TopScope for meshing
81 with mtk.ProgressScope(aTopScope, 50):
82 aMesher = mtk.ModelAlgo_MeshGenerator()
83 # Connect progress status object
84 aMesher.SetProgressStatus(aStatus)
85 aMesher.Generate(aModel)
86
87 # Observer will be automatically unregistered from progress status on destruction (end of the "with" scope).
88
89 return 0
90
91if __name__ == "__main__":
92 if len(sys.argv) != 2:
93 print("Usage: " + os.path.abspath(Path(__file__).resolve()) + " <input_file>, where:")
94 print(" <input_file> is a name of the file to be read")
95 sys.exit(1)
96
97 aSource = os.path.abspath(sys.argv[1])
98
99 sys.exit(main(aSource))