mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 17:31:45 +00:00
Add tree species to tree library
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -16,7 +16,9 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with BlenderBIM Add-on. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import os
|
||||
import bpy
|
||||
import csv
|
||||
import random
|
||||
import ifcopenshell
|
||||
import ifcopenshell.api
|
||||
@@ -30,6 +32,10 @@ from mathutils import Vector, Matrix
|
||||
from random import uniform
|
||||
|
||||
|
||||
# When run from Blender
|
||||
BLEND_DIR = os.path.dirname(bpy.data.filepath)
|
||||
OUT_PATH = os.path.join(BLEND_DIR, "..", "blenderbim", "bim", "data", "libraries", "IFC4 Landscape Library.ifc")
|
||||
|
||||
SimpleTreeParams = namedtuple("SimpleTreeParams", "plant_height crown_diameter trunk_diameter")
|
||||
LowPolyTreeParams = namedtuple(
|
||||
"LowPolyTreeParams", "plant_height crown_diameter crown_max_loc crown_taper trunk_height trunk_diameter random_seed"
|
||||
@@ -301,7 +307,7 @@ tree_presets = {
|
||||
|
||||
|
||||
class LibraryGenerator:
|
||||
def generate(self, library_name, output_filename="IFC4 EU Steel.ifc"):
|
||||
def generate(self, library_name, output_filename):
|
||||
ifcopenshell.api.pre_listeners = {}
|
||||
ifcopenshell.api.post_listeners = {}
|
||||
|
||||
@@ -368,7 +374,7 @@ class LibraryGenerator:
|
||||
representations[rep_key] = rep_obj.name
|
||||
self.create_type("IfcGeographicElementType", obj.name, representations)
|
||||
|
||||
# Auto generated trees
|
||||
# Auto generated generic trees
|
||||
|
||||
self.builder = ShapeBuilder(self.file)
|
||||
builder = self.builder
|
||||
@@ -401,6 +407,21 @@ class LibraryGenerator:
|
||||
"IfcGeographicElementType", tree_data.tree_name, **self.get_representations(tree_geometry)
|
||||
)
|
||||
|
||||
# From tree species table
|
||||
|
||||
with open(os.path.join(BLEND_DIR, "tree_species.csv"), 'r') as csvfile:
|
||||
reader = csv.reader(csvfile)
|
||||
for i, row in enumerate(reader):
|
||||
if i == 0:
|
||||
continue
|
||||
preset = tree_presets.get(row[0])
|
||||
data = [float(x) for x in row[2:]]
|
||||
preset_data = preset.preset_class(*data)._asdict()
|
||||
tree_geometry = preset.generator(builder, **preset_data)
|
||||
self.create_explicit_type(
|
||||
"IfcGeographicElementType", row[1], **self.get_representations(tree_geometry)
|
||||
)
|
||||
|
||||
self.file.write(output_filename)
|
||||
|
||||
def get_representations(self, generated_geometry: GeneratedGeometry):
|
||||
@@ -464,4 +485,4 @@ class LibraryGenerator:
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
LibraryGenerator().generate("Landscape Assets Library", output_filename="IFC4 Landscape Library.ifc")
|
||||
LibraryGenerator().generate("Landscape Assets Library", output_filename=OUT_PATH)
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
"f","name","PlantHeight","CrownDiameter","CrownMaxLoc","CrownTaper","TrunkHeight","TrunkDiameter","RandomSeed"
|
||||
"low_poly","Apple",8,9,0.5,0.2,1.5,0.2,1
|
||||
"low_poly","Beech",30,20,0,0.4,3,0.75,2
|
||||
"low_poly","Cedar",25,17,0,1,1,0.625,3
|
||||
"low_poly","Dogwood",8,6,1,0.9,0.3,0.2,4
|
||||
"low_poly","Elm",17,12,0.6,0.7,2,0.425,5
|
||||
"low_poly","Fir",27,15,0.1,1,0.1,0.675,6
|
||||
"low_poly","Ginkgo",25,9,0.5,0.6,7,0.625,7
|
||||
"low_poly","Horsechesnut",30,23,0.5,0.2,3,0.75,8
|
||||
"low_poly","Ilex",26,13,0.4,0.3,12,0.65,9
|
||||
"low_poly","Juniper",30,15,0.7,1,1,0.75,10
|
||||
"low_poly","Kentucky Coffeetree",20,10,0.5,0,6,0.5,11
|
||||
"low_poly","Linden",28,18,0.3,0.2,3,0.7,12
|
||||
"low_poly","Mulberry",15,12,0.5,0.5,2,0.375,13
|
||||
"low_poly","Nannybery",5,4,0.7,0.8,1,0.125,14
|
||||
"low_poly","Oak",25,13,0.5,0.5,6,0.625,15
|
||||
"low_poly","Pine",27,9,0.5,0.2,14,0.675,16
|
||||
"low_poly","Quaking Aspen",13,4,0.5,0.3,4,0.325,17
|
||||
"low_poly","Redwood",90,24,0.1,0.8,8,2.25,18
|
||||
"low_poly","Sycamore",35,22,0.2,0.6,5,0.875,19
|
||||
"low_poly","Tree of Heaven",20,15,0.2,0.8,3,0.5,20
|
||||
"low_poly","Umbrella Tree",8,5,0.4,0.5,2,0.2,21
|
||||
"low_poly","Viburnum",4,3,0.8,0.7,0.2,0.1,22
|
||||
"low_poly","Weeping Willow",13,12,0.9,0.3,1,0.325,23
|
||||
"low_poly","Zanthoxylum",10,8,0.4,0.6,2,0.25,24
|
||||
"low_poly","Yellowwood",25,20,0.2,0.3,5,0.625,25
|
||||
"low_poly","Zelkova",12,8,0.4,0.4,2,0.3,26
|
||||
|
Reference in New Issue
Block a user