Hide menu
Loading...
Searching...
No Matches
projector/poly_projector/poly_projector.py

Refer to the Projector Example

1# $Id$
2
3# Copyright (C) 2008-2014, Roman Lygin. All rights reserved.
4# Copyright (C) 2014-2025, CADEX. All rights reserved.
5
6# This file is part of the Manufacturing Toolkit software.
7
8# You may use this file under the terms of the BSD license as follows:
9
10# Redistribution and use in source and binary forms, with or without
11# modification, are permitted provided that the following conditions are met:
12# * Redistributions of source code must retain the above copyright notice,
13# this list of conditions and the following disclaimer.
14# * Redistributions in binary form must reproduce the above copyright notice,
15# this list of conditions and the following disclaimer in the documentation
16# and/or other materials provided with the distribution.
17
18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28# POSSIBILITY OF SUCH DAMAGE.
29
30import os
31import sys
32
33from pathlib import Path
34
35import manufacturingtoolkit.CadExMTK as mtk
36
37sys.path.append(os.path.abspath(os.path.dirname(Path(__file__).resolve()) + "/../../"))
38
39import mtk_license as license
40
41class SceneGraphPolyProjector(mtk.ModelData_ModelElementVoidVisitor):
42 def __init__(self, theDirection: mtk.Geom_Direction):
43 super().__init__()
44 self.myDirection = theDirection
45 self.myProjector = mtk.Projector_PolyProjector()
46
47 def VisitPart(self, thePart: mtk.ModelData_Part):
48 aData = self.myProjector.Perform(thePart, self.myDirection)
49 print(f"Part projection [{thePart.Name()}] has:")
50 print(f" area = {aData.ProjectionArea()} mm\n")
51
52def main(theSource: str):
53 aKey = license.Value()
54
55 if not mtk.LicenseManager.Activate(aKey):
56 print("Failed to activate Manufacturing Toolkit license.")
57 return 1
58
59 aModel = mtk.ModelData_Model()
60 aReader = mtk.ModelData_ModelReader()
61
62 # Reading the file
63 if not aReader.Read(mtk.UTF16String(theSource), aModel):
64 print("Failed to open and convert the file " + theSource)
65 return 1
66
67 print("Model: ", aModel.Name(), "\n", sep="")
68
69 # Processing
70 aProjector = SceneGraphPolyProjector(mtk.Geom_Direction.YDir())
71 aModel.Accept(aProjector)
72
73 return 0
74
75if __name__ == "__main__":
76 if len(sys.argv) != 2:
77 print("Usage: <input_file>, where:")
78 print(" <input_file> is a name of the file to be read")
79 sys.exit()
80
81 aSource = os.path.abspath(sys.argv[1])
82
83 sys.exit(main(aSource))