Пример #1
0
 def test_wrongNumberOfDict(self):
     rpk = asset_file('extrusion_rule.rpk')
     attrs_1 = {
         'ruleFile': 'bin/extrusion_rule.cgb',
         'startRule': 'Default$Footprint'
     }
     attrs_2 = {
         'ruleFile': 'bin/extrusion_rule.cgb',
         'startRule': 'Default$Footprint',
         'minBuildingHeight': 30.0
     }
     shape_geometry_1 = pyprt.InitialShape(
         [0, 0, 0, 0, 0, 100, 100, 0, 100, 100, 0, 0])
     shape_geometry_2 = pyprt.InitialShape(
         [0, 0, 0, 0, 0, -10, -10, 0, -10, -10, 0, 0, -5, 0, -5])
     shape_geometry_3 = pyprt.InitialShape(
         [0, 0, 0, 0, 0, -10, 10, 0, -10, 10, 0, 0, -5, 0, -5])
     m = pyprt.ModelGenerator(
         [shape_geometry_1, shape_geometry_2, shape_geometry_3])
     model = m.generate_model([attrs_1, attrs_2], rpk,
                              'com.esri.pyprt.PyEncoder', {
                                  'emitReport': False,
                                  'emitGeometry': True
                              })
     self.assertEqual(len(model), 0)
Пример #2
0
 def test_path_geometry_initshapes(self):
     rpk = asset_file('extrusion_rule.rpk')
     attrs = {
         'ruleFile': 'bin/extrusion_rule.cgb',
         'startRule': 'Default$Footprint'
     }
     shape_geo = pyprt.InitialShape([
         -10.0, 0.0, 10.0, -10.0, 0.0, 0.0, 10.0, 0.0, 0.0, 10.0, 0.0, 10.0
     ])
     shape_geo_from_obj = pyprt.InitialShape(
         asset_file('building_parcel.obj'))
     m1 = pyprt.ModelGenerator([shape_geo])
     m2 = pyprt.ModelGenerator([shape_geo_from_obj])
     m3 = pyprt.ModelGenerator([shape_geo, shape_geo_from_obj])
     model1 = m1.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder',
                                {})
     model2 = m2.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder',
                                {})
     model3 = m3.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder',
                                {})
     self.assertEqual(model1[0].get_report(), model3[0].get_report())
     self.assertEqual(model2[0].get_report(), model3[1].get_report())
     self.assertListEqual(model1[0].get_vertices(),
                          model3[0].get_vertices())
     self.assertListEqual(model2[0].get_vertices(),
                          model3[1].get_vertices())
Пример #3
0
    def convert_to_slpk(self):
        x_coord = self.get_argument("x_coordinate")
        y_coord = self.get_argument("y_coordinate")
        elev = self.get_argument("elevation")

        if DBG:
            print(
                f'Setting georef to ({round(float(x_coord),2)}, {round(float(y_coord),2)}) (Web Mercator) with elevation {int(float(elev))} meters'
            )

        # Model Generator Instance
        mod_generator1 = pyprt.ModelGenerator(
            [pyprt.InitialShape(self.file_path)])

        shape_attributes = {}

        model = mod_generator1.generate_model([shape_attributes], RPK,
                                              'com.esri.pyprt.PyEncoder',
                                              {'emitReport': False})

        # Shift to right location
        mod_vertices = model[0].get_vertices()
        mod_vertices_shift = georef_shift_vertices(mod_vertices,
                                                   float(x_coord),
                                                   float(y_coord), float(elev))

        shifted_shape = pyprt.InitialShape(mod_vertices_shift,
                                           model[0].get_indices(),
                                           model[0].get_faces())

        mod_generator2 = pyprt.ModelGenerator([shifted_shape])

        slpk_encoder = 'com.esri.prt.codecs.I3SEncoder'
        slpk_encoder_options = {
            'sceneType': "Local",
            'baseName': self.basename,
            'sceneWkid': "3857",
            'layerTextureEncoding': ["2"],
            'layerEnabled': [True],
            'layerUID': ["1"],
            'layerName': ["1"],
            'layerTextureQuality': [1.0],
            'layerTextureCompression': [9],
            'layerTextureScaling': [1.0],
            'layerTextureMaxDimension': [2048],
            'layerFeatureGranularity': ["0"],
            'layerBackfaceCulling': [False],
            'outputPath': OUTPUT_PATH
        }

        mod_generator2.generate_model([shape_attributes], RPK, slpk_encoder,
                                      slpk_encoder_options)
        self.filename_slpk = os.path.join(OUTPUT_PATH, self.basename + '.slpk')
Пример #4
0
 def test_PathAndGeometryInitShapes(self):
     rpk = asset_file('extrusion_rule.rpk')
     attrs = {}
     shape_geo = pyprt.InitialShape([
         -10.0, 0.0, 10.0, -10.0, 0.0, 0.0, 10.0, 0.0, 0.0, 10.0, 0.0, 10.0
     ])
     shape_geo_from_obj = pyprt.InitialShape(
         asset_file('building_parcel.obj'))
     m = pyprt.ModelGenerator([shape_geo, shape_geo_from_obj])
     model = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {})
     modelb = m.generate_model([attrs])
     self.assertEqual(model[0].get_report(), modelb[0].get_report())
     self.assertEqual(model[1].get_report(), modelb[1].get_report())
     self.assertListEqual(model[0].get_vertices(), modelb[0].get_vertices())
     self.assertListEqual(model[1].get_vertices(), modelb[1].get_vertices())
Пример #5
0
 def test_oneDictPerInitialShapeType(self):
     rpk = asset_file('extrusion_rule.rpk')
     attrs_1 = {}
     attrs_2 = {'minBuildingHeight': 30.0}
     shape_geometry_1 = pyprt.InitialShape([
         -7.666, 0.0, -0.203, -7.666, 0.0, 44.051, 32.557, 0.0, 44.051,
         32.557, 0.0, -0.203
     ])
     shape_geometry_2 = pyprt.InitialShape(
         asset_file('building_parcel.obj'))
     m = pyprt.ModelGenerator([shape_geometry_1, shape_geometry_2])
     model = m.generate_model([attrs_1, attrs_2], rpk,
                              'com.esri.pyprt.PyEncoder', {})
     self.assertNotEqual(model[0].get_report()['Min Height.0_avg'],
                         model[1].get_report()['Min Height.0_avg'])
Пример #6
0
 def test_oneDictForAll(self):
     rpk = asset_file('extrusion_rule.rpk')
     attrs = {}
     shape_geometry_1 = pyprt.InitialShape(
         [0, 0, 0, 0, 0, 100, 100, 0, 100, 100, 0, 0])
     shape_geometry_2 = pyprt.InitialShape(
         [0, 0, 0, 0, 0, -10, -10, 0, -10, -10, 0, 0, -5, 0, -5])
     shape_geometry_3 = pyprt.InitialShape(
         [0, 0, 0, 0, 0, -10, 10, 0, -10, 10, 0, 0, -5, 0, -5])
     m = pyprt.ModelGenerator(
         [shape_geometry_1, shape_geometry_2, shape_geometry_3])
     model = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {
         'emitReport': False,
         'emitGeometry': True
     })
     self.assertEqual(len(model), 3)
Пример #7
0
    def test_slpk(self):
        if os.path.isfile(asset_output_file('Unittest4SLPK.slpk')):
            os.remove(asset_output_file('Unittest4SLPK.slpk'))

        encoder_options = {
            'outputPath': os.path.dirname(asset_output_file(''))}
        os.makedirs(encoder_options['outputPath'], exist_ok=True)

        shape_geo_from_obj = pyprt.InitialShape(
            asset_file('building_parcel.obj'))
        rpk = asset_file('envelope2002.rpk')
        attrs = {'ruleFile': 'rules/typology/envelope2002.cgb', 'startRule': 'Default$Lot',
                 'report_but_not_display_green': True}
        slpk_options = {'layerTextureEncoding': ['2'], 'layerEnabled': [True], 'layerUID': ['1'],
                        'layerName': ['Salut'], 'layerTextureQuality': [1.0], 'layerTextureCompression': [9],
                        'layerTextureScaling': [1.0], 'layerTextureMaxDimension': [2048],
                        'layerFeatureGranularity': ['0'], 'layerBackfaceCulling': [False], 'baseName': 'Unittest4SLPK'}
        slpk_options.update(encoder_options)
        m = pyprt.ModelGenerator([shape_geo_from_obj])
        m.generate_model(
            [attrs], rpk, 'com.esri.prt.codecs.I3SEncoder', slpk_options)
        self.assertTrue(os.path.isfile(
            asset_output_file('Unittest4SLPK.slpk')))
        self.assertGreater(
            os.stat(asset_output_file('CGAReport.txt')).st_size, 0)
Пример #8
0
    def test_arrayAttributes(self):
        with tempfile.TemporaryDirectory() as output_path:
            rpk = asset_file('arrayAttrs.rpk')
            attrs = {
                'ruleFile': 'bin/arrayAttrs.cgb',
                'startRule': 'Default$Init',
                'arrayAttrFloat': [0.0, 1.0, 2.0],
                'arrayAttrBool': [False, False, True],
                'arrayAttrString': ['foo', 'bar', 'baz']
            }
            initial_shape = pyprt.InitialShape([
                -7.666, 0.0, -0.203, -7.666, 0.0, 44.051, 32.557, 0.0, 44.051,
                32.557, 0.0, -0.203
            ])
            m = pyprt.ModelGenerator([initial_shape])
            m.generate_model([attrs], rpk, 'com.esri.prt.codecs.OBJEncoder',
                             {'outputPath': output_path})

            expected_file = os.path.join(output_path, 'CGAPrint.txt')
            expected_content = ("arrayAttrFloat = (3)[0,1,2]\n"
                                "arrayAttrBool = (3)[false,false,true]\n"
                                "arrayAttrString = (3)[foo,bar,baz]\n")

            self.assertTrue(os.path.exists(expected_file))
            with open(expected_file, 'r') as cga_print_file:
                cga_print = cga_print_file.read()
                self.assertEqual(cga_print, expected_content)
Пример #9
0
 def test_noReport(self):
     rpk = asset_file('extrusion_rule.rpk')
     attrs = {}
     shape_geo = pyprt.InitialShape(
         [-10.0, 0.0, 5.0, -5.0, 0.0, 6.0, 20.0, 0.0, 5.0, 15.0, 0.0, 3.0])
     m = pyprt.ModelGenerator([shape_geo])
     model = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder',
                              {'emitReport': False})
     self.assertDictEqual(model[0].get_report(), {})
Пример #10
0
 def test_noGeometry(self):
     rpk = asset_file('extrusion_rule.rpk')
     attrs = {}
     shape_geo = pyprt.InitialShape(
         [-10.0, 0.0, 5.0, -5.0, 0.0, 6.0, 20.0, 0.0, 5.0, 15.0, 0.0, 3.0])
     m = pyprt.ModelGenerator([shape_geo])
     model = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder',
                              {'emitGeometry': False})
     self.assertListEqual(model[0].get_vertices(), [])
Пример #11
0
    def test_correctExecution(self):
        rpk = asset_file('extrusion_rule.rpk')
        attrs_1 = {}
        attrs_2 = {'minBuildingHeight': 30.0}
        attrs_3 = {'text': 'hello'}

        shape_geometry_1 = pyprt.InitialShape(
            [0, 0, 0, 0, 0, 100, 100, 0, 100, 100, 0, 0])
        shape_geometry_2 = pyprt.InitialShape(
            [0, 0, 0, 0, 0, -10, -10, 0, -10, -10, 0, 0, -5, 0, -5])
        shape_geometry_3 = pyprt.InitialShape(
            [0, 0, 0, 0, 0, -10, 10, 0, -10, 10, 0, 0, -5, 0, -5])
        m = pyprt.ModelGenerator(
            [shape_geometry_1, shape_geometry_2, shape_geometry_3])
        model = m.generate_model([attrs_1, attrs_2, attrs_3], rpk,
                                 'com.esri.pyprt.PyEncoder', {
                                     'emitReport': False,
                                     'emitGeometry': True
                                 })
        self.assertEqual(len(model), 3)
Пример #12
0
 def test_facesNber_candler(self):
     rpk = asset_file('candler.rpk')
     attrs = {}
     shape_geo_from_obj = pyprt.InitialShape(
         asset_file('candler_footprint.obj'))
     m = pyprt.ModelGenerator([shape_geo_from_obj])
     model = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {
         'emitReport': False,
         'emitGeometry': True
     })
     self.assertEqual(len(model[0].get_faces()), 47202)
Пример #13
0
 def test_faces_data(self):
     rpk = asset_file('candler.rpk')
     attrs = {}
     shape_geo_from_obj = pyprt.InitialShape(
         asset_file('candler_footprint.obj'))
     m = pyprt.ModelGenerator([shape_geo_from_obj])
     model = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder',
                              {'emitReport': False})
     cnt = 0
     for f in model[0].get_faces():
         cnt += f
     self.assertEqual(cnt, len(model[0].get_indices()))
Пример #14
0
    def test_cga_prints_green(self):
        rpk = asset_file('envelope2002.rpk')
        attrs = {'report_but_not_display_green': True, 'seed': 2}
        shape_geo_from_obj = pyprt.InitialShape(
            asset_file('building_parcel.obj'))
        m = pyprt.ModelGenerator([shape_geo_from_obj])
        model = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {
            'emitReport': True,
            'emitGeometry': False
        })

        self.assertEqual(model[0].get_cga_prints(), str(attrs['seed']) + "\n")
Пример #15
0
    def test_cga_errors_holes(self):
        rpk = asset_file('FacesHolesVerticesrule.rpk')
        attrs = {}
        shape_with_hole_with_error = pyprt.InitialShape([
            0, 0, 0, 0, 0, 10, 10, 0, 10, 10, 0, 0, 2, 0, 2, 8, 0, 8, 2, 0, 8
        ], [0, 1, 2, 3, 4, 5, 6], [4, 3], [[0, 1, 1]])
        m = pyprt.ModelGenerator([shape_with_hole_with_error])
        model = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {
            'emitReport': True,
            'emitGeometry': False
        })

        self.assertEqual(len(model[0].get_cga_errors()), 1)
Пример #16
0
 def test_buildingHeight(self):
     rpk = asset_file('extrusion_rule.rpk')
     attrs = {}
     attrs2 = {'minBuildingHeight': 23.0, 'maxBuildingHeight': 23.0}
     shape_geo = pyprt.InitialShape([
         -10.0, 0.0, 10.0, -10.0, 0.0, 0.0, 10.0, 0.0, 0.0, 10.0, 0.0, 10.0
     ])
     m = pyprt.ModelGenerator([shape_geo])
     m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {})
     model2 = m.generate_model([attrs2])
     z_coord = [round(b, 1) for b in model2[0].get_vertices()[1:-1:3]]
     for z in z_coord:
         if z:
             self.assertAlmostEqual(abs(z), 23.0)
Пример #17
0
 def test_verticesNber_candler(self):
     rpk = asset_file('candler.rpk')
     attrs = {
         'ruleFile': 'bin/candler.cgb',
         'startRule': 'Default$Footprint'
     }
     shape_geo_from_obj = pyprt.InitialShape(
         asset_file('candler_footprint.obj'))
     m = pyprt.ModelGenerator([shape_geo_from_obj])
     model = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {
         'emitReport': False,
         'emitGeometry': True
     })
     self.assertEqual(len(model[0].get_vertices()), 97050 * 3)
Пример #18
0
 def test_report_green(self):
     rpk = asset_file('envelope2002.rpk')
     attrs = {
         'ruleFile': 'rules/typology/envelope2002.cgb',
         'startRule': 'Default$Lot',
         'report_but_not_display_green': True,
         'seed': 666
     }
     shape_geo_from_obj = pyprt.InitialShape(
         asset_file('building_parcel.obj'))
     m = pyprt.ModelGenerator([shape_geo_from_obj])
     model = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {
         'emitReport': True,
         'emitGeometry': False
     })
     ground_truth_dict = {
         'Floor area_n': 20.0,
         'Greenery Area_n': 574.0,
         'Number of trees_n': 114.0,
         'green area_n': 460.0,
         'total report for optimisation_n': 20.0,
         'Floor area_sum': 10099.37,
         'Floor area_avg': 504.97,
         'Greenery Area_sum': 2123.40,
         'Greenery Area_avg': 3.70,
         'Number of trees_sum': 114.0,
         'Number of trees_avg': 1.0,
         'green area_sum': 1553.40,
         'green area_avg': 3.38,
         'total report for optimisation_sum': 807.95,
         'total report for optimisation_avg': 40.40,
         'Floor area_min': 294.37,
         'Floor area_max': 874.87,
         'Greenery Area_min': 0.49,
         'Greenery Area_max': 408.27,
         'Number of trees_min': 1.0,
         'Number of trees_max': 1.0,
         'green area_min': 0.49,
         'green area_max': 408.27,
         'total report for optimisation_min': 23.55,
         'total report for optimisation_max': 69.99
     }
     rep = model[0].get_report()
     rep_round = {x: round(z, 2) for x, z in rep.items()}
     self.assertEqual(rep_round, ground_truth_dict)
Пример #19
0
 def test_multiGenerations(self):
     rpk = asset_file('extrusion_rule.rpk')
     attrs = {'ruleFile': 'bin/extrusion_rule.cgb',
              'startRule': 'Default$Footprint'}
     shape_geo = pyprt.InitialShape(
         [-10.0, 0.0, 10.0, -10.0, 0.0, 0.0, 10.0, 0.0, 0.0, 10.0, 0.0, 10.0])
     m = pyprt.ModelGenerator([shape_geo])
     model1 = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {})
     model2 = m.generate_model([attrs])
     model3 = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder',
                               {'emitReports': True, 'emitGeometry': False})
     model4 = m.generate_model([attrs])
     self.assertDictEqual(model1[0].get_report(), model2[0].get_report())
     self.assertDictEqual(model1[0].get_report(), model3[0].get_report())
     self.assertListEqual(model1[0].get_vertices(),
                          model2[0].get_vertices())
     self.assertListEqual(model3[0].get_vertices(),
                          model4[0].get_vertices())
Пример #20
0
def arcgis_to_pyprt(feature_set):
    """arcgis_to_pyprt(feature_set) -> List[InitialShape]
    This function allows converting an ArcGIS FeatureSet into a list of PyPRT InitialShape instances.
    You then typically call the ModelGenerator constructor with the return value if this function as parameter.

    Parameters:
        feature_set: FeatureSet

    Returns:
        List[InitialShape]

    """
    initial_geometries = []
    for feature in feature_set.features:
        try:
            geo = Geometry(feature.geometry)
            if geo.type == 'Polygon':
                coord = geo.coordinates()[0]
                coord_remove_last = coord[:-1]
                coord_inverse = np.flip(coord_remove_last, axis=0)

                if coord.shape[1] == 2:  # we have to add a dimension
                    coord_inverse[:, 1] *= -1
                    coord_add_dim = np.insert(coord_inverse, 1, 0, axis=1)
                    coord_fin = np.reshape(
                        coord_add_dim,
                        (1, coord_add_dim.shape[0] * coord_add_dim.shape[1]))
                elif coord.shape[1] == 3:  # need to swap the 1 and 2 columns
                    coord_inverse[:, 1] *= -1
                    coord_swap_dim = coord_inverse.copy()
                    temp = np.copy(coord_swap_dim[:, 1])
                    coord_swap_dim[:, 1] = coord_swap_dim[:, 2]
                    coord_swap_dim[:, 2] = temp
                    coord_fin = np.reshape(
                        coord_swap_dim,
                        (1, coord_swap_dim.shape[0] * coord_swap_dim.shape[1]))

                initial_geometry = pyprt.InitialShape(coord_fin.tolist()[0])
                initial_geometries.append(initial_geometry)
        except:
            print("This feature is not valid: ")
            print(feature)
            print()
    return initial_geometries
Пример #21
0
    def test_initial_shape_with_hole(self):
        rpk = asset_file('FacesHolesVerticesrule.rpk')
        attrs = {}
        shape_with_hole = pyprt.InitialShape([
            0, 0, 0, 0, 0, 10, 10, 0, 10, 10, 0, 0, 2, 0, 2, 8, 0, 8, 2, 0, 8
        ], [0, 1, 2, 3, 4, 5, 6], [4, 3], [[0, 1]])

        encoder_options = {
            'outputPath': os.path.dirname(asset_output_file(''))
        }
        os.makedirs(encoder_options['outputPath'], exist_ok=True)

        m = pyprt.ModelGenerator([shape_with_hole])
        m.generate_model([attrs], rpk, 'com.esri.prt.codecs.OBJEncoder',
                         encoder_options)

        expected_file = os.path.join(encoder_options['outputPath'],
                                     'CGAPrint.txt')
        expected_content = ("14\n" "9\n" "2\n")

        self.assertTrue(os.path.exists(expected_file))
        with open(expected_file, 'r') as cga_print_file:
            cga_print = cga_print_file.read()
            self.assertEqual(cga_print, expected_content)
Пример #22
0
    return os.path.join(CS_FOLDER, 'data', filename)


# PRT Initialization
print('\nInitializing PRT.')
pyprt.initialize_prt()

if not pyprt.is_prt_initialized():
    raise Exception('PRT is not initialized')

# Data
rpk = asset_file('extrusion_rule.rpk')
attrs = {}

# STEP 1: Initial Shape (vertices coordinates)
initial_shape1 = pyprt.InitialShape(
    [0, 0, 0, 0, 0, 100, 100, 0, 100, 100, 0, 0])

# PRT Generation
print('\nFirst Generation:\n')
m1 = pyprt.ModelGenerator([initial_shape1])
model1 = m1.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {})
visualize_prt_results(model1)

# STEP 2: Initial Shape (OBJ file)
initial_shape2 = pyprt.InitialShape(asset_file('building_parcel.obj'))

# PRT Generation
print('\nSecond Generation:\n')
m2 = pyprt.ModelGenerator([initial_shape2])
model2 = m2.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {})
visualize_prt_results(model2)
Пример #23
0
    return os.path.join(CS_FOLDER, 'data', filename)


# PRT Initialization
print('\nInitializing PRT.')
pyprt.initialize_prt()

if not pyprt.is_prt_initialized():
    raise Exception('PRT is not initialized')

# Data
rpk = asset_file('candler.rpk')
attrs = {}

# Initial Shapes
shape_geometry_1 = pyprt.InitialShape(
    [0, 0, 0, 0, 0, 100, 100, 0, 100, 100, 0, 0])
shape_geometry_2 = pyprt.InitialShape(
    [0, 0, 0, 0, 0, -10, -10, 0, -10, -10, 0, 0, -5, 0, -5])

# PRT Generation
m = pyprt.ModelGenerator([shape_geometry_2, shape_geometry_1])

encoder_options = {'outputPath': '/tmp/pyprt_output'}
os.makedirs(encoder_options['outputPath'], exist_ok=True)

models = m.generate_model([attrs], rpk, 'com.esri.prt.codecs.OBJEncoder',
                          encoder_options)
print('\nGenerated models located in ' + encoder_options['outputPath'])

# PRT End
pyprt.shutdown_prt()
Пример #24
0
    return os.path.join(CS_FOLDER, 'data', filename)


# PRT Initialization
print('\nInitializing PRT.')
pyprt.initialize_prt()

if not pyprt.is_prt_initialized():
    raise Exception('PRT is not initialized')

# Data
rpk = asset_file('extrusion_rule.rpk')
attrs = {}

# Initial Shape
initial_shape = pyprt.InitialShape(
    [0, 0, 0,  0, 0, 100,  100, 0, 100,  100, 0, 0])
m = pyprt.ModelGenerator([initial_shape])

# STEP 1: PRT Generation
print('\nFirst Generation: generated geometry + report\n')
model1 = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {
    'emitGeometry': True, 'emitReport': True})
visualize_prt_results(model1)

# STEP 2: PRT Generation
print('\nSecond Generation: generated geometry\n')
model2 = m.generate_model([attrs], rpk, 'com.esri.pyprt.PyEncoder', {
    'emitGeometry': True, 'emitReport': False})
visualize_prt_results(model2)

# PRT End
            s = scene.Markers(pos=generated_data[k])

            self.view.add(s)

        self.freeze()


if __name__ == '__main__':
    print('\nInitializing PRT.')
    pyprt.initialize_prt()

    if not pyprt.is_prt_initialized():
        raise Exception('PRT is not initialized')

    initial_geometry = pyprt.InitialShape(
        np.array([0, 0, 0, 0, 0, 2, 1, 0, 1, 1, 0, 0], dtype='f'))
    initial_geometry2 = pyprt.InitialShape(
        np.array([4, 0, 0, 4, 0, 2, 5, 0, 1, 5, 0, 0], dtype='f'))
    rpk = asset_file('extrusion_rule.rpk')
    attrs = {}

    mod = pyprt.ModelGenerator([initial_geometry, initial_geometry2])
    generated_mod = mod.generate_model([attrs], rpk,
                                       'com.esri.pyprt.PyEncoder', {})
    all_vertices = []
    all_faces = []

    for model in generated_mod:
        if model:
            geo = model.get_vertices()
            ind = model.get_indices()