Archimesh: Cleanup - Replace generic import

Replace generic import by the list of used functions or types
This commit is contained in:
Antonio Vazquez 2016-08-09 13:45:46 +02:00
parent 5828ecf0de
commit f476cfdd31
17 changed files with 666 additions and 645 deletions

View File

@ -80,14 +80,16 @@ else:
# noinspection PyUnresolvedReferences
import bpy
# noinspection PyUnresolvedReferences
from bpy.props import *
from bpy.props import BoolProperty, FloatVectorProperty, IntProperty, FloatProperty
# noinspection PyUnresolvedReferences
from bpy.types import Menu, Scene, INFO_MT_mesh_add, WindowManager
# ----------------------------------------------------------
# Decoration assets
# ----------------------------------------------------------
class AchmInfoMtMeshDecorationAdd(bpy.types.Menu):
class AchmInfoMtMeshDecorationAdd(Menu):
bl_idname = "INFO_MT_mesh_decoration_add"
bl_label = "Decoration assets"
@ -104,7 +106,7 @@ class AchmInfoMtMeshDecorationAdd(bpy.types.Menu):
# ----------------------------------------------------------
class AchmInfoMtMeshCustomMenuAdd(bpy.types.Menu):
class AchmInfoMtMeshCustomMenuAdd(Menu):
bl_idname = "INFO_MT_mesh_custom_menu_add"
bl_label = "Archimesh"
@ -162,32 +164,32 @@ def register():
bpy.utils.register_class(achm_main_panel.AchmRunHintDisplayButton)
bpy.utils.register_class(achm_window_panel.AchmWinPanel)
bpy.utils.register_class(achm_window_panel.AchmWindowEditPanel)
bpy.types.INFO_MT_mesh_add.append(AchmMenu_func)
INFO_MT_mesh_add.append(AchmMenu_func)
# Define properties
bpy.types.Scene.archimesh_select_only = bpy.props.BoolProperty(
Scene.archimesh_select_only = BoolProperty(
name="Only selected",
description="Apply auto holes only to selected objects",
default=False,
)
bpy.types.Scene.archimesh_ceiling = bpy.props.BoolProperty(
Scene.archimesh_ceiling = BoolProperty(
name="Ceiling",
description="Create a ceiling",
default=False,
)
bpy.types.Scene.archimesh_floor = bpy.props.BoolProperty(
Scene.archimesh_floor = BoolProperty(
name="Floor",
description="Create a floor automatically",
default=False,
)
bpy.types.Scene.archimesh_merge = bpy.props.BoolProperty(
Scene.archimesh_merge = BoolProperty(
name="Close walls",
description="Close walls to create a full closed room",
default=False,
)
bpy.types.Scene.archimesh_text_color = bpy.props.FloatVectorProperty(
Scene.archimesh_text_color = FloatVectorProperty(
name="Hint color",
description="Color for the text and lines",
default=(0.173, 0.545, 1.0, 1.0),
@ -196,7 +198,7 @@ def register():
subtype='COLOR',
size=4,
)
bpy.types.Scene.archimesh_walltext_color = bpy.props.FloatVectorProperty(
Scene.archimesh_walltext_color = FloatVectorProperty(
name="Hint color",
description="Color for the wall label",
default=(1, 0.8, 0.1, 1.0),
@ -205,32 +207,32 @@ def register():
subtype='COLOR',
size=4,
)
bpy.types.Scene.archimesh_font_size = bpy.props.IntProperty(
Scene.archimesh_font_size = IntProperty(
name="Text Size",
description="Text size for hints",
default=14, min=10, max=150,
)
bpy.types.Scene.archimesh_wfont_size = bpy.props.IntProperty(
Scene.archimesh_wfont_size = IntProperty(
name="Text Size",
description="Text size for wall labels",
default=16, min=10, max=150,
)
bpy.types.Scene.archimesh_hint_space = bpy.props.FloatProperty(
Scene.archimesh_hint_space = FloatProperty(
name='Separation', min=0, max=5, default=0.1,
precision=2,
description='Distance from object to display hint',
)
bpy.types.Scene.archimesh_gl_measure = bpy.props.BoolProperty(
Scene.archimesh_gl_measure = BoolProperty(
name="Measures",
description="Display measures",
default=True,
)
bpy.types.Scene.archimesh_gl_name = bpy.props.BoolProperty(
Scene.archimesh_gl_name = BoolProperty(
name="Names",
description="Display names",
default=True,
)
bpy.types.Scene.archimesh_gl_ghost = bpy.props.BoolProperty(
Scene.archimesh_gl_ghost = BoolProperty(
name="All",
description="Display measures for all objects,"
" not only selected",
@ -238,9 +240,9 @@ def register():
)
# OpenGL flag
wm = bpy.types.WindowManager
wm = WindowManager
# register internal property
wm.archimesh_run_opengl = bpy.props.BoolProperty(default=False)
wm.archimesh_run_opengl = BoolProperty(default=False)
def unregister():
@ -272,21 +274,21 @@ def unregister():
bpy.utils.unregister_class(achm_main_panel.AchmRunHintDisplayButton)
bpy.utils.unregister_class(achm_window_panel.AchmWinPanel)
bpy.utils.unregister_class(achm_window_panel.AchmWindowEditPanel)
bpy.types.INFO_MT_mesh_add.remove(AchmMenu_func)
INFO_MT_mesh_add.remove(AchmMenu_func)
# Remove properties
del bpy.types.Scene.archimesh_select_only
del bpy.types.Scene.archimesh_ceiling
del bpy.types.Scene.archimesh_floor
del bpy.types.Scene.archimesh_merge
del bpy.types.Scene.archimesh_text_color
del bpy.types.Scene.archimesh_walltext_color
del bpy.types.Scene.archimesh_font_size
del bpy.types.Scene.archimesh_wfont_size
del bpy.types.Scene.archimesh_hint_space
del bpy.types.Scene.archimesh_gl_measure
del bpy.types.Scene.archimesh_gl_name
del bpy.types.Scene.archimesh_gl_ghost
del Scene.archimesh_select_only
del Scene.archimesh_ceiling
del Scene.archimesh_floor
del Scene.archimesh_merge
del Scene.archimesh_text_color
del Scene.archimesh_walltext_color
del Scene.archimesh_font_size
del Scene.archimesh_wfont_size
del Scene.archimesh_hint_space
del Scene.archimesh_gl_measure
del Scene.archimesh_gl_name
del Scene.archimesh_gl_ghost
# remove OpenGL data
achm_main_panel.AchmRunHintDisplayButton.handle_remove(achm_main_panel.AchmRunHintDisplayButton, bpy.context)
wm = bpy.context.window_manager

View File

@ -25,10 +25,12 @@
# ----------------------------------------------------------
# noinspection PyUnresolvedReferences
import bpy
import math
import random
import copy
import colorsys
from math import cos, sin, radians
from random import randint
from copy import copy
from colorsys import rgb_to_hsv, hsv_to_rgb
from bpy.types import Operator
from bpy.props import BoolProperty, IntProperty, FloatProperty, FloatVectorProperty
from .achm_tools import *
@ -36,59 +38,59 @@ from .achm_tools import *
# Define UI class
# Books
# ------------------------------------------------------------------
class AchmBooks(bpy.types.Operator):
class AchmBooks(Operator):
bl_idname = "mesh.archimesh_books"
bl_label = "Books"
bl_description = "Books Generator"
bl_category = 'Archimesh'
bl_options = {'REGISTER', 'UNDO'}
width = bpy.props.FloatProperty(
width = FloatProperty(
name='Width', min=0.001, max=1, default=0.045, precision=3,
description='Bounding book width',
)
depth = bpy.props.FloatProperty(
depth = FloatProperty(
name='Depth', min=0.001, max=1, default=0.22, precision=3,
description='Bounding book depth',
)
height = bpy.props.FloatProperty(
height = FloatProperty(
name='Height', min=0.001, max=1, default=0.30, precision=3,
description='Bounding book height',
)
num = bpy.props.IntProperty(
num = IntProperty(
name='Number of books', min=1, max=100, default=20,
description='Number total of books',
)
rX = bpy.props.FloatProperty(
rX = FloatProperty(
name='X', min=0.000, max=0.999, default=0, precision=3,
description='Randomness for X axis',
)
rY = bpy.props.FloatProperty(
rY = FloatProperty(
name='Y', min=0.000, max=0.999, default=0, precision=3,
description='Randomness for Y axis',
)
rZ = bpy.props.FloatProperty(
rZ = FloatProperty(
name='Z', min=0.000, max=0.999, default=0, precision=3,
description='Randomness for Z axis',
)
rot = bpy.props.FloatProperty(
rot = FloatProperty(
name='Rotation', min=0.000, max=1, default=0, precision=3,
description='Randomness for vertical position (0-> All straight)',
)
afn = bpy.props.IntProperty(
afn = IntProperty(
name='Affinity', min=0, max=10, default=5,
description='Number of books with same rotation angle',
)
# Materials
crt_mat = bpy.props.BoolProperty(
crt_mat = BoolProperty(
name="Create default Cycles materials",
description="Create default materials for Cycles render",
default=True,
)
objcol = bpy.props.FloatVectorProperty(
objcol = FloatVectorProperty(
name="Color",
description="Color for material",
default=(1.0, 1.0, 1.0, 1.0),
@ -96,7 +98,7 @@ class AchmBooks(bpy.types.Operator):
subtype='COLOR',
size=4,
)
rC = bpy.props.FloatProperty(
rC = FloatProperty(
name='Randomness',
min=0.000, max=1, default=0, precision=3,
description='Randomness for color ',
@ -181,7 +183,7 @@ def create_book_mesh(self):
def generate_books(self):
boxes = []
location = bpy.context.scene.cursor_location
myloc = copy.copy(location) # copy location to keep 3D cursor position
myloc = copy(location) # copy location to keep 3D cursor position
# Create
lastx = myloc.x
@ -214,7 +216,7 @@ def generate_books(self):
if i < self.afn:
size = 0.0002
else:
size = 0.0003 + math.cos(math.radians(90 - bookdata[3])) * bookdata[2] # the height is the radius
size = 0.0003 + cos(radians(90 - bookdata[3])) * bookdata[2] # the height is the radius
oz = bookdata[2]
lastx = lastx + bookdata[0] + size
@ -261,11 +263,11 @@ def generate_books(self):
def create_book(objname, sx, sy, sz, px, py, pz, mat, frx,
fry, frz, frr, ox, oy, oz, ot, objcol, frc):
# gap Randomness
ri = random.randint(10, 150)
ri = randint(10, 150)
gap = ri / 100000
# Randomness X
if ox == 0:
ri = random.randint(0, int(frx * 1000))
ri = randint(0, int(frx * 1000))
factor = ri / 1000
sx -= sx * factor
if sx < (gap * 3):
@ -275,7 +277,7 @@ def create_book(objname, sx, sy, sz, px, py, pz, mat, frx,
# Randomness Y
if oy == 0:
ri = random.randint(0, int(fry * 1000))
ri = randint(0, int(fry * 1000))
factor = ri / 1000
sy -= sy * factor
if sy < (gap * 3):
@ -285,7 +287,7 @@ def create_book(objname, sx, sy, sz, px, py, pz, mat, frx,
# Randomness Z
if oz == 0:
ri = random.randint(0, int(frz * 1000))
ri = randint(0, int(frz * 1000))
factor = ri / 1000
sz -= sz * factor
if sz < (gap * 3):
@ -297,26 +299,26 @@ def create_book(objname, sx, sy, sz, px, py, pz, mat, frx,
rot = 0
if frr > 0 and ot != -1:
if ot == 0:
ri = random.randint(0, int(frr * 1000))
ri = randint(0, int(frr * 1000))
factor = ri / 1000
rot = 30 * factor
else:
rot = ot
# Randomness color (only hue)
hsv = colorsys.rgb_to_hsv(objcol[0], objcol[1], objcol[2])
hsv = rgb_to_hsv(objcol[0], objcol[1], objcol[2])
hue = hsv[0]
if frc > 0:
rc1 = random.randint(0, int(hue * 1000)) # 0 to hue
rc2 = random.randint(int(hue * 1000), 1000) # hue to maximum
rc3 = random.randint(0, 1000) # sign
rc1 = randint(0, int(hue * 1000)) # 0 to hue
rc2 = randint(int(hue * 1000), 1000) # hue to maximum
rc3 = randint(0, 1000) # sign
if rc3 >= hue * 1000:
hue += (rc2 * frc) / 1000
else:
hue -= (rc1 * frc) / 1000
# Convert random color
objcol = colorsys.hsv_to_rgb(hue, hsv[1], hsv[2])
objcol = hsv_to_rgb(hue, hsv[1], hsv[2])
myvertex = []
myfaces = []
@ -356,7 +358,7 @@ def create_book(objname, sx, sy, sz, px, py, pz, mat, frx,
mybook.location[0] = px
mybook.location[1] = py
mybook.location[2] = pz + math.sin(math.radians(rot)) * sx
mybook.location[2] = pz + sin(radians(rot)) * sx
bpy.context.scene.objects.link(mybook)
mymesh.from_pydata(myvertex, [], myfaces)
@ -395,7 +397,7 @@ def create_book(objname, sx, sy, sz, px, py, pz, mat, frx,
# ---------------------------------
# Rotation on Y axis
# ---------------------------------
mybook.rotation_euler = (0.0, math.radians(rot), 0.0) # radians
mybook.rotation_euler = (0.0, radians(rot), 0.0) # radians
# add some gap to the size between books
return mybook, (sx, sy, sz, rot)

View File

@ -25,7 +25,7 @@
# ----------------------------------------------------------
# noinspection PyUnresolvedReferences
import bpy
import math
from math import cos, sin, radians, atan, sqrt
from .achm_tools import *
@ -568,20 +568,20 @@ def create_circular_column(self, objname, radio_top, radio_mid, radio_bottom, he
# Add bottom circle
for pie in pies:
x = math.cos(math.radians(pie)) * radio_bottom
y = math.sin(math.radians(pie)) * radio_bottom
x = cos(radians(pie)) * radio_bottom
y = sin(radians(pie)) * radio_bottom
mypoint = [(x, y, 0.0)]
myvertex.extend(mypoint)
# Add middle circle
for pie in pies:
x = math.cos(math.radians(pie)) * radio_mid
y = math.sin(math.radians(pie)) * radio_mid
x = cos(radians(pie)) * radio_mid
y = sin(radians(pie)) * radio_mid
mypoint = [(x, y, (height / 2) + ((height / 2) * self.shift))]
myvertex.extend(mypoint)
# Add top circle
for pie in pies:
x = math.cos(math.radians(pie)) * radio_top
y = math.sin(math.radians(pie)) * radio_top
x = cos(radians(pie)) * radio_top
y = sin(radians(pie)) * radio_top
mypoint = [(x, y, height)]
myvertex.extend(mypoint)
# -------------------------------------
@ -622,37 +622,37 @@ def create_torus(objname, radio_inside, radio_outside, height):
radio_mid = radio_outside + radio_inside - (height / 2)
# Add internal circles Top
for pie in pies:
x = math.cos(math.radians(pie)) * radio_inside
y = math.sin(math.radians(pie)) * radio_inside
x = cos(radians(pie)) * radio_inside
y = sin(radians(pie)) * radio_inside
mypoint = [(x, y, height / 2)]
myvertex.extend(mypoint)
# Add external circles Top
for pie in pies:
x = math.cos(math.radians(pie)) * radio_mid
y = math.sin(math.radians(pie)) * radio_mid
x = cos(radians(pie)) * radio_mid
y = sin(radians(pie)) * radio_mid
mypoint = [(x, y, height / 2)]
myvertex.extend(mypoint)
# Add Intermediate lines
for segment in segments:
for pie in pies:
radio_externo = radio_mid + (height * math.cos(math.radians(segment)))
x = math.cos(math.radians(pie)) * radio_externo
y = math.sin(math.radians(pie)) * radio_externo
z = math.sin(math.radians(segment)) * (height / 2)
radio_externo = radio_mid + (height * cos(radians(segment)))
x = cos(radians(pie)) * radio_externo
y = sin(radians(pie)) * radio_externo
z = sin(radians(segment)) * (height / 2)
mypoint = [(x, y, z)]
myvertex.extend(mypoint)
# Add internal circles Bottom
for pie in pies:
x = math.cos(math.radians(pie)) * radio_inside
y = math.sin(math.radians(pie)) * radio_inside
x = cos(radians(pie)) * radio_inside
y = sin(radians(pie)) * radio_inside
mypoint = [(x, y, height / 2 * -1)]
myvertex.extend(mypoint)
# Add external circles bottom
for pie in pies:
x = math.cos(math.radians(pie)) * radio_mid
y = math.sin(math.radians(pie)) * radio_mid
x = cos(radians(pie)) * radio_mid
y = sin(radians(pie)) * radio_mid
mypoint = [(x, y, height / 2 * -1)]
myvertex.extend(mypoint)
@ -690,12 +690,12 @@ def create_rectangular_base(self, objname, x, y, z, ramp=False):
height = self.array_space_z * elements
width = self.array_space_x * elements
if width > 0:
angle = math.atan(height / width)
angle = atan(height / width)
else:
angle = 0
radio = math.sqrt((x * x) + (self.array_space_z * self.array_space_z))
disp = radio * math.sin(angle)
radio = sqrt((x * x) + (self.array_space_z * self.array_space_z))
disp = radio * sin(angle)
if ramp is False or self.arc_top:
addz1 = 0
@ -749,7 +749,7 @@ def create_arc(objname, radio, gap, thickness, center):
# Flat cuts
angle = 13 * (180 / 16)
for i in range(1, 4):
z = math.sin(math.radians(angle)) * radio
z = sin(radians(angle)) * radio
mypoint = [(-radio - gap, pos_y, z)]
myvertex.extend(mypoint)
angle += 180 / 16
@ -760,8 +760,8 @@ def create_arc(objname, radio, gap, thickness, center):
# --------------------------------
angle = 180
for i in range(0, 9):
x = math.cos(math.radians(angle)) * radio
z = math.sin(math.radians(angle)) * radio
x = cos(radians(angle)) * radio
z = sin(radians(angle)) * radio
mypoint = [(x, pos_y, z)]
myvertex.extend(mypoint)
@ -771,7 +771,7 @@ def create_arc(objname, radio, gap, thickness, center):
# --------------------------------
angle = 8 * (180 / 16)
for i in range(1, 5):
x = math.cos(math.radians(angle)) * radio
x = cos(radians(angle)) * radio
mypoint = [(x, pos_y, radio + radio / 10)]
myvertex.extend(mypoint)

View File

@ -25,9 +25,9 @@
# ----------------------------------------------------------
# noinspection PyUnresolvedReferences
import bpy
import colorsys
import copy
import math
from copy import copy
from math import cos, sin, radians
from bpy.types import Operator
from .achm_tools import *
@ -35,7 +35,7 @@ from .achm_tools import *
# Define UI class
# Japanese curtains
# ------------------------------------------------------------------
class AchmJapan(bpy.types.Operator):
class AchmJapan(Operator):
bl_idname = "mesh.archimesh_japan"
bl_label = "Japanese curtains"
bl_description = "Japanese curtains Generator"
@ -174,7 +174,7 @@ def create_japan_mesh(self):
# Define UI class
# Roller curtains
# ------------------------------------------------------------------
class AchmRoller(bpy.types.Operator):
class AchmRoller(Operator):
bl_idname = "mesh.archimesh_roller"
bl_label = "Roller curtains"
bl_description = "Roller_curtains Generator"
@ -262,7 +262,7 @@ def generate_japan(self):
panel = []
location = bpy.context.scene.cursor_location
myloc = copy.copy(location) # copy location to keep 3D cursor position
myloc = copy(location) # copy location to keep 3D cursor position
# ------------------
# Rail
@ -621,7 +621,7 @@ def create_bezier(objname, points, origin, depth=0.001, fill='FULL'):
# ------------------------------------------------------------------------------
def generate_roller(self):
location = bpy.context.scene.cursor_location
myloc = copy.copy(location) # copy location to keep 3D cursor position
myloc = copy(location) # copy location to keep 3D cursor position
# ------------------
# Roller Top
@ -738,16 +738,16 @@ def create_roller_rail(objname, width, radio, px, py, pz, mat, mymaterial):
# Add right circle
for i in range(pies):
x = math.cos(math.radians(seg)) * radio
y = math.sin(math.radians(seg)) * radio
x = cos(radians(seg)) * radio
y = sin(radians(seg)) * radio
mypoint = [(0.0, x, y)]
myvertex.extend(mypoint)
seg += 360 / pies
# Add left circle
seg = 0
for i in range(pies):
x = math.cos(math.radians(seg)) * radio
y = math.sin(math.radians(seg)) * radio
x = cos(radians(seg)) * radio
y = sin(radians(seg)) * radio
mypoint = [(width, x, y)]
myvertex.extend(mypoint)
seg += 360 / pies
@ -816,7 +816,7 @@ def create_roller_sides(myroller, side, px, py, pz, mat, plastic):
myside.location.z = pz
# rotate
if side == "L":
myside.rotation_euler = (0, 0, math.radians(180))
myside.rotation_euler = (0, 0, radians(180))
# parent
myside.parent = myroller

View File

@ -26,14 +26,15 @@
import bpy
import math
# noinspection PyUnresolvedReferences
from bpy.props import *
from bpy.types import Operator, PropertyGroup, Object, Panel
from bpy.props import FloatProperty, BoolProperty, EnumProperty, FloatVectorProperty, CollectionProperty
from .achm_tools import *
# ------------------------------------------------------------------
# Define operator class to create object
# ------------------------------------------------------------------
class AchmDoor(bpy.types.Operator):
class AchmDoor(Operator):
bl_idname = "mesh.archimesh_door"
bl_label = "Door"
bl_description = "Door"
@ -277,50 +278,50 @@ def shape_children(mainobject, update=False):
# ------------------------------------------------------------------
# Define property group class to create or modify
# ------------------------------------------------------------------
class ObjectProperties(bpy.types.PropertyGroup):
frame_width = bpy.props.FloatProperty(
class ObjectProperties(PropertyGroup):
frame_width = FloatProperty(
name='Frame width',
min=0.25, max=10,
default=1, precision=2,
description='Doorframe width', update=update_object,
)
frame_height = bpy.props.FloatProperty(
frame_height = FloatProperty(
name='Frame height',
min=0.25, max=10,
default=2.1, precision=2,
description='Doorframe height', update=update_object,
)
frame_thick = bpy.props.FloatProperty(
frame_thick = FloatProperty(
name='Frame thickness',
min=0.05, max=0.50,
default=0.08, precision=2,
description='Doorframe thickness', update=update_object,
)
frame_size = bpy.props.FloatProperty(
frame_size = FloatProperty(
name='Frame size',
min=0.05, max=0.25,
default=0.08, precision=2,
description='Doorframe size', update=update_object,
)
crt_mat = bpy.props.BoolProperty(
crt_mat = BoolProperty(
name="Create default Cycles materials",
description="Create default materials for Cycles render",
default=True,
update=update_object,
)
factor = bpy.props.FloatProperty(
factor = FloatProperty(
name='',
min=0.2, max=1,
default=0.5, precision=3, description='Door ratio',
update=update_object,
)
r = bpy.props.FloatProperty(
r = FloatProperty(
name='Rotation', min=0, max=360,
default=0, precision=1,
description='Door rotation', update=update_object,
)
openside = bpy.props.EnumProperty(
openside = EnumProperty(
name="Open side",
items=(
('1', "Right open", ""),
@ -331,7 +332,7 @@ class ObjectProperties(bpy.types.PropertyGroup):
update=update_object,
)
model = bpy.props.EnumProperty(
model = EnumProperty(
name="Model",
items=(
('1', "Model 01", ""),
@ -345,7 +346,7 @@ class ObjectProperties(bpy.types.PropertyGroup):
update=update_object,
)
handle = bpy.props.EnumProperty(
handle = EnumProperty(
name="Handle",
items=(
('1', "Handle 01", ""),
@ -359,27 +360,27 @@ class ObjectProperties(bpy.types.PropertyGroup):
)
# opengl internal data
glpoint_a = bpy.props.FloatVectorProperty(
glpoint_a = FloatVectorProperty(
name="glpointa",
description="Hidden property for opengl",
default=(0, 0, 0),
)
glpoint_b = bpy.props.FloatVectorProperty(
glpoint_b = FloatVectorProperty(
name="glpointb",
description="Hidden property for opengl",
default=(0, 0, 0),
)
glpoint_c = bpy.props.FloatVectorProperty(
glpoint_c = FloatVectorProperty(
name="glpointc",
description="Hidden property for opengl",
default=(0, 0, 0),
)
glpoint_d = bpy.props.FloatVectorProperty(
glpoint_d = FloatVectorProperty(
name="glpointc",
description="Hidden property for opengl",
default=(0, 0, 0),
)
glpoint_e = bpy.props.FloatVectorProperty(
glpoint_e = FloatVectorProperty(
name="glpointc",
description="Hidden property for opengl",
default=(0, 0, 0),
@ -387,13 +388,13 @@ class ObjectProperties(bpy.types.PropertyGroup):
# Register
bpy.utils.register_class(ObjectProperties)
bpy.types.Object.DoorObjectGenerator = bpy.props.CollectionProperty(type=ObjectProperties)
Object.DoorObjectGenerator = CollectionProperty(type=ObjectProperties)
# ------------------------------------------------------------------
# Define panel class to modify object
# ------------------------------------------------------------------
class AchmDoorObjectgeneratorpanel(bpy.types.Panel):
class AchmDoorObjectgeneratorpanel(Panel):
bl_idname = "OBJECT_PT_door_generator"
bl_label = "Door"
bl_space_type = 'VIEW_3D'

View File

@ -29,9 +29,9 @@ import bpy
import bgl
# noinspection PyUnresolvedReferences
import blf
import math
from math import fabs, sqrt, sin, cos
# noinspection PyUnresolvedReferences
import mathutils
from mathutils import Vector
# noinspection PyUnresolvedReferences
from bpy_extras import view3d_utils
from .achm_room_maker import get_wall_points
@ -209,7 +209,7 @@ def draw_room_data(myobj, op, region, rv3d, rgb, rgbw, fsize, wfsize, space, mea
if measure is True:
# Draw text
dist = distance(a2_p, b2_p)
txtpoint3d = interpolate3d(a2_p, b2_p, math.fabs(dist / 2))
txtpoint3d = interpolate3d(a2_p, b2_p, fabs(dist / 2))
# add a gap
gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] + 0.05)
@ -237,7 +237,7 @@ def draw_room_data(myobj, op, region, rv3d, rgb, rgbw, fsize, wfsize, space, mea
bp = get_point((op.walls[i].glpoint_b[0], op.walls[i].glpoint_b[1], op.walls[i].glpoint_b[2]), myobj)
dist = distance(ap, bp)
txtpoint3d = interpolate3d(ap, bp, math.fabs(dist / 2))
txtpoint3d = interpolate3d(ap, bp, fabs(dist / 2))
# add a gap
gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2]) # + op.room_height / 2)
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
@ -320,7 +320,7 @@ def draw_door_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
if measure is True:
# Vertical
dist = distance(a_p1, t_p1)
txtpoint3d = interpolate3d(a_p1, t_p1, math.fabs(dist / 2))
txtpoint3d = interpolate3d(a_p1, t_p1, fabs(dist / 2))
gap3d = (a_p2[0], txtpoint3d[1], txtpoint3d[2])
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize, True)
@ -331,7 +331,7 @@ def draw_door_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
# Horizontal
dist = distance(b_p1, c_p1)
txtpoint3d = interpolate3d(b_p1, c_p1, math.fabs(dist / 2))
txtpoint3d = interpolate3d(b_p1, c_p1, fabs(dist / 2))
gap3d = (txtpoint3d[0], txtpoint3d[1], b_p2[2] + 0.02)
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize)
@ -342,7 +342,7 @@ def draw_door_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
# Door size
dist = distance(d_p1, e_p1)
txtpoint3d = interpolate3d(d_p1, e_p1, math.fabs(dist / 2))
txtpoint3d = interpolate3d(d_p1, e_p1, fabs(dist / 2))
gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] + 0.02)
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize)
@ -405,7 +405,7 @@ def draw_window_rail_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
if measure is True:
# Vertical
dist = distance(a_p1, t_p1)
txtpoint3d = interpolate3d(a_p1, t_p1, math.fabs(dist / 2))
txtpoint3d = interpolate3d(a_p1, t_p1, fabs(dist / 2))
gap3d = (a_p2[0], txtpoint3d[1], txtpoint3d[2])
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize, True)
@ -416,7 +416,7 @@ def draw_window_rail_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
# Horizontal
dist = distance(b_p1, c_p1)
txtpoint3d = interpolate3d(b_p1, c_p1, math.fabs(dist / 2))
txtpoint3d = interpolate3d(b_p1, c_p1, fabs(dist / 2))
gap3d = (txtpoint3d[0], txtpoint3d[1], b_p2[2] + 0.02)
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize)
@ -512,7 +512,7 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
if measure is True:
# Vertical (right)
dist = distance(a_p1, t_p1)
txtpoint3d = interpolate3d(a_p1, t_p1, math.fabs(dist / 2))
txtpoint3d = interpolate3d(a_p1, t_p1, fabs(dist / 2))
gap3d = (a_p2[0], txtpoint3d[1], txtpoint3d[2])
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize, True)
@ -523,7 +523,7 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
# Vertical (Left)
dist = distance(f_p1, d_p1)
txtpoint3d = interpolate3d(f_p1, d_p1, math.fabs(dist / 2))
txtpoint3d = interpolate3d(f_p1, d_p1, fabs(dist / 2))
gap3d = (f_p2[0], txtpoint3d[1], txtpoint3d[2])
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize)
@ -535,7 +535,7 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
# Horizontal (not triangle nor arch)
if op.UST != "4" and op.UST != "2":
dist = distance(b_p1, c_p1)
txtpoint3d = interpolate3d(b_p2, c_p2, math.fabs(dist / 2))
txtpoint3d = interpolate3d(b_p2, c_p2, fabs(dist / 2))
gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] + 0.05)
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize)
@ -545,13 +545,13 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
draw_line(screen_point_cp3, screen_point_cp1)
else:
dist = distance(b_p1, g_p3)
txtpoint3d = interpolate3d(b_p2, g_p4, math.fabs(dist / 2))
txtpoint3d = interpolate3d(b_p2, g_p4, fabs(dist / 2))
gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] + 0.05)
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize, True)
dist = distance(g_p3, c_p1)
txtpoint3d = interpolate3d(g_p4, c_p2, math.fabs(dist / 2))
txtpoint3d = interpolate3d(g_p4, c_p2, fabs(dist / 2))
gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] + 0.05)
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize)
@ -565,7 +565,7 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
# Only for Triangle or arch
if op.UST == "2" or op.UST == "4":
dist = distance(g_p2, g_p3)
txtpoint3d = interpolate3d(g_p2, g_p3, math.fabs(dist / 2))
txtpoint3d = interpolate3d(g_p2, g_p3, fabs(dist / 2))
gap3d = (txtpoint3d[0] + 0.05, txtpoint3d[1], txtpoint3d[2])
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize)
@ -581,7 +581,7 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
screen_point_hp5 = view3d_utils.location_3d_to_region_2d(region, rv3d, h_p5)
dist = distance(h_p1, h_p3)
txtpoint3d = interpolate3d(h_p1, h_p3, math.fabs(dist / 2))
txtpoint3d = interpolate3d(h_p1, h_p3, fabs(dist / 2))
gap3d = (txtpoint3d[0], txtpoint3d[1], txtpoint3d[2] - space - 0.05)
txtpoint2d = view3d_utils.location_3d_to_region_2d(region, rv3d, gap3d)
draw_text(txtpoint2d[0], txtpoint2d[1], "%6.2f" % dist, rgb, fsize)
@ -600,7 +600,7 @@ def draw_window_panel_data(myobj, op, region, rv3d, rgb, fsize, space, measure):
# return: distance
# --------------------------------------------------------------------
def distance(v1, v2):
return math.sqrt((v2[0] - v1[0]) ** 2 + (v2[1] - v1[1]) ** 2 + (v2[2] - v1[2]) ** 2)
return sqrt((v2[0] - v1[0]) ** 2 + (v2[1] - v1[1]) ** 2 + (v2[2] - v1[2]) ** 2)
# --------------------------------------------------------------------
@ -634,7 +634,7 @@ def interpolate3d(v1, v2, d1):
def get_point(v1, mainobject):
# Using World Matrix
vt = mathutils.Vector((v1[0], v1[1], v1[2], 1))
vt = Vector((v1[0], v1[1], v1[2], 1))
m4 = mainobject.matrix_world
vt2 = m4 * vt
v2 = [vt2[0], vt2[1], vt2[2]]
@ -654,8 +654,8 @@ def rotate_x(v1, rot):
# X axis
v2[0] = v1[0]
v2[1] = v1[1] * math.cos(radx) - v1[2] * math.sin(radx)
v2[2] = v1[1] * math.sin(radx) + v1[2] * math.cos(radx)
v2[1] = v1[1] * cos(radx) - v1[2] * sin(radx)
v2[2] = v1[1] * sin(radx) + v1[2] * cos(radx)
return v2
@ -671,9 +671,9 @@ def rotate_y(v1, rot):
rady = rot[1]
# Y axis
v2[0] = v1[0] * math.cos(rady) + v1[2] * math.sin(rady)
v2[0] = v1[0] * cos(rady) + v1[2] * sin(rady)
v2[1] = v1[1]
v2[2] = v1[2] * math.cos(rady) - v1[0] * math.sin(rady)
v2[2] = v1[2] * cos(rady) - v1[0] * sin(rady)
return v2
@ -689,8 +689,8 @@ def rotate_z(v1, rot):
radz = rot[2]
# Z axis
v2[0] = v1[0] * math.cos(radz) - v1[1] * math.sin(radz)
v2[1] = v1[0] * math.sin(radz) + v1[1] * math.cos(radz)
v2[0] = v1[0] * cos(radz) - v1[1] * sin(radz)
v2[1] = v1[0] * sin(radz) + v1[1] * cos(radz)
v2[2] = v1[2]
return v2

View File

@ -24,13 +24,15 @@
#
# ----------------------------------------------------------
import bpy
import math
import copy
import sys
import datetime
import time
from .achm_tools import *
from math import pi, fabs
from copy import copy
from sys import exc_info
from datetime import datetime
from time import time
from bpy.types import Operator, PropertyGroup
from bpy.props import StringProperty, EnumProperty, FloatProperty, IntProperty, BoolProperty, CollectionProperty
from bpy_extras.io_utils import ExportHelper
from .achm_tools import *
# ----------------------------------------------------------
# Define rotation types
@ -44,7 +46,7 @@ RotationType_R180 = 3
# ----------------------------------------------------------
# Export menu UI
# ----------------------------------------------------------
class AchmExportInventory(bpy.types.Operator, ExportHelper):
class AchmExportInventory(Operator, ExportHelper):
bl_idname = "io_export.kitchen_inventory"
bl_description = 'Export kitchen inventory (.txt)'
bl_category = 'Archimesh'
@ -52,12 +54,12 @@ class AchmExportInventory(bpy.types.Operator, ExportHelper):
# From ExportHelper. Filter filenames.
filename_ext = ".txt"
filter_glob = bpy.props.StringProperty(
filter_glob = StringProperty(
default="*.txt",
options={'HIDDEN'},
)
filepath = bpy.props.StringProperty(
filepath = StringProperty(
name="File Path",
description="File path used for exporting room data file",
maxlen=1024, default="",
@ -81,7 +83,7 @@ class AchmExportInventory(bpy.types.Operator, ExportHelper):
realpath = os.path.realpath(os.path.expanduser(self.properties.filepath))
fout = open(realpath, 'w')
st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
st = datetime.fromtimestamp(time()).strftime('%Y-%m-%d %H:%M:%S')
fout.write("# Archimesh kitchen inventory\n")
fout.write("# " + st + "\n")
mylist = getinventory()
@ -91,7 +93,7 @@ class AchmExportInventory(bpy.types.Operator, ExportHelper):
fout.close()
self.report({'INFO'}, realpath + "successfully exported")
except:
e = sys.exc_info()[0]
e = exc_info()[0]
self.report({'ERROR'}, "Unable to export inventory " + e)
return {'FINISHED'}
@ -247,37 +249,37 @@ def getinventory():
# Define property group class for cabinet properties
# This is managed as an array of objects
# ------------------------------------------------------------------
class CabinetProperties(bpy.types.PropertyGroup):
class CabinetProperties(PropertyGroup):
# Cabinet width
sX = bpy.props.FloatProperty(
sX = FloatProperty(
name='width', min=0.001, max=10, default=0.60, precision=3,
description='Cabinet width',
)
wY = bpy.props.FloatProperty(
wY = FloatProperty(
name='', min=-10, max=10, default=0, precision=3,
description='Modify depth size',
)
wZ = bpy.props.FloatProperty(
wZ = FloatProperty(
name='', min=-10, max=10, default=0, precision=3,
description='Modify height size',
)
# Cabinet position shift
pX = bpy.props.FloatProperty(
pX = FloatProperty(
name='', min=-10, max=10, default=0, precision=3,
description='Position x shift',
)
pY = bpy.props.FloatProperty(
pY = FloatProperty(
name='', min=-10, max=10, default=0, precision=3,
description='Position y shift',
)
pZ = bpy.props.FloatProperty(
pZ = FloatProperty(
name='', min=-10, max=10, default=0, precision=3,
description='Position z shift',
)
# Door type
dType = bpy.props.EnumProperty(
dType = EnumProperty(
items=(
('1', "Single R", ""),
('2', "Single L", ""),
@ -296,47 +298,47 @@ class CabinetProperties(bpy.types.PropertyGroup):
)
# Shelves
sNum = bpy.props.IntProperty(
sNum = IntProperty(
name='Shelves', min=0, max=10, default=1,
description='Number total of shelves',
)
# Drawers
dNum = bpy.props.IntProperty(
dNum = IntProperty(
name='Num', min=1, max=10, default=3,
description='Number total of drawers',
)
# Glass Factor
gF = bpy.props.FloatProperty(
gF = FloatProperty(
name='', min=0.001, max=1, default=0.1, precision=3,
description='Glass ratio',
)
# Handle flag
hand = bpy.props.BoolProperty(
hand = BoolProperty(
name="Handle",
description="Create a handle", default=True,
)
# Left baseboard
bL = bpy.props.BoolProperty(
bL = BoolProperty(
name="Left Baseboard",
description="Create a left baseboard", default=False,
)
# Right baseboard
bR = bpy.props.BoolProperty(
bR = BoolProperty(
name="Right Baseboard",
description="Create a left baseboard", default=False,
)
# Fill countertop spaces
tC = bpy.props.BoolProperty(
tC = BoolProperty(
name="Countertop fill",
description="Fill empty spaces with countertop", default=True,
)
# Add countertop edge
tE = bpy.props.BoolProperty(
tE = BoolProperty(
name="Countertop edge",
description="Add edge to countertop", default=True,
)
# cabinet rotation
rotate = bpy.props.EnumProperty(
rotate = EnumProperty(
items=(
('9', "Default", ""),
('1', "90 CW", ""),
@ -355,7 +357,7 @@ bpy.utils.register_class(CabinetProperties)
# Define UI class
# Kitchens
# ------------------------------------------------------------------
class AchmKitchen(bpy.types.Operator):
class AchmKitchen(Operator):
bl_idname = "mesh.archimesh_kitchen"
bl_label = "Cabinets"
bl_description = "Cabinet Generator"
@ -363,7 +365,7 @@ class AchmKitchen(bpy.types.Operator):
bl_options = {'REGISTER', 'UNDO'}
# Define properties
type_cabinet = bpy.props.EnumProperty(
type_cabinet = EnumProperty(
items=(('1', "Floor", ""),
('2', "Wall", "")),
name="Type",
@ -371,19 +373,19 @@ class AchmKitchen(bpy.types.Operator):
)
oldtype = type_cabinet
thickness = bpy.props.FloatProperty(
thickness = FloatProperty(
name='Thickness', min=0.001, max=5, default=0.018, precision=3,
description='Board thickness',
)
depth = bpy.props.FloatProperty(
depth = FloatProperty(
name='Depth', min=0.001, max=50, default=0.59, precision=3,
description='Default cabinet depth',
)
height = bpy.props.FloatProperty(
height = FloatProperty(
name='Height', min=0.001, max=50, default=0.70, precision=3,
description='Default cabinet height',
)
handle = bpy.props.EnumProperty(
handle = EnumProperty(
items=(
('1', "Model 1", ""),
('2', "Model 2", ""),
@ -398,69 +400,69 @@ class AchmKitchen(bpy.types.Operator):
name="Handle",
description="Type of handle",
)
handle_x = bpy.props.FloatProperty(
handle_x = FloatProperty(
name='', min=0.001, max=10,
default=0.05, precision=3,
description='Displacement in X relative position (limited to door size)',
)
handle_z = bpy.props.FloatProperty(
handle_z = FloatProperty(
name='', min=0.001, max=10,
default=0.05, precision=3,
description='Displacement in Z relative position (limited to door size)',
)
baseboard = bpy.props.BoolProperty(
baseboard = BoolProperty(
name="Baseboard",
description="Create a baseboard automatically",
default=True,
)
baseheight = bpy.props.FloatProperty(
baseheight = FloatProperty(
name='height', min=0.001, max=10,
default=0.16, precision=3,
description='Baseboard height',
)
basefactor = bpy.props.FloatProperty(
basefactor = FloatProperty(
name='sink', min=0, max=1,
default=0.90, precision=3,
description='Baseboard sink',
)
countertop = bpy.props.BoolProperty(
countertop = BoolProperty(
name="Countertop",
description="Create a countertop automatically (only default cabinet height)",
default=True,
)
counterheight = bpy.props.FloatProperty(
counterheight = FloatProperty(
name='height', min=0.001, max=10,
default=0.02, precision=3,
description='Countertop height',
)
counterextend = bpy.props.FloatProperty(
counterextend = FloatProperty(
name='extend', min=0.001, max=10,
default=0.03, precision=3,
description='Countertop extent',
)
fitZ = bpy.props.BoolProperty(
fitZ = BoolProperty(
name="Floor origin in Z=0",
description="Use Z=0 axis as vertical origin floor position",
default=True,
)
moveZ = bpy.props.FloatProperty(
moveZ = FloatProperty(
name='Z position', min=0.001, max=10,
default=1.5, precision=3,
description='Wall cabinet Z position from floor',
)
cabinet_num = bpy.props.IntProperty(
cabinet_num = IntProperty(
name='Number of Cabinets', min=1, max=30,
default=1,
description='Number total of cabinets in the Kitchen',
)
cabinets = bpy.props.CollectionProperty(type=CabinetProperties)
cabinets = CollectionProperty(type=CabinetProperties)
# Materials
crt_mat = bpy.props.BoolProperty(
crt_mat = BoolProperty(
name="Create default Cycles materials",
description="Create default materials for Cycles render",
default=True,
@ -621,7 +623,7 @@ def generate_cabinets(self):
boxes = []
bases = []
location = bpy.context.scene.cursor_location
myloc = copy.copy(location) # copy location to keep 3D cursor position
myloc = copy(location) # copy location to keep 3D cursor position
# Fit to floor
if self.fitZ:
myloc[2] = 0
@ -678,21 +680,21 @@ def generate_cabinets(self):
# 90 CW
# ----------
if myrotationtype == RotationType_R90CW:
myrot += -math.pi / 2
myrot += -pi / 2
# ----------
# 90 CCW
# ----------
if myrotationtype == RotationType_R90CCW:
myrot += math.pi / 2
myrot += pi / 2
# ----------
# 180
# ----------
if myrotationtype == RotationType_R180:
myrot = myrot + math.pi
myrot = myrot + pi
# Save the rotation for next cabinet
lastrot = myrot
angle = myrot - ((2 * math.pi) * (myrot // (2 * math.pi))) # clamp one revolution
angle = myrot - ((2 * pi) * (myrot // (2 * pi))) # clamp one revolution
# -------------------------------------------
# Countertop (only default height cabinet)
@ -703,11 +705,11 @@ def generate_cabinets(self):
# fill (depend on orientation)
if self.cabinets[i].tC:
# 0 or 180 degrees
if angle == 0 or angle == math.pi:
w += math.fabs(self.cabinets[i].pX)
if angle == 0 or angle == pi:
w += fabs(self.cabinets[i].pX)
# 90 or 270 degrees
if angle == (3 * math.pi) / 2 or angle == math.pi / 2:
w += math.fabs(self.cabinets[i].pY)
if angle == (3 * pi) / 2 or angle == pi / 2:
w += fabs(self.cabinets[i].pY)
mycountertop = create_countertop("Countertop" + str(i + 1),
w,
@ -727,19 +729,19 @@ def generate_cabinets(self):
mycountertop.location[0] = 0
# 90CW
if angle == (3 * math.pi) / 2:
if angle == (3 * pi) / 2:
if self.cabinets[i].pY >= 0:
mycountertop.location[0] = 0
else:
mycountertop.location[0] = self.cabinets[i].pY
# 90CCW
if angle == math.pi / 2:
if angle == pi / 2:
if self.cabinets[i].pY >= 0:
mycountertop.location[0] = self.cabinets[i].pY * -1
else:
mycountertop.location[0] = 0
# 180
if angle == math.pi:
if angle == pi:
mycountertop.location[0] = 0
mycountertop.location[2] = self.height
@ -796,15 +798,15 @@ def generate_cabinets(self):
lastx = lastx
lasty = lasty
# 90 degrees
if angle == math.pi / 2:
if angle == pi / 2:
ym = -self.cabinets[i].sX
lastx = lastx - self.cabinets[i].sX - self.cabinets[i].pX
lasty = lasty + self.cabinets[i].sX + self.cabinets[i].pY
# 180 degrees
if angle == math.pi:
if angle == pi:
lastx -= 2 * (self.cabinets[i].sX + self.cabinets[i].pX)
# 270 degrees
if angle == (3 * math.pi) / 2:
if angle == (3 * pi) / 2:
xm = self.depth - self.counterextend
lastx = lastx - self.cabinets[i].sX - self.cabinets[i].pX
lasty = lasty - self.cabinets[i].sX - self.cabinets[i].pX + self.cabinets[i].pY
@ -1430,13 +1432,13 @@ def create_handle(model, mydoor, thickness, handle_position, mat, handle_x, hand
if handle_position != "T" and handle_position != "B" and handle_position != "TM":
yrot = 0
if model == "1":
yrot = math.pi / 2
yrot = pi / 2
if model == "4":
if handle_position == "LT" or handle_position == "LB":
yrot = -math.pi / 2
yrot = -pi / 2
else:
yrot = math.pi / 2
yrot = pi / 2
myhandle.rotation_euler = (0, yrot, 0.0) # radians PI=180

View File

@ -24,8 +24,10 @@
#
# ----------------------------------------------------------
import bpy
import math
import copy
from math import cos, sin, radians
from copy import copy
from bpy.types import Operator
from bpy.props import EnumProperty, FloatProperty, IntProperty, BoolProperty, FloatVectorProperty
from .achm_tools import *
@ -127,14 +129,14 @@ def set_preset(self):
# Define UI class
# Lamps
# ------------------------------------------------------------------
class AchmLamp(bpy.types.Operator):
class AchmLamp(Operator):
bl_idname = "mesh.archimesh_lamp"
bl_label = "Lamp"
bl_description = "Lamp Generator"
bl_category = 'Archimesh'
bl_options = {'REGISTER', 'UNDO'}
# preset
preset = bpy.props.EnumProperty(
preset = EnumProperty(
items=(
('0', "None", ""),
('1', "Sphere", ""),
@ -147,107 +149,107 @@ class AchmLamp(bpy.types.Operator):
)
oldpreset = preset
base_height = bpy.props.FloatProperty(
base_height = FloatProperty(
name='Height',
min=0.01, max=10, default=0.20, precision=3,
description='lamp base height',
)
base_segments = bpy.props.IntProperty(
base_segments = IntProperty(
name='Segments',
min=3, max=128, default=16,
description='Number of segments (vertical)',
)
base_rings = bpy.props.IntProperty(
base_rings = IntProperty(
name='Rings',
min=2, max=12, default=6,
description='Number of rings (horizontal)',
)
holder = bpy.props.FloatProperty(
holder = FloatProperty(
name='Lampholder',
min=0.001, max=10, default=0.02, precision=3,
description='Lampholder height',
)
smooth = bpy.props.BoolProperty(
smooth = BoolProperty(
name="Smooth",
description="Use smooth shader",
default=True,
)
subdivide = bpy.props.BoolProperty(
subdivide = BoolProperty(
name="Subdivide",
description="Add subdivision modifier",
default=True,
)
bz01 = bpy.props.FloatProperty(name='S1', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz02 = bpy.props.FloatProperty(name='S2', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz03 = bpy.props.FloatProperty(name='S3', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz04 = bpy.props.FloatProperty(name='S4', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz05 = bpy.props.FloatProperty(name='S5', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz06 = bpy.props.FloatProperty(name='S6', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz07 = bpy.props.FloatProperty(name='S7', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz08 = bpy.props.FloatProperty(name='S8', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz09 = bpy.props.FloatProperty(name='S9', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz10 = bpy.props.FloatProperty(name='S10', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz11 = bpy.props.FloatProperty(name='S11', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz12 = bpy.props.FloatProperty(name='S12', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz01 = FloatProperty(name='S1', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz02 = FloatProperty(name='S2', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz03 = FloatProperty(name='S3', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz04 = FloatProperty(name='S4', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz05 = FloatProperty(name='S5', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz06 = FloatProperty(name='S6', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz07 = FloatProperty(name='S7', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz08 = FloatProperty(name='S8', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz09 = FloatProperty(name='S9', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz10 = FloatProperty(name='S10', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz11 = FloatProperty(name='S11', min=-1, max=1, default=0, precision=3, description='Z shift factor')
bz12 = FloatProperty(name='S12', min=-1, max=1, default=0, precision=3, description='Z shift factor')
br01 = bpy.props.FloatProperty(name='R1', min=0.001, max=10, default=0.06, precision=3, description='Ring radio')
br02 = bpy.props.FloatProperty(name='R2', min=0.001, max=10, default=0.08, precision=3, description='Ring radio')
br03 = bpy.props.FloatProperty(name='R3', min=0.001, max=10, default=0.09, precision=3, description='Ring radio')
br04 = bpy.props.FloatProperty(name='R4', min=0.001, max=10, default=0.08, precision=3, description='Ring radio')
br05 = bpy.props.FloatProperty(name='R5', min=0.001, max=10, default=0.06, precision=3, description='Ring radio')
br06 = bpy.props.FloatProperty(name='R6', min=0.001, max=10, default=0.03, precision=3, description='Ring radio')
br07 = bpy.props.FloatProperty(name='R7', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br08 = bpy.props.FloatProperty(name='R8', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br09 = bpy.props.FloatProperty(name='R9', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br10 = bpy.props.FloatProperty(name='R10', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br11 = bpy.props.FloatProperty(name='R11', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br12 = bpy.props.FloatProperty(name='R12', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br01 = FloatProperty(name='R1', min=0.001, max=10, default=0.06, precision=3, description='Ring radio')
br02 = FloatProperty(name='R2', min=0.001, max=10, default=0.08, precision=3, description='Ring radio')
br03 = FloatProperty(name='R3', min=0.001, max=10, default=0.09, precision=3, description='Ring radio')
br04 = FloatProperty(name='R4', min=0.001, max=10, default=0.08, precision=3, description='Ring radio')
br05 = FloatProperty(name='R5', min=0.001, max=10, default=0.06, precision=3, description='Ring radio')
br06 = FloatProperty(name='R6', min=0.001, max=10, default=0.03, precision=3, description='Ring radio')
br07 = FloatProperty(name='R7', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br08 = FloatProperty(name='R8', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br09 = FloatProperty(name='R9', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br10 = FloatProperty(name='R10', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br11 = FloatProperty(name='R11', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
br12 = FloatProperty(name='R12', min=0.001, max=10, default=0.10, precision=3, description='Ring radio')
top_height = bpy.props.FloatProperty(
top_height = FloatProperty(
name='Height', min=0.01, max=10,
default=0.20, precision=3,
description='lampshade height',
)
top_segments = bpy.props.IntProperty(
top_segments = IntProperty(
name='Segments', min=3, max=128,
default=32,
description='Number of segments (vertical)',
)
tr01 = bpy.props.FloatProperty(
tr01 = FloatProperty(
name='R1', min=0.001, max=10,
default=0.16, precision=3,
description='lampshade bottom radio',
)
tr02 = bpy.props.FloatProperty(name='R2', min=0.001, max=10,
tr02 = FloatProperty(name='R2', min=0.001, max=10,
default=0.08, precision=3,
description='lampshade top radio')
pleats = bpy.props.BoolProperty(
pleats = BoolProperty(
name="Pleats", description="Create pleats in the lampshade",
default=False,
)
tr03 = bpy.props.FloatProperty(
tr03 = FloatProperty(
name='R3', min=0.001, max=1,
default=0.01, precision=3, description='Pleats size',
)
energy = bpy.props.FloatProperty(
energy = FloatProperty(
name='Light', min=0.00, max=1000,
default=15, precision=3,
description='Light intensity',
)
opacity = bpy.props.FloatProperty(
opacity = FloatProperty(
name='Translucency', min=0.00, max=1,
default=0.3, precision=3,
description='Lampshade translucency factor (1 completely translucent)',
)
# Materials
crt_mat = bpy.props.BoolProperty(
crt_mat = BoolProperty(
name="Create default Cycles materials",
description="Create default materials for Cycles render",
default=True,
)
objcol = bpy.props.FloatVectorProperty(
objcol = FloatVectorProperty(
name="Color",
description="Color for material",
default=(1.0, 1.0, 1.0, 1.0),
@ -399,7 +401,7 @@ def create_lamp_mesh(self):
# ------------------------------------------------------------------------------
def generate_lamp(self):
location = bpy.context.scene.cursor_location
myloc = copy.copy(location) # copy location to keep 3D cursor position
myloc = copy(location) # copy location to keep 3D cursor position
# ---------------------
# Lamp base
# ---------------------
@ -738,8 +740,8 @@ def create_cylinder_data(segments, listheight, listradio, bottom, top, pleats, p
for z in listheight:
seg = 0
for i in range(segments):
x = math.cos(math.radians(seg)) * (listradio[idx] + rp)
y = math.sin(math.radians(seg)) * (listradio[idx] + rp)
x = cos(radians(seg)) * (listradio[idx] + rp)
y = sin(radians(seg)) * (listradio[idx] + rp)
mypoint = [(x, y, z)]
myvertex.extend(mypoint)
seg += 360 / segments

View File

@ -27,6 +27,7 @@
import bpy
# noinspection PyUnresolvedReferences
import bgl
from bpy.types import Operator, Panel, SpaceView3D
from .achm_tools import *
from .achm_gltools import *
@ -47,7 +48,7 @@ def isboolean(myobject, childobject):
# ------------------------------------------------------
# Button: Action to link windows and doors
# ------------------------------------------------------
class AchmHoleAction(bpy.types.Operator):
class AchmHoleAction(Operator):
bl_idname = "object.archimesh_cut_holes"
bl_label = "Auto Holes"
bl_description = "Enable windows and doors holes for any selected object (needs wall thickness)"
@ -190,7 +191,7 @@ class AchmHoleAction(bpy.types.Operator):
# ------------------------------------------------------
# Button: Action to create room from grease pencil
# ------------------------------------------------------
class AchmPencilAction(bpy.types.Operator):
class AchmPencilAction(Operator):
bl_idname = "object.archimesh_pencil_room"
bl_label = "Room from Draw"
bl_description = "Create a room base on grease pencil strokes (draw from top view (7 key))"
@ -394,7 +395,7 @@ class AchmPencilAction(bpy.types.Operator):
# ------------------------------------------------------------------
# Define panel class for main functions.
# ------------------------------------------------------------------
class ArchimeshMainPanel(bpy.types.Panel):
class ArchimeshMainPanel(Panel):
bl_idname = "archimesh_main_panel"
bl_label = "Archimesh"
bl_space_type = 'VIEW_3D'
@ -520,7 +521,7 @@ class ArchimeshMainPanel(bpy.types.Panel):
# Defines button for enable/disable the tip display
#
# -------------------------------------------------------------
class AchmRunHintDisplayButton(bpy.types.Operator):
class AchmRunHintDisplayButton(Operator):
bl_idname = "archimesh.runopenglbutton"
bl_label = "Display hint data manager"
bl_description = "Display aditional information in the viewport"
@ -534,7 +535,7 @@ class AchmRunHintDisplayButton(bpy.types.Operator):
@staticmethod
def handle_add(self, context):
if AchmRunHintDisplayButton._handle is None:
AchmRunHintDisplayButton._handle = bpy.types.SpaceView3D.draw_handler_add(draw_callback_px, (self, context),
AchmRunHintDisplayButton._handle = SpaceView3D.draw_handler_add(draw_callback_px, (self, context),
'WINDOW',
'POST_PIXEL')
context.window_manager.archimesh_run_opengl = True
@ -546,7 +547,7 @@ class AchmRunHintDisplayButton(bpy.types.Operator):
@staticmethod
def handle_remove(self, context):
if AchmRunHintDisplayButton._handle is not None:
bpy.types.SpaceView3D.draw_handler_remove(AchmRunHintDisplayButton._handle, 'WINDOW')
SpaceView3D.draw_handler_remove(AchmRunHintDisplayButton._handle, 'WINDOW')
AchmRunHintDisplayButton._handle = None
context.window_manager.archimesh_run_opengl = False

View File

@ -25,7 +25,9 @@
# ----------------------------------------------------------
# noinspection PyUnresolvedReferences
import bpy
import math
from math import radians
from bpy.types import Operator
from bpy.props import IntProperty, FloatProperty, BoolProperty, EnumProperty
from .achm_tools import *
@ -33,7 +35,7 @@ from .achm_tools import *
# Define UI class
# Rooms
# ------------------------------------------------------------------
class AchmRoof(bpy.types.Operator):
class AchmRoof(Operator):
bl_idname = "mesh.archimesh_roof"
bl_label = "Roof"
bl_description = "Roof Generator"
@ -41,38 +43,38 @@ class AchmRoof(bpy.types.Operator):
bl_options = {'REGISTER', 'UNDO'}
# Define properties
roof_width = bpy.props.IntProperty(
roof_width = IntProperty(
name='Num tiles X',
min=1, max=100, default=6,
description='Tiles in X axis',
)
roof_height = bpy.props.IntProperty(
roof_height = IntProperty(
name='Num tiles Y',
min=1, max=100, default=3,
description='Tiles in Y axis',
)
roof_thick = bpy.props.FloatProperty(
roof_thick = FloatProperty(
name='Tile thickness',
min=0.000, max=0.50, default=0.012, precision=3,
description='Thickness of the roof tile',
)
roof_angle = bpy.props.FloatProperty(
roof_angle = FloatProperty(
name='Roof slope', min=0.0, max=70.0, default=0.0, precision=1,
description='Roof angle of slope',
)
roof_scale = bpy.props.FloatProperty(
roof_scale = FloatProperty(
name='Tile scale', min=0.001, max=10, default=1, precision=3,
description='Scale of roof tile',
)
crt_mat = bpy.props.BoolProperty(
crt_mat = BoolProperty(
name="Create default Cycles materials",
description="Create default materials for Cycles render",
default=True,
)
model = bpy.props.EnumProperty(
model = EnumProperty(
items=(
('1', "Model 01", ""),
('2', "Model 02", ""),
@ -198,7 +200,7 @@ def create_roof_mesh(self):
set_modifier_array(myroof, "Y", a_y, self.roof_height)
# Slope
myroof.rotation_euler = (math.radians(self.roof_angle), 0.0, 0.0)
myroof.rotation_euler = (radians(self.roof_angle), 0.0, 0.0)
# Create materials
if self.crt_mat:

View File

@ -25,20 +25,21 @@
# ----------------------------------------------------------
# noinspection PyUnresolvedReferences
import bpy
import math
# noinspection PyUnresolvedReferences
import mathutils
import datetime
import time
from .achm_tools import *
# noinspection PyUnresolvedReferences
from math import sin, cos, fabs, radians
from mathutils import Vector
from datetime import datetime
from time import time
from bpy.types import Operator, PropertyGroup, Object, Panel
from bpy.props import StringProperty, FloatProperty, BoolProperty, IntProperty, FloatVectorProperty, \
CollectionProperty, EnumProperty
from bpy_extras.io_utils import ExportHelper, ImportHelper
from .achm_tools import *
# ----------------------------------------------------------
# Export menu UI
# ----------------------------------------------------------
class AchmExportRoom(bpy.types.Operator, ExportHelper):
class AchmExportRoom(Operator, ExportHelper):
bl_idname = "io_export.roomdata"
bl_description = 'Export Room data (.dat)'
bl_category = 'Archimesh'
@ -46,12 +47,12 @@ class AchmExportRoom(bpy.types.Operator, ExportHelper):
# From ExportHelper. Filter filenames.
filename_ext = ".dat"
filter_glob = bpy.props.StringProperty(
filter_glob = StringProperty(
default="*.dat",
options={'HIDDEN'},
)
filepath = bpy.props.StringProperty(
filepath = StringProperty(
name="File Path",
description="File path used for exporting room data file",
maxlen=1024, default="",
@ -79,7 +80,7 @@ class AchmExportRoom(bpy.types.Operator, ExportHelper):
realpath = os.path.realpath(os.path.expanduser(self.properties.filepath))
fout = open(realpath, 'w')
st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
st = datetime.fromtimestamp(time()).strftime('%Y-%m-%d %H:%M:%S')
fout.write("# Archimesh room export data\n")
fout.write("# " + st + "\n")
fout.write("#======================================================\n")
@ -150,7 +151,7 @@ class AchmExportRoom(bpy.types.Operator, ExportHelper):
# ----------------------------------------------------------
# Import menu UI
# ----------------------------------------------------------
class AchmImportRoom(bpy.types.Operator, ImportHelper):
class AchmImportRoom(Operator, ImportHelper):
bl_idname = "io_import.roomdata"
bl_description = 'Import Room data (.dat)'
bl_category = 'Archimesh'
@ -158,12 +159,12 @@ class AchmImportRoom(bpy.types.Operator, ImportHelper):
# From Helper. Filter filenames.
filename_ext = ".dat"
filter_glob = bpy.props.StringProperty(
filter_glob = StringProperty(
default="*.dat",
options={'HIDDEN'},
)
filepath = bpy.props.StringProperty(
filepath = StringProperty(
name="File Path",
description="File path used for exporting room data file",
maxlen=1024, default="",
@ -310,7 +311,7 @@ class AchmImportRoom(bpy.types.Operator, ImportHelper):
# ------------------------------------------------------------------
# Define operator class to create rooms
# ------------------------------------------------------------------
class AchmRoom(bpy.types.Operator):
class AchmRoom(Operator):
bl_idname = "mesh.archimesh_room"
bl_label = "Room"
bl_description = "Generate room with walls, baseboard, floor and ceiling"
@ -660,8 +661,8 @@ def make_wall(prv, wall, baseboard, lastface, lastx, lasty, height, myvertex, my
over = get_blendunits(over)
# Calculate size using angle
sizex = math.cos(math.radians(angle)) * size
sizey = math.sin(math.radians(angle)) * size
sizex = cos(radians(angle)) * size
sizey = sin(radians(angle)) * size
# Create faces
if advanced is False or baseboard is True:
@ -697,13 +698,13 @@ def make_wall(prv, wall, baseboard, lastface, lastx, lasty, height, myvertex, my
else:
# Wall with peak and without curve.
mid = size / 2 + ((size / 2) * factor)
midx = math.cos(math.radians(angle)) * mid
midy = math.sin(math.radians(angle)) * mid
midx = cos(radians(angle)) * mid
midy = sin(radians(angle)) * mid
# first face
myvertex.extend([(lastx + midx, lasty + midy, height + over),
(lastx + midx, lasty + midy, 0.0)])
if check_visibility(hide, baseboard):
if math.fabs(factor) != 1:
if fabs(factor) != 1:
if prv is False:
# Previous no advance or advance with curve
myfaces.extend([(lastface, lastface + 2, lastface + 3, lastface + 1)])
@ -714,7 +715,7 @@ def make_wall(prv, wall, baseboard, lastface, lastx, lasty, height, myvertex, my
myvertex.extend([(lastx + sizex, lasty + sizey, 0.0),
(lastx + sizex, lasty + sizey, height)])
if check_visibility(hide, baseboard):
if math.fabs(factor) != 1:
if fabs(factor) != 1:
myfaces.extend([(lastface + 2, lastface + 3, lastface + 4, lastface + 5)])
else:
if prv is False:
@ -764,12 +765,12 @@ def make_curved_wall(myvertex, myfaces, size, wall_angle, lastx, lasty, height,
curvex = None
curvey = None
# Calculate size using angle
sizex = math.cos(math.radians(wall_angle)) * size
sizey = math.sin(math.radians(wall_angle)) * size
sizex = cos(radians(wall_angle)) * size
sizey = sin(radians(wall_angle)) * size
for step in range(0, arc_angle + step_angle, step_angle):
curvex = sizex / 2 - math.cos(math.radians(step + wall_angle)) * size / 2
curvey = sizey / 2 - math.sin(math.radians(step + wall_angle)) * size / 2
curvex = sizex / 2 - cos(radians(step + wall_angle)) * size / 2
curvey = sizey / 2 - sin(radians(step + wall_angle)) * size / 2
curvey = curvey * curve_factor
myvertex.extend([(lastx + curvex, lasty + curvey, height),
(lastx + curvex, lasty + curvey, 0.0)])
@ -831,8 +832,8 @@ def create_floor(rp, typ, myroom):
# ------------------------------------------------------------------
# Define property group class to create, or modify, room walls.
# ------------------------------------------------------------------
class WallProperties(bpy.types.PropertyGroup):
w = bpy.props.FloatProperty(
class WallProperties(PropertyGroup):
w = FloatProperty(
name='Length',
min=-150, max=150,
default=1, precision=3,
@ -840,33 +841,33 @@ class WallProperties(bpy.types.PropertyGroup):
update=update_room,
)
a = bpy.props.BoolProperty(
a = BoolProperty(
name="Advance",
description="Define advance parameters of the wall",
default=False,
update=update_room,
)
curved = bpy.props.BoolProperty(
curved = BoolProperty(
name="Curved",
description="Enable curved wall parameters",
default=False,
update=update_room,
)
curve_factor = bpy.props.FloatProperty(
curve_factor = FloatProperty(
name='Factor',
min=-5, max=5,
default=1, precision=1,
description='Curvature variation',
update=update_room,
)
curve_arc_deg = bpy.props.FloatProperty(
curve_arc_deg = FloatProperty(
name='Degrees', min=1, max=359,
default=180, precision=1,
description='Degrees of the curve arc (must be >= steps)',
update=update_room,
)
curve_steps = bpy.props.IntProperty(
curve_steps = IntProperty(
name='Steps',
min=2, max=50,
default=12,
@ -874,19 +875,19 @@ class WallProperties(bpy.types.PropertyGroup):
update=update_room,
)
m = bpy.props.FloatProperty(
m = FloatProperty(
name='Peak', min=0, max=50,
default=0, precision=3,
description='Middle height variation',
update=update_room,
)
f = bpy.props.FloatProperty(
f = FloatProperty(
name='Factor', min=-1, max=1,
default=0, precision=3,
description='Middle displacement',
update=update_room,
)
r = bpy.props.FloatProperty(
r = FloatProperty(
name='Angle',
min=-180, max=180,
default=0, precision=1,
@ -894,7 +895,7 @@ class WallProperties(bpy.types.PropertyGroup):
update=update_room,
)
h = bpy.props.EnumProperty(
h = EnumProperty(
items=(
('0', "Visible", ""),
('1', "Baseboard", ""),
@ -907,12 +908,12 @@ class WallProperties(bpy.types.PropertyGroup):
)
# opengl internal data
glpoint_a = bpy.props.FloatVectorProperty(
glpoint_a = FloatVectorProperty(
name="glpointa",
description="Hidden property for opengl",
default=(0, 0, 0),
)
glpoint_b = bpy.props.FloatVectorProperty(
glpoint_b = FloatVectorProperty(
name="glpointb",
description="Hidden property for opengl",
default=(0, 0, 0),
@ -1167,13 +1168,13 @@ def add_shell(selobject, objname, rp):
# pf: Comparision face +/-
# ---------------------------------------------------------
def project_point(idx, point, normals, m, pf):
v1 = mathutils.Vector(normals[idx])
v1 = Vector(normals[idx])
if idx + pf >= len(normals):
vf = v1
elif idx + pf < 0:
vf = v1
else:
v2 = mathutils.Vector(normals[idx + pf])
v2 = Vector(normals[idx + pf])
if v1 != v2:
vf = v1 + v2
vf.normalize() # must be length equal to 1
@ -1496,98 +1497,98 @@ def is_in_nextface(idx, activefaces, verts, x, y):
# ------------------------------------------------------------------
# Define property group class to create or modify a rooms.
# ------------------------------------------------------------------
class RoomProperties(bpy.types.PropertyGroup):
room_height = bpy.props.FloatProperty(
class RoomProperties(PropertyGroup):
room_height = FloatProperty(
name='Height', min=0.001, max=50,
default=2.4, precision=3,
description='Room height', update=update_room,
)
wall_width = bpy.props.FloatProperty(
wall_width = FloatProperty(
name='Thickness', min=0.000, max=10,
default=0.0, precision=3,
description='Thickness of the walls', update=update_room,
)
inverse = bpy.props.BoolProperty(
inverse = BoolProperty(
name="Inverse", description="Inverse normals to outside",
default=False,
update=update_room,
)
crt_mat = bpy.props.BoolProperty(
crt_mat = BoolProperty(
name="Create default Cycles materials",
description="Create default materials for Cycles render",
default=True,
update=update_room,
)
wall_num = bpy.props.IntProperty(
wall_num = IntProperty(
name='Number of Walls', min=1, max=50,
default=1,
description='Number total of walls in the room', update=add_room_wall,
)
baseboard = bpy.props.BoolProperty(
baseboard = BoolProperty(
name="Baseboard", description="Create a baseboard automatically",
default=True,
update=update_room,
)
base_width = bpy.props.FloatProperty(
base_width = FloatProperty(
name='Width', min=0.001, max=10,
default=0.015, precision=3,
description='Baseboard width', update=update_room,
)
base_height = bpy.props.FloatProperty(
base_height = FloatProperty(
name='Height', min=0.05, max=20,
default=0.12, precision=3,
description='Baseboard height', update=update_room,
)
ceiling = bpy.props.BoolProperty(
ceiling = BoolProperty(
name="Ceiling", description="Create a ceiling",
default=False, update=update_room,
)
floor = bpy.props.BoolProperty(
floor = BoolProperty(
name="Floor", description="Create a floor automatically",
default=False,
update=update_room,
)
merge = bpy.props.BoolProperty(
merge = BoolProperty(
name="Close walls", description="Close walls to create a full closed room",
default=False, update=update_room,
)
walls = bpy.props.CollectionProperty(
walls = CollectionProperty(
type=WallProperties,
)
shell = bpy.props.BoolProperty(
shell = BoolProperty(
name="Wall cover", description="Create a cover of boards",
default=False, update=update_room,
)
shell_thick = bpy.props.FloatProperty(
shell_thick = FloatProperty(
name='Thickness', min=0.001, max=1,
default=0.025, precision=3,
description='Cover board thickness', update=update_room,
)
shell_height = bpy.props.FloatProperty(
shell_height = FloatProperty(
name='Height', min=0.05, max=1,
default=0.20, precision=3,
description='Cover board height', update=update_room,
)
shell_factor = bpy.props.FloatProperty(
shell_factor = FloatProperty(
name='Top', min=0.1, max=1,
default=1, precision=1,
description='Percentage for top covering (1 Full)', update=update_room,
)
shell_bfactor = bpy.props.FloatProperty(
shell_bfactor = FloatProperty(
name='Bottom', min=0.1, max=1,
default=1, precision=1,
description='Percentage for bottom covering (1 Full)', update=update_room,
)
bpy.utils.register_class(RoomProperties)
bpy.types.Object.RoomGenerator = bpy.props.CollectionProperty(type=RoomProperties)
Object.RoomGenerator = CollectionProperty(type=RoomProperties)
# -----------------------------------------------------
@ -1620,7 +1621,7 @@ def add_wall(idx, box, wall):
# ------------------------------------------------------------------
# Define panel class to modify rooms.
# ------------------------------------------------------------------
class AchmRoomGeneratorPanel(bpy.types.Panel):
class AchmRoomGeneratorPanel(Panel):
bl_idname = "OBJECT_PT_room_generator"
bl_label = "Room"
bl_space_type = 'VIEW_3D'

View File

@ -24,42 +24,44 @@
#
# ----------------------------------------------------------
import bpy
import copy
from copy import copy
from bpy.types import Operator, PropertyGroup
from bpy.props import FloatProperty, BoolProperty, IntProperty, CollectionProperty, EnumProperty
from .achm_tools import *
# ------------------------------------------------------------------
# Define property group class for shelves properties
# ------------------------------------------------------------------
class ShelvesProperties(bpy.types.PropertyGroup):
sX = bpy.props.FloatProperty(name='width', min=0.001, max=10, default=1,
precision=3, description='Furniture width')
wY = bpy.props.FloatProperty(name='', min=-10, max=10, default=0, precision=3, description='Modify y size')
wZ = bpy.props.FloatProperty(name='', min=-10, max=10, default=0, precision=3, description='Modify z size')
class ShelvesProperties(PropertyGroup):
sX = FloatProperty(name='width', min=0.001, max=10, default=1,
precision=3, description='Furniture width')
wY = FloatProperty(name='', min=-10, max=10, default=0, precision=3, description='Modify y size')
wZ = FloatProperty(name='', min=-10, max=10, default=0, precision=3, description='Modify z size')
# Cabinet position shift
pX = bpy.props.FloatProperty(name='', min=0, max=10, default=0, precision=3, description='Position x shift')
pY = bpy.props.FloatProperty(name='', min=-10, max=10, default=0, precision=3, description='Position y shift')
pZ = bpy.props.FloatProperty(name='', min=-10, max=10, default=0, precision=3, description='Position z shift')
pX = FloatProperty(name='', min=0, max=10, default=0, precision=3, description='Position x shift')
pY = FloatProperty(name='', min=-10, max=10, default=0, precision=3, description='Position y shift')
pZ = FloatProperty(name='', min=-10, max=10, default=0, precision=3, description='Position z shift')
# Shelves
sNum = bpy.props.IntProperty(name='Shelves', min=0, max=12, default=6, description='Number total of shelves')
sNum = IntProperty(name='Shelves', min=0, max=12, default=6, description='Number total of shelves')
# 12 shelves (shelf)
Z01 = bpy.props.FloatProperty(name='zS1', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z02 = bpy.props.FloatProperty(name='zS2', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z03 = bpy.props.FloatProperty(name='zS3', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z04 = bpy.props.FloatProperty(name='zS4', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z05 = bpy.props.FloatProperty(name='zS5', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z06 = bpy.props.FloatProperty(name='zS6', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z07 = bpy.props.FloatProperty(name='zS7', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z08 = bpy.props.FloatProperty(name='zS8', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z09 = bpy.props.FloatProperty(name='zS9', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z10 = bpy.props.FloatProperty(name='zS10', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z11 = bpy.props.FloatProperty(name='zS11', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z12 = bpy.props.FloatProperty(name='zS12', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z01 = FloatProperty(name='zS1', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z02 = FloatProperty(name='zS2', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z03 = FloatProperty(name='zS3', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z04 = FloatProperty(name='zS4', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z05 = FloatProperty(name='zS5', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z06 = FloatProperty(name='zS6', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z07 = FloatProperty(name='zS7', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z08 = FloatProperty(name='zS8', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z09 = FloatProperty(name='zS9', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z10 = FloatProperty(name='zS10', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z11 = FloatProperty(name='zS11', min=-10, max=10, default=0, precision=3, description='Position z shift')
Z12 = FloatProperty(name='zS12', min=-10, max=10, default=0, precision=3, description='Position z shift')
right = bpy.props.BoolProperty(name="Right", description="Create right side", default=True)
left = bpy.props.BoolProperty(name="Left", description="Create left side", default=True)
right = BoolProperty(name="Right", description="Create right side", default=True)
left = BoolProperty(name="Left", description="Create left side", default=True)
bpy.utils.register_class(ShelvesProperties)
@ -68,44 +70,44 @@ bpy.utils.register_class(ShelvesProperties)
# Define UI class
# Shelves
# ------------------------------------------------------------------
class AchmShelves(bpy.types.Operator):
class AchmShelves(Operator):
bl_idname = "mesh.archimesh_shelves"
bl_label = "Shelves"
bl_description = "Shelves Generator"
bl_category = 'Archimesh'
bl_options = {'REGISTER', 'UNDO'}
thickness = bpy.props.FloatProperty(
thickness = FloatProperty(
name='Side Thickness', min=0.001, max=5,
default=0.03, precision=3,
description='Board thickness',
)
sthickness = bpy.props.FloatProperty(
sthickness = FloatProperty(
name='Shelves Thickness', min=0.001, max=5,
default=0.03, precision=3,
description='Board thickness',
)
depth = bpy.props.FloatProperty(
depth = FloatProperty(
name='Depth', min=0.001, max=50,
default=0.28, precision=3,
description='Default unit depth',
)
height = bpy.props.FloatProperty(
height = FloatProperty(
name='Height', min=0.001, max=50,
default=2, precision=3,
description='Default unit height',
)
top = bpy.props.FloatProperty(
top = FloatProperty(
name='Top', min=0, max=50,
default=0.03, precision=3,
description='Default top shelf position',
)
bottom = bpy.props.FloatProperty(
bottom = FloatProperty(
name='Bottom', min=0, max=50,
default=0.07, precision=3,
description='Default bottom self position',
)
stype = bpy.props.EnumProperty(
stype = EnumProperty(
items=(
('1', "Full side", ""),
('4', "4 Legs", ""),
@ -114,22 +116,22 @@ class AchmShelves(bpy.types.Operator):
description="Type of side construction",
)
fitZ = bpy.props.BoolProperty(
fitZ = BoolProperty(
name="Floor origin in Z=0",
description="Use Z=0 axis as vertical origin floor position",
default=True,
)
shelves_num = bpy.props.IntProperty(
shelves_num = IntProperty(
name='Number of Units',
min=1, max=10,
default=1,
description='Number total of shelves units',
)
shelves = bpy.props.CollectionProperty(type=ShelvesProperties)
shelves = CollectionProperty(type=ShelvesProperties)
# Materials
crt_mat = bpy.props.BoolProperty(
crt_mat = BoolProperty(
name="Create default Cycles materials",
description="Create default materials for Cycles render",
default=True,
@ -275,7 +277,7 @@ def generate_shelves(self):
boxes = []
location = bpy.context.scene.cursor_location
myloc = copy.copy(location) # copy location to keep 3D cursor position
myloc = copy(location) # copy location to keep 3D cursor position
# Fit to floor
if self.fitZ:
myloc[2] = 0

View File

@ -25,7 +25,9 @@
# ----------------------------------------------------------
# noinspection PyUnresolvedReferences
import bpy
import math
from math import radians, sin, cos
from bpy.types import Operator
from bpy.props import FloatProperty, BoolProperty, IntProperty, EnumProperty
from .achm_tools import *
@ -33,7 +35,7 @@ from .achm_tools import *
# Define UI class
# Stairs
# ------------------------------------------------------------------
class AchmStairs(bpy.types.Operator):
class AchmStairs(Operator):
bl_idname = "mesh.archimesh_stairs"
bl_label = "Stairs"
bl_description = "Stairs Generator"
@ -41,7 +43,7 @@ class AchmStairs(bpy.types.Operator):
bl_options = {'REGISTER', 'UNDO'}
# Define properties
model = bpy.props.EnumProperty(
model = EnumProperty(
items=(
('1', "Rectangular", ""),
('2', "Rounded", ""),
@ -49,85 +51,85 @@ class AchmStairs(bpy.types.Operator):
name="Model",
description="Type of steps",
)
radio = bpy.props.FloatProperty(
radio = FloatProperty(
name='',
min=0.001, max=0.500,
default=0.20, precision=3,
description='Radius factor for rounded',
)
curve = bpy.props.BoolProperty(
curve = BoolProperty(
name="Include deformation handles",
description="Include a curve to modify the stairs curve",
default=False,
)
step_num = bpy.props.IntProperty(
step_num = IntProperty(
name='Number of steps',
min=1, max=1000,
default=3,
description='Number total of steps',
)
max_width = bpy.props.FloatProperty(
max_width = FloatProperty(
name='Width',
min=0.001, max=10,
default=1, precision=3,
description='Step maximum width',
)
depth = bpy.props.FloatProperty(
depth = FloatProperty(
name='Depth',
min=0.001, max=10,
default=0.30, precision=3,
description='Depth of the step',
)
shift = bpy.props.FloatProperty(
shift = FloatProperty(
name='Shift',
min=0.001, max=1,
default=1, precision=3,
description='Step shift in Y axis',
)
thickness = bpy.props.FloatProperty(
thickness = FloatProperty(
name='Thickness',
min=0.001, max=10,
default=0.03, precision=3,
description='Step thickness',
)
sizev = bpy.props.BoolProperty(
sizev = BoolProperty(
name="Variable width",
description="Steps are not equal in width",
default=False,
)
back = bpy.props.BoolProperty(
back = BoolProperty(
name="Close sides",
description="Close all steps side to make a solid structure",
default=False,
)
min_width = bpy.props.FloatProperty(
min_width = FloatProperty(
name='',
min=0.001, max=10,
default=1, precision=3,
description='Step minimum width',
)
height = bpy.props.FloatProperty(
height = FloatProperty(
name='height',
min=0.001, max=10,
default=0.14, precision=3,
description='Step height',
)
front_gap = bpy.props.FloatProperty(
front_gap = FloatProperty(
name='Front',
min=0, max=10,
default=0.03,
precision=3,
description='Front gap',
)
side_gap = bpy.props.FloatProperty(
side_gap = FloatProperty(
name='Side',
min=0, max=10,
default=0, precision=3,
description='Side gap',
)
crt_mat = bpy.props.BoolProperty(
crt_mat = BoolProperty(
name="Create default Cycles materials",
description="Create default materials for Cycles render",
default=True,
@ -335,8 +337,8 @@ def create_round_step(self, origin, myvertex, myfaces, index, step):
z = origin[2]
pos_x = None
i = index
li = [math.radians(270), math.radians(288), math.radians(306), math.radians(324), math.radians(342),
math.radians(0)]
li = [radians(270), radians(288), radians(306), radians(324), radians(342),
radians(0)]
max_width = self.max_width
max_depth = y + self.depth
@ -358,8 +360,8 @@ def create_round_step(self, origin, myvertex, myfaces, index, step):
myvertex.extend([(x, y, z), (x, y, z + self.height)])
# Round
for e in li:
pos_x = (math.cos(e) * myradio) + x + width - myradio
pos_y = (math.sin(e) * myradio) + y + myradio
pos_x = (cos(e) * myradio) + x + width - myradio
pos_y = (sin(e) * myradio) + y + myradio
myvertex.extend([(pos_x, pos_y, z), (pos_x, pos_y, z + self.height)])
@ -382,8 +384,8 @@ def create_round_step(self, origin, myvertex, myfaces, index, step):
myvertex.extend([(x, y - self.front_gap, z), (x, y - self.front_gap, z + self.thickness)])
# Round
for e in li:
pos_x = (math.cos(e) * myradio) + x + width - myradio
pos_y = (math.sin(e) * myradio) + y + myradio - self.front_gap
pos_x = (cos(e) * myradio) + x + width - myradio
pos_y = (sin(e) * myradio) + y + myradio - self.front_gap
myvertex.extend([(pos_x, pos_y, z), (pos_x, pos_y, z + self.thickness)])
@ -416,7 +418,7 @@ def create_bezier(objname, points, origin):
myobject = bpy.data.objects.new(objname, curvedata)
myobject.location = origin
myobject.rotation_euler[2] = math.radians(90)
myobject.rotation_euler[2] = radians(90)
bpy.context.scene.objects.link(myobject)

View File

@ -25,7 +25,7 @@
# ----------------------------------------------------------
# noinspection PyUnresolvedReferences
import bpy
import os
from os import path
# --------------------------------------------------------------------
@ -857,7 +857,7 @@ def create_fabric_material(matname, replace, r, g, b, rv=0.8, gv=0.636, bv=0.315
# ===========================================================================
# Load image file.
realpath = os.path.join(os.path.dirname(__file__), "images", "fabric_diffuse.png")
realpath = path.join(path.dirname(__file__), "images", "fabric_diffuse.png")
print("Loading: " + realpath)
try:
img = bpy.data.images.load(realpath)

View File

@ -24,16 +24,17 @@
# ----------------------------------------------------------
# noinspection PyUnresolvedReferences
import bpy
import math
from math import atan, sin, cos, radians
# noinspection PyUnresolvedReferences
from bpy.props import *
from bpy.types import Operator, PropertyGroup, Object, Panel
from bpy.props import FloatProperty, BoolProperty, IntProperty, FloatVectorProperty, CollectionProperty
from .achm_tools import *
# ------------------------------------------------------------------
# Define operator class to create object
# ------------------------------------------------------------------
class AchmVenetian(bpy.types.Operator):
class AchmVenetian(Operator):
bl_idname = "mesh.archimesh_venetian"
bl_label = "Venetian blind"
bl_description = "Venetian"
@ -209,7 +210,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False):
# Strings (Front)
# ------------------------
myp = [((0, 0, margin), (0, 0, 0), (0, 0, 0)),
((0, 0, mypoints[len(mypoints) - 1] - 0.003 - math.sin(math.radians(angleused)) * mp.depth / 2), (0, 0, 0),
((0, 0, mypoints[len(mypoints) - 1] - 0.003 - sin(radians(angleused)) * mp.depth / 2), (0, 0, 0),
(0, 0, 0))]
mycurvelf = create_bezier("String.f.L", myp, (0, 0, 0), 0.001, 'FRONT')
@ -225,15 +226,15 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False):
sep = 0.148
mycurvelf.location.x = (mp.width / 2) - sep
mycurvelf.location.y = ((-mp.depth / 2) * math.cos(math.radians(mp.angle))) - 0.001
mycurvelf.location.y = ((-mp.depth / 2) * cos(radians(mp.angle))) - 0.001
mycurvelf.location.z = 0
mycurvecf.location.x = 0
mycurvecf.location.y = ((-mp.depth / 2) * math.cos(math.radians(mp.angle))) - 0.001
mycurvecf.location.y = ((-mp.depth / 2) * cos(radians(mp.angle))) - 0.001
mycurvecf.location.z = 0
mycurverf.location.x = -(mp.width / 2) + sep
mycurverf.location.y = ((-mp.depth / 2) * math.cos(math.radians(mp.angle))) - 0.001
mycurverf.location.y = ((-mp.depth / 2) * cos(radians(mp.angle))) - 0.001
mycurverf.location.z = 0
if mp.crt_mat:
@ -245,7 +246,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False):
# Strings (Back)
# ------------------------
myp = [((0, 0, margin), (0, 0, 0), (0, 0, 0)),
((0, 0, mypoints[len(mypoints) - 1] - 0.003 + math.sin(math.radians(angleused)) * mp.depth / 2),
((0, 0, mypoints[len(mypoints) - 1] - 0.003 + sin(radians(angleused)) * mp.depth / 2),
(0, 0, 0),
(0, 0, 0))]
@ -262,15 +263,15 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False):
sep = 0.148
mycurvelb.location.x = (mp.width / 2) - sep
mycurvelb.location.y = ((mp.depth / 2) * math.cos(math.radians(mp.angle))) + 0.001
mycurvelb.location.y = ((mp.depth / 2) * cos(radians(mp.angle))) + 0.001
mycurvelb.location.z = 0
mycurvecb.location.x = 0
mycurvecb.location.y = ((mp.depth / 2) * math.cos(math.radians(mp.angle))) + 0.001
mycurvecb.location.y = ((mp.depth / 2) * cos(radians(mp.angle))) + 0.001
mycurvecb.location.z = 0
mycurverb.location.x = -(mp.width / 2) + sep
mycurverb.location.y = ((mp.depth / 2) * math.cos(math.radians(mp.angle))) + 0.001
mycurverb.location.y = ((mp.depth / 2) * cos(radians(mp.angle))) + 0.001
mycurverb.location.z = 0
if mp.crt_mat:
@ -286,7 +287,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False):
mybase.location.x = 0
mybase.location.y = 0
mybase.location.z = mypoints[len(mypoints) - 1]
mybase.rotation_euler = (math.radians(angleused), 0, 0)
mybase.rotation_euler = (radians(angleused), 0, 0)
# materials
if mp.crt_mat:
@ -326,39 +327,39 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False):
# ------------------------------------------------------------------
# Define property group class to create or modify
# ------------------------------------------------------------------
class ObjectProperties(bpy.types.PropertyGroup):
width = bpy.props.FloatProperty(
class ObjectProperties(PropertyGroup):
width = FloatProperty(
name='Width',
min=0.30, max=4, default=1, precision=3,
description='Total width', update=update_object,
)
height = bpy.props.FloatProperty(
height = FloatProperty(
name='Height',
min=0.20, max=10, default=1.7, precision=3,
description='Total height',
update=update_object,
)
depth = bpy.props.FloatProperty(
depth = FloatProperty(
name='Slat depth', min=0.02, max=0.30, default=0.04,
precision=3,
description='Slat depth', update=update_object,
)
angle = bpy.props.FloatProperty(
angle = FloatProperty(
name='Angle', min=0, max=85, default=0, precision=1,
description='Angle of the slats', update=update_object,
)
ratio = bpy.props.IntProperty(
ratio = IntProperty(
name='Extend', min=0, max=100, default=100,
description='% of extension (100 full extend)', update=update_object,
)
# Materials
crt_mat = bpy.props.BoolProperty(
crt_mat = BoolProperty(
name="Create default Cycles materials",
description="Create default materials for Cycles render",
default=True, update=update_object,
)
objcol = bpy.props.FloatVectorProperty(
objcol = FloatVectorProperty(
name="Color",
description="Color for material",
default=(0.616, 0.435, 1.0, 1.0),
@ -369,13 +370,13 @@ class ObjectProperties(bpy.types.PropertyGroup):
# Register
bpy.utils.register_class(ObjectProperties)
bpy.types.Object.VenetianObjectGenerator = bpy.props.CollectionProperty(type=ObjectProperties)
Object.VenetianObjectGenerator = CollectionProperty(type=ObjectProperties)
# ------------------------------------------------------------------
# Define panel class to modify object
# ------------------------------------------------------------------
class AchmVenetianObjectgeneratorpanel(bpy.types.Panel):
class AchmVenetianObjectgeneratorpanel(Panel):
bl_idname = "OBJECT_PT_venetian_generator"
bl_label = "Venetian"
bl_space_type = 'VIEW_3D'
@ -508,7 +509,7 @@ def create_slat_mesh(objname, width, depth, height, angle, ratio):
posz -= gap
# Transition to horizontal
if angleused == angle / 2:
sinheight = math.sin(math.radians(angle / 2)) * depth / 2
sinheight = sin(radians(angle / 2)) * depth / 2
posz -= sinheight
mesh = bpy.data.meshes.new(objname)
@ -542,9 +543,9 @@ def get_slat_data(v, angle, width, depth, posz):
maxz = 0.0028
gap = 0.0025
radio = 0.00195
sinv = math.sin(math.atan(maxz / (maxy - gap)))
cos = math.cos(math.radians(angle))
sin = math.sin(math.radians(angle))
sinv = sin(atan(maxz / (maxy - gap)))
cos_value = cos(radians(angle))
sin_value = sin(radians(angle))
if width < 0.60:
sep = 0.06
@ -557,48 +558,48 @@ def get_slat_data(v, angle, width, depth, posz):
myvertex = []
myvertex.extend(
[(maxx - 0.0017, (miny + 0.00195) * cos, posz + (-maxz + (radio * sinv)) + ((miny + 0.00195) * sin)),
(maxx - 0.0017, (maxy - 0.00195) * cos, posz + (-maxz + (radio * sinv)) + ((maxy - 0.00195) * sin)),
(maxx - 0.0045, miny * cos, posz + -maxz + (miny * sin)),
(maxx - 0.0045, maxy * cos, posz + -maxz + (maxy * sin)),
(maxx, -gap * cos, posz + (-gap * sin)),
(maxx, gap * cos, posz + (gap * sin)),
(maxx - 0.0045, -gap * cos, posz + (-gap * sin)),
(maxx - 0.0045, gap * cos, posz + (gap * sin)),
(0.001172, miny * cos, posz + -maxz + (miny * sin)),
(0.001172, maxy * cos, posz + -maxz + (maxy * sin)),
(0.001172, -gap * cos, posz + (-gap * sin)),
(0.001172, gap * cos, posz + (gap * sin)),
(maxx - sep, miny * cos, posz + -maxz + (miny * sin)),
(maxx - sep, maxy * cos, posz + -maxz + (maxy * sin)),
(maxx - sep, -gap * cos, posz + (-gap * sin)),
(maxx - sep, gap * cos, posz + (gap * sin)),
(maxx - sep2, miny * cos, posz + -maxz + (miny * sin)),
(maxx - sep2, maxy * cos, posz + -maxz + (maxy * sin)),
(maxx - sep2, -gap * cos, posz + (-gap * sin)),
(maxx - sep2, gap * cos, posz + (gap * sin))])
[(maxx - 0.0017, (miny + 0.00195) * cos_value, posz + (-maxz + (radio * sinv)) + ((miny + 0.00195) * sin_value)),
(maxx - 0.0017, (maxy - 0.00195) * cos_value, posz + (-maxz + (radio * sinv)) + ((maxy - 0.00195) * sin_value)),
(maxx - 0.0045, miny * cos_value, posz + -maxz + (miny * sin_value)),
(maxx - 0.0045, maxy * cos_value, posz + -maxz + (maxy * sin_value)),
(maxx, -gap * cos_value, posz + (-gap * sin_value)),
(maxx, gap * cos_value, posz + (gap * sin_value)),
(maxx - 0.0045, -gap * cos_value, posz + (-gap * sin_value)),
(maxx - 0.0045, gap * cos_value, posz + (gap * sin_value)),
(0.001172, miny * cos_value, posz + -maxz + (miny * sin_value)),
(0.001172, maxy * cos_value, posz + -maxz + (maxy * sin_value)),
(0.001172, -gap * cos_value, posz + (-gap * sin_value)),
(0.001172, gap * cos_value, posz + (gap * sin_value)),
(maxx - sep, miny * cos_value, posz + -maxz + (miny * sin_value)),
(maxx - sep, maxy * cos_value, posz + -maxz + (maxy * sin_value)),
(maxx - sep, -gap * cos_value, posz + (-gap * sin_value)),
(maxx - sep, gap * cos_value, posz + (gap * sin_value)),
(maxx - sep2, miny * cos_value, posz + -maxz + (miny * sin_value)),
(maxx - sep2, maxy * cos_value, posz + -maxz + (maxy * sin_value)),
(maxx - sep2, -gap * cos_value, posz + (-gap * sin_value)),
(maxx - sep2, gap * cos_value, posz + (gap * sin_value))])
myvertex.extend(
[(-maxx + 0.0017, (miny + 0.00195) * cos, posz + (-maxz + (radio * sinv)) + ((miny + 0.00195) * sin)),
(-maxx + 0.0017, (maxy - 0.00195) * cos, posz + (-maxz + (radio * sinv)) + ((maxy - 0.00195) * sin)),
(-maxx + 0.0045, miny * cos, posz + -maxz + (miny * sin)),
(-maxx + 0.0045, maxy * cos, posz + -maxz + (maxy * sin)),
(-maxx, -gap * cos, posz + (-gap * sin)),
(-maxx, gap * cos, posz + (gap * sin)),
(-maxx + 0.0045, -gap * cos, posz + (-gap * sin)),
(-maxx + 0.0045, gap * cos, posz + (gap * sin)),
(-0.001172, miny * cos, posz + -maxz + (miny * sin)),
(-0.001172, maxy * cos, posz + -maxz + (maxy * sin)),
(-0.001172, -gap * cos, posz + (-gap * sin)),
(-0.001172, gap * cos, posz + (gap * sin)),
(-maxx + sep, miny * cos, posz + -maxz + (miny * sin)),
(-maxx + sep, maxy * cos, posz + -maxz + (maxy * sin)),
(-maxx + sep, -gap * cos, posz + (-gap * sin)),
(-maxx + sep, gap * cos, posz + (gap * sin)),
(-maxx + sep2, miny * cos, posz + -maxz + (miny * sin)),
(-maxx + sep2, maxy * cos, posz + -maxz + (maxy * sin)),
(-maxx + sep2, -gap * cos, posz + (-gap * sin)),
(-maxx + sep2, gap * cos, posz + (gap * sin))])
[(-maxx + 0.0017, (miny + 0.00195) * cos_value, posz + (-maxz + (radio * sinv)) + ((miny + 0.00195) * sin_value)),
(-maxx + 0.0017, (maxy - 0.00195) * cos_value, posz + (-maxz + (radio * sinv)) + ((maxy - 0.00195) * sin_value)),
(-maxx + 0.0045, miny * cos_value, posz + -maxz + (miny * sin_value)),
(-maxx + 0.0045, maxy * cos_value, posz + -maxz + (maxy * sin_value)),
(-maxx, -gap * cos_value, posz + (-gap * sin_value)),
(-maxx, gap * cos_value, posz + (gap * sin_value)),
(-maxx + 0.0045, -gap * cos_value, posz + (-gap * sin_value)),
(-maxx + 0.0045, gap * cos_value, posz + (gap * sin_value)),
(-0.001172, miny * cos_value, posz + -maxz + (miny * sin_value)),
(-0.001172, maxy * cos_value, posz + -maxz + (maxy * sin_value)),
(-0.001172, -gap * cos_value, posz + (-gap * sin_value)),
(-0.001172, gap * cos_value, posz + (gap * sin_value)),
(-maxx + sep, miny * cos_value, posz + -maxz + (miny * sin_value)),
(-maxx + sep, maxy * cos_value, posz + -maxz + (maxy * sin_value)),
(-maxx + sep, -gap * cos_value, posz + (-gap * sin_value)),
(-maxx + sep, gap * cos_value, posz + (gap * sin_value)),
(-maxx + sep2, miny * cos_value, posz + -maxz + (miny * sin_value)),
(-maxx + sep2, maxy * cos_value, posz + -maxz + (maxy * sin_value)),
(-maxx + sep2, -gap * cos_value, posz + (-gap * sin_value)),
(-maxx + sep2, gap * cos_value, posz + (gap * sin_value))])
# Faces
myfaces = [(v + 7, v + 5, v + 1, v + 3), (v + 19, v + 7, v + 3, v + 17), (v + 2, v + 0, v + 4, v + 6),

View File

@ -24,16 +24,17 @@
# ----------------------------------------------------------
# noinspection PyUnresolvedReferences
import bpy
import math
# noinspection PyUnresolvedReferences
from bpy.props import *
from math import pi, radians
from bpy.types import Operator, PropertyGroup, Object, Panel
from bpy.props import StringProperty, FloatProperty, BoolProperty, IntProperty, FloatVectorProperty, \
CollectionProperty, EnumProperty
from .achm_tools import *
# ------------------------------------------------------------------
# Define operator class to create object
# ------------------------------------------------------------------
class AchmWindows(bpy.types.Operator):
class AchmWindows(Operator):
bl_idname = "mesh.archimesh_window"
bl_label = "Rail Windows"
bl_description = "Rail Windows Generator"
@ -193,7 +194,7 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False):
parentobject(myempty, mainobject)
mainobject["archimesh.hole_enable"] = True
# Rotate Empty
myempty.rotation_euler.z = math.radians(mp.r)
myempty.rotation_euler.z = radians(mp.r)
# Create control box to open wall holes
gap = 0.002
y = 0
@ -239,41 +240,41 @@ def shape_mesh_and_create_children(mainobject, tmp_mesh, update=False):
# ------------------------------------------------------------------
# Define property group class to create or modify
# ------------------------------------------------------------------
class ObjectProperties(bpy.types.PropertyGroup):
width = bpy.props.FloatProperty(
class ObjectProperties(PropertyGroup):
width = FloatProperty(
name='Width',
min=0.20, max=50,
default=1.20, precision=3,
description='window width',
update=update_object,
)
depth = bpy.props.FloatProperty(
depth = FloatProperty(
name='Depth',
min=0.07, max=1,
default=0.10, precision=3,
description='window depth',
update=update_object,
)
height = bpy.props.FloatProperty(
height = FloatProperty(
name='Height',
min=0.20, max=50,
default=1, precision=3,
description='window height',
update=update_object,
)
r = bpy.props.FloatProperty(
r = FloatProperty(
name='Rotation', min=0, max=360, default=0, precision=1,
description='Window rotation',
update=update_object,
)
external = bpy.props.BoolProperty(
external = BoolProperty(
name="External frame",
description="Create an external front frame",
default=True,
update=update_object,
)
frame = bpy.props.FloatProperty(
frame = FloatProperty(
name='External Frame',
min=0.001, max=1,
default=0.01, precision=3,
@ -281,21 +282,21 @@ class ObjectProperties(bpy.types.PropertyGroup):
update=update_object,
)
frame_L = bpy.props.FloatProperty(
frame_L = FloatProperty(
name='Frame',
min=0.02, max=1,
default=0.06, precision=3,
description='Frame size',
update=update_object,
)
wf = bpy.props.FloatProperty(
wf = FloatProperty(
name='WinFrame',
min=0.001, max=1,
default=0.05, precision=3,
description='Window Frame size',
update=update_object,
)
leafratio = bpy.props.FloatProperty(
leafratio = FloatProperty(
name='Leaf ratio',
min=0.001, max=0.999,
default=0.50,
@ -303,7 +304,7 @@ class ObjectProperties(bpy.types.PropertyGroup):
description='Leaf thickness ratio',
update=update_object,
)
opentype = bpy.props.EnumProperty(
opentype = EnumProperty(
items=(
('1', "Rail window", ""),
('2', "Two leaf", ""),
@ -313,34 +314,34 @@ class ObjectProperties(bpy.types.PropertyGroup):
description="Defines type of window",
update=update_object,
)
handle = bpy.props.BoolProperty(
handle = BoolProperty(
name="Create handles",
description="Create default handle to the leaf",
default=True,
update=update_object,
)
sill = bpy.props.BoolProperty(
sill = BoolProperty(
name="Sill",
description="Add sill to window",
default=True,
update=update_object,
)
sill_thickness = bpy.props.FloatProperty(
sill_thickness = FloatProperty(
name='Thickness',
min=0, max=50,
default=0.01, precision=3,
description='Sill thickness',
update=update_object,
)
sill_back = bpy.props.FloatProperty(
sill_back = FloatProperty(
name='Back',
min=0, max=10,
default=0.0, precision=3,
description='Extrusion in back side',
update=update_object,
)
sill_front = bpy.props.FloatProperty(
sill_front = FloatProperty(
name='Front',
min=0, max=10,
default=0.12, precision=3,
@ -348,39 +349,39 @@ class ObjectProperties(bpy.types.PropertyGroup):
update=update_object,
)
blind = bpy.props.BoolProperty(
blind = BoolProperty(
name="Blind",
description="Create an external blind",
default=False,
update=update_object,
)
blind_box = bpy.props.BoolProperty(
blind_box = BoolProperty(
name="Blind box", description="Create a box over frame for blind",
default=True,
update=update_object,
)
blind_height = bpy.props.FloatProperty(
blind_height = FloatProperty(
name='Height',
min=0.001, max=10,
default=0.12, precision=3,
description='Blind box height',
update=update_object,
)
blind_back = bpy.props.FloatProperty(
blind_back = FloatProperty(
name='Back',
min=0.001, max=10,
default=0.002, precision=3,
description='Extrusion in back side',
update=update_object,
)
blind_rail = bpy.props.FloatProperty(
blind_rail = FloatProperty(
name='Separation',
min=0.001, max=10,
default=0.10, precision=3,
description='Separation from frame',
update=update_object,
)
blind_ratio = bpy.props.IntProperty(
blind_ratio = IntProperty(
name='Extend',
min=0, max=100,
default=20,
@ -389,24 +390,24 @@ class ObjectProperties(bpy.types.PropertyGroup):
)
# Materials
crt_mat = bpy.props.BoolProperty(
crt_mat = BoolProperty(
name="Create default Cycles materials",
description="Create default materials for Cycles render",
default=True,
update=update_object,
)
# opengl internal data
glpoint_a = bpy.props.FloatVectorProperty(
glpoint_a = FloatVectorProperty(
name="glpointa",
description="Hidden property for opengl",
default=(0, 0, 0),
)
glpoint_b = bpy.props.FloatVectorProperty(
glpoint_b = FloatVectorProperty(
name="glpointb",
description="Hidden property for opengl",
default=(0, 0, 0),
)
glpoint_c = bpy.props.FloatVectorProperty(
glpoint_c = FloatVectorProperty(
name="glpointc",
description="Hidden property for opengl",
default=(0, 0, 0),
@ -414,13 +415,13 @@ class ObjectProperties(bpy.types.PropertyGroup):
# Register
bpy.utils.register_class(ObjectProperties)
bpy.types.Object.WindowObjectGenerator = bpy.props.CollectionProperty(type=ObjectProperties)
Object.WindowObjectGenerator = CollectionProperty(type=ObjectProperties)
# ------------------------------------------------------------------
# Define panel class to modify object
# ------------------------------------------------------------------
class AchmWindowObjectgeneratorpanel(bpy.types.Panel):
class AchmWindowObjectgeneratorpanel(Panel):
bl_idname = "OBJECT_PT_window_generator"
bl_label = "Window Rail"
bl_space_type = 'VIEW_3D'
@ -1317,7 +1318,7 @@ def create_leaf_window_leaf(objname, hand, sx, sy, sz, f, px, py, pz, mat, matda
if handle:
myhandle = create_leaf_handle("Handle", mat)
if hand == "L":
myhandle.rotation_euler = (0, math.pi, 0)
myhandle.rotation_euler = (0, pi, 0)
myhandle.parent = mywindow
if hand == "R":

View File

@ -28,9 +28,11 @@
# ----------------------------------------------------------
# noinspection PyUnresolvedReferences
import bpy
import math
# noinspection PyUnresolvedReferences
import mathutils
from math import cos, sin, radians, sqrt, pi
from mathutils import Vector
from bpy.types import Operator, PropertyGroup, Object, Panel
from bpy.props import StringProperty, FloatProperty, BoolProperty, IntProperty, FloatVectorProperty, \
CollectionProperty, EnumProperty
from .achm_tools import *
@ -194,7 +196,7 @@ def set_defaults(s):
# ------------------------------------------------------------------
# Define operator class to create window panels
# ------------------------------------------------------------------
class AchmWinPanel(bpy.types.Operator):
class AchmWinPanel(Operator):
bl_idname = "mesh.archimesh_winpanel"
bl_label = "Panel Window"
bl_description = "Generate editable flat windows"
@ -380,7 +382,7 @@ def do_ctrl_box(myobject):
parentobject(myempty, myobject)
myobject["archimesh.hole_enable"] = True
# Rotate Empty
myempty.rotation_euler.z = math.radians(op.r)
myempty.rotation_euler.z = radians(op.r)
# Create control box to open wall holes
myctrl = create_ctrl_box(myobject, "CTRL_Hole")
@ -679,16 +681,16 @@ def generate_vertex_data(op, myvertex, myfaces):
if h1 < 0.07:
h1 = 0.07
h = math.sqrt(u ** 2 + h1 ** 2) / 2
h = sqrt(u ** 2 + h1 ** 2) / 2
e = h * (u / h1)
c = math.sqrt(h ** 2 + e ** 2)
c = sqrt(h ** 2 + e ** 2)
t1 = zlist[-1] - h1
elif op.DT2 == '2':
c = op.VL2 / 100
if c < u + 0.01:
c = u + 0.01
# op.VL2 = c * 100
t1 = math.sqrt(c ** 2 - u ** 2) + zlist[-1] - c
t1 = sqrt(c ** 2 - u ** 2) + zlist[-1] - c
r = c - k1
z = zlist[-1] - c
@ -697,15 +699,15 @@ def generate_vertex_data(op, myvertex, myfaces):
myvertex[son[0]][2] = t1
myvertex[son[1]][2] = t1
for i in alt:
myvertex[i][2] = math.sqrt(r ** 2 - myvertex[i][0] ** 2) + z
myvertex[i][2] = sqrt(r ** 2 - myvertex[i][0] ** 2) + z
on = [son[0]]
u1 = []
for i in range(0, res):
a = i * math.pi / res
x = math.cos(a) * c
a = i * pi / res
x = cos(a) * c
if -u < x < u:
myvertex.append([x, -k1 / 2, math.sin(a) * c + z])
myvertex.append([x, -k1 / 2, sin(a) * c + z])
on.append(len(myvertex) - 1)
u1.extend(on)
u1.append(ust[0])
@ -721,10 +723,10 @@ def generate_vertex_data(op, myvertex, myfaces):
t1 = [alt[i + 0]]
t2 = [alt[i + 1]]
for j in range(0, res):
a = j * math.pi / res
x = -math.cos(a) * r
a = j * pi / res
x = -cos(a) * r
if x1 < x < x2:
myvertex.extend([[x, -k1 / 2, math.sin(a) * r + z], [x, k1 / 2, math.sin(a) * r + z]])
myvertex.extend([[x, -k1 / 2, sin(a) * r + z], [x, k1 / 2, sin(a) * r + z]])
on.append(len(myvertex) - 2)
ar.append(len(myvertex) - 1)
t1.append(len(myvertex) - 2)
@ -738,10 +740,10 @@ def generate_vertex_data(op, myvertex, myfaces):
ar.append(son[1])
u2 = [son[1]]
for i in range(0, res):
a = i * math.pi / res
x = math.cos(a) * c
a = i * pi / res
x = cos(a) * c
if -u < x < u:
myvertex.append([x, k1 / 2, math.sin(a) * c + z])
myvertex.append([x, k1 / 2, sin(a) * c + z])
ar.append(len(myvertex) - 1)
u2.append(len(myvertex) - 1)
ar.append(ust[1])
@ -790,31 +792,31 @@ def generate_vertex_data(op, myvertex, myfaces):
[[n - 8, n - 7, n - 3, n - 4], [n - 7, n - 6, n - 2, n - 3], [n - 6, n - 5, n - 1, n - 2],
[n - 5, n - 8, n - 4, n - 1]])
alt = [n - 16, n - 15, n - 14, n - 13, n - 4, n - 3, n - 2, n - 1]
myvertex[alt[0]][2] = math.sqrt(r ** 2 - myvertex[alt[0]][0] ** 2) + z
myvertex[alt[1]][2] = math.sqrt(k ** 2 - myvertex[alt[1]][0] ** 2) + z
myvertex[alt[2]][2] = math.sqrt(k ** 2 - myvertex[alt[2]][0] ** 2) + z
myvertex[alt[3]][2] = math.sqrt(r ** 2 - myvertex[alt[3]][0] ** 2) + z
myvertex[alt[4]][2] = math.sqrt(r ** 2 - myvertex[alt[4]][0] ** 2) + z
myvertex[alt[5]][2] = math.sqrt(k ** 2 - myvertex[alt[5]][0] ** 2) + z
myvertex[alt[6]][2] = math.sqrt(k ** 2 - myvertex[alt[6]][0] ** 2) + z
myvertex[alt[7]][2] = math.sqrt(r ** 2 - myvertex[alt[7]][0] ** 2) + z
myvertex[alt[0]][2] = sqrt(r ** 2 - myvertex[alt[0]][0] ** 2) + z
myvertex[alt[1]][2] = sqrt(k ** 2 - myvertex[alt[1]][0] ** 2) + z
myvertex[alt[2]][2] = sqrt(k ** 2 - myvertex[alt[2]][0] ** 2) + z
myvertex[alt[3]][2] = sqrt(r ** 2 - myvertex[alt[3]][0] ** 2) + z
myvertex[alt[4]][2] = sqrt(r ** 2 - myvertex[alt[4]][0] ** 2) + z
myvertex[alt[5]][2] = sqrt(k ** 2 - myvertex[alt[5]][0] ** 2) + z
myvertex[alt[6]][2] = sqrt(k ** 2 - myvertex[alt[6]][0] ** 2) + z
myvertex[alt[7]][2] = sqrt(r ** 2 - myvertex[alt[7]][0] ** 2) + z
d1 = []
d2 = []
t1 = []
t2 = []
for i in range(0, res):
a = i * math.pi / res
y1 = math.cos(a) * r
y2 = -math.cos(a) * k
a = i * pi / res
y1 = cos(a) * r
y2 = -cos(a) * k
if x1 < y1 < x2:
myvertex.extend([[y1, fr - k2 / 2, math.sin(a) * r + z], [y1, fr + k2 / 2,
math.sin(a) * r + z]])
myvertex.extend([[y1, fr - k2 / 2, sin(a) * r + z], [y1, fr + k2 / 2,
sin(a) * r + z]])
t1.append(len(myvertex) - 2)
t2.append(len(myvertex) - 1)
if x1 + k2 < y2 < x2 - k2:
myvertex.extend([[y2, fr - k2 / 2, math.sin(a) * k + z], [y2, fr + k2 / 2,
math.sin(a) * k + z]])
myvertex.extend([[y2, fr - k2 / 2, sin(a) * k + z], [y2, fr + k2 / 2,
sin(a) * k + z]])
d1.append(len(myvertex) - 2)
d2.append(len(myvertex) - 1)
on = [alt[1], alt[0]]
@ -887,29 +889,29 @@ def generate_vertex_data(op, myvertex, myfaces):
m = len(myfaces)
ftl.extend([m - 1, m - 2, m - 3, m - 4, m - 5, m - 6, m - 7, m - 8, m - 9])
alt = [n - 16, n - 15, n - 14, n - 13, n - 4, n - 3, n - 2, n - 1]
myvertex[alt[0]][2] = math.sqrt(r ** 2 - myvertex[alt[0]][0] ** 2) + z
myvertex[alt[1]][2] = math.sqrt(k ** 2 - myvertex[alt[1]][0] ** 2) + z
myvertex[alt[2]][2] = math.sqrt(k ** 2 - myvertex[alt[2]][0] ** 2) + z
myvertex[alt[3]][2] = math.sqrt(r ** 2 - myvertex[alt[3]][0] ** 2) + z
myvertex[alt[4]][2] = math.sqrt(r ** 2 - myvertex[alt[4]][0] ** 2) + z
myvertex[alt[5]][2] = math.sqrt(k ** 2 - myvertex[alt[5]][0] ** 2) + z
myvertex[alt[6]][2] = math.sqrt(k ** 2 - myvertex[alt[6]][0] ** 2) + z
myvertex[alt[7]][2] = math.sqrt(r ** 2 - myvertex[alt[7]][0] ** 2) + z
myvertex[alt[0]][2] = sqrt(r ** 2 - myvertex[alt[0]][0] ** 2) + z
myvertex[alt[1]][2] = sqrt(k ** 2 - myvertex[alt[1]][0] ** 2) + z
myvertex[alt[2]][2] = sqrt(k ** 2 - myvertex[alt[2]][0] ** 2) + z
myvertex[alt[3]][2] = sqrt(r ** 2 - myvertex[alt[3]][0] ** 2) + z
myvertex[alt[4]][2] = sqrt(r ** 2 - myvertex[alt[4]][0] ** 2) + z
myvertex[alt[5]][2] = sqrt(k ** 2 - myvertex[alt[5]][0] ** 2) + z
myvertex[alt[6]][2] = sqrt(k ** 2 - myvertex[alt[6]][0] ** 2) + z
myvertex[alt[7]][2] = sqrt(r ** 2 - myvertex[alt[7]][0] ** 2) + z
d1 = []
d2 = []
t1 = []
t2 = []
for i in range(0, res):
a = i * math.pi / res
y1 = math.cos(a) * r
y2 = -math.cos(a) * k
a = i * pi / res
y1 = cos(a) * r
y2 = -cos(a) * k
if x1 < y1 < x2:
myvertex.extend([[y1, fr - k3, math.sin(a) * r + z], [y1, fr + k3, math.sin(a) * r + z]])
myvertex.extend([[y1, fr - k3, sin(a) * r + z], [y1, fr + k3, sin(a) * r + z]])
t1.append(len(myvertex) - 2)
t2.append(len(myvertex) - 1)
ftl.extend([len(myfaces) - 1, len(myfaces) - 2])
if x1 + k3 * 2 < y2 < x2 - k3 * 2:
myvertex.extend([[y2, fr - k3, math.sin(a) * k + z], [y2, fr + k3, math.sin(a) * k + z]])
myvertex.extend([[y2, fr - k3, sin(a) * k + z], [y2, fr + k3, sin(a) * k + z]])
d1.append(len(myvertex) - 2)
d2.append(len(myvertex) - 1)
ftl.extend([len(myfaces) - 1, len(myfaces) - 2])
@ -944,21 +946,21 @@ def generate_vertex_data(op, myvertex, myfaces):
on = []
ar = []
for i in range(0, res):
a = i * math.pi / res
y1 = -math.cos(a) * k
a = i * pi / res
y1 = -cos(a) * k
if x1 < y1 < x2:
myvertex.extend([[y1, fr - 0.005, math.sin(a) * k + z], [y1, fr + 0.005, math.sin(a) * k + z]])
myvertex.extend([[y1, fr - 0.005, sin(a) * k + z], [y1, fr + 0.005, sin(a) * k + z]])
n = len(myvertex)
on.append(n - 1)
ar.append(n - 2)
myvertex.extend(
[[x1, fr - 0.005, math.sqrt(k ** 2 - x1 ** 2) + z], [x1, fr + 0.005,
math.sqrt(k ** 2 - x1 ** 2) + z]])
[[x1, fr - 0.005, sqrt(k ** 2 - x1 ** 2) + z], [x1, fr + 0.005,
sqrt(k ** 2 - x1 ** 2) + z]])
myvertex.extend([[x1, fr - 0.005, zlist[-3] + ek + k3 * 2], [x1, fr + 0.005, zlist[-3] + ek + k3 * 2]])
myvertex.extend([[x2, fr - 0.005, zlist[-3] + ek + k3 * 2], [x2, fr + 0.005, zlist[-3] + ek + k3 * 2]])
myvertex.extend(
[[x2, fr - 0.005, math.sqrt(k ** 2 - x2 ** 2) + z], [x2, fr + 0.005,
math.sqrt(k ** 2 - x2 ** 2) + z]])
[[x2, fr - 0.005, sqrt(k ** 2 - x2 ** 2) + z], [x2, fr + 0.005,
sqrt(k ** 2 - x2 ** 2) + z]])
n = len(myvertex)
on.extend([n - 1, n - 3, n - 5, n - 7])
ar.extend([n - 2, n - 4, n - 6, n - 8])
@ -974,10 +976,10 @@ def generate_vertex_data(op, myvertex, myfaces):
elif op.DT3 == '2':
h1 = op.VL3 / 100
elif op.DT3 == '3':
h1 = math.sin(op.VL4 * math.pi / 180) / math.cos(op.VL4 * math.pi / 180)
z = math.sqrt(k1 ** 2 + (k1 * h1) ** 2)
k = math.sqrt(k2 ** 2 + (k2 * h1) ** 2)
f = math.sqrt(k3 ** 2 + (k3 * h1) ** 2) * 2
h1 = sin(op.VL4 * pi / 180) / cos(op.VL4 * pi / 180)
z = sqrt(k1 ** 2 + (k1 * h1) ** 2)
k = sqrt(k2 ** 2 + (k2 * h1) ** 2)
f = sqrt(k3 ** 2 + (k3 * h1) ** 2) * 2
myvertex[ust[0]][2] = zlist[-1] + myvertex[ust[0]][0] * h1
myvertex[ust[1]][2] = zlist[-1] + myvertex[ust[1]][0] * h1
for i in alt:
@ -1048,10 +1050,10 @@ def generate_vertex_data(op, myvertex, myfaces):
elif op.DT3 == '2':
h1 = op.VL3 / 100
elif op.DT3 == '3':
h1 = math.sin(op.VL4 * math.pi / 180) / math.cos(op.VL4 * math.pi / 180)
z = math.sqrt(k1 ** 2 + (k1 * h1) ** 2)
k = math.sqrt(k2 ** 2 + (k2 * h1) ** 2)
f = math.sqrt(k3 ** 2 + (k3 * h1) ** 2) * 2
h1 = sin(op.VL4 * pi / 180) / cos(op.VL4 * pi / 180)
z = sqrt(k1 ** 2 + (k1 * h1) ** 2)
k = sqrt(k2 ** 2 + (k2 * h1) ** 2)
f = sqrt(k3 ** 2 + (k3 * h1) ** 2) * 2
myvertex[ust[0]][2] = zlist[-1] + myvertex[ust[0]][0] * h1
myvertex[ust[1]][2] = zlist[-1] + myvertex[ust[1]][0] * h1
for i in alt:
@ -1375,8 +1377,8 @@ class Cpoint:
# Get angle between two vectors
# ---------------------------------------------------------
def get_angle(p1, p2):
v1 = mathutils.Vector((p1[0], 0.0, p1[1]))
v2 = mathutils.Vector((p2[0], 0.0, p2[1]))
v1 = Vector((p1[0], 0.0, p1[1]))
v2 = Vector((p2[0], 0.0, p2[1]))
a = v1.angle(v2)
return a
@ -1407,7 +1409,7 @@ def get_circle_center(a, b, c):
center = Cpoint(s2.x + l * d2.x, s2.y + l * d2.y)
dx = center.x - a.x
dy = center.y - a.y
radio = math.sqrt(dx * dx + dy * dy)
radio = sqrt(dx * dx + dy * dy)
# angle
v1 = (a.x - center.x, a.y - center.y)
@ -1500,14 +1502,14 @@ def create_ctrl_box(parentobj, objname):
cz = center.y
sg = op.res
arc = ((math.pi / 2) + ang) - ((math.pi / 2) - ang)
arc = ((pi / 2) + ang) - ((pi / 2) - ang)
step = arc / sg
a = (math.pi / 2) + ang
a = (pi / 2) + ang
myvertex.extend([(lb, ypos, lt), (lb, -ypos, lt)])
for x in range(0, sg):
myvertex.extend([(r * math.cos(a), ypos, r * math.sin(a) + cz),
(r * math.cos(a), -ypos, r * math.sin(a) + cz)])
myvertex.extend([(r * cos(a), ypos, r * sin(a) + cz),
(r * cos(a), -ypos, r * sin(a) + cz)])
a -= step
# close sides
@ -1549,8 +1551,8 @@ def create_ctrl_box(parentobj, objname):
# ------------------------------------------------------------------
# Define property group class to create or modify
# ------------------------------------------------------------------
class GeneralPanelProperties(bpy.types.PropertyGroup):
prs = bpy.props.EnumProperty(
class GeneralPanelProperties(PropertyGroup):
prs = EnumProperty(
items=(
('1', "WINDOW 250X200", ""),
('2', "WINDOW 200X200", ""),
@ -1566,40 +1568,40 @@ class GeneralPanelProperties(bpy.types.PropertyGroup):
update=update_using_default,
)
son = prs
gen = bpy.props.IntProperty(
gen = IntProperty(
name='H Count', min=1, max=8, default=3,
description='Horizontal Panes',
update=update_window,
)
yuk = bpy.props.IntProperty(
yuk = IntProperty(
name='V Count', min=1, max=5, default=1,
description='Vertical Panes',
update=update_window,
)
kl1 = bpy.props.IntProperty(
kl1 = IntProperty(
name='Outer Frame', min=2, max=50, default=5,
description='Outside Frame Thickness',
update=update_window,
)
kl2 = bpy.props.IntProperty(
kl2 = IntProperty(
name='Risers', min=2, max=50, default=5,
description='Risers Width',
update=update_window,
)
fk = bpy.props.IntProperty(
fk = IntProperty(
name='Inner Frame', min=1, max=20, default=2,
description='Inside Frame Thickness',
update=update_window,
)
mr = bpy.props.BoolProperty(name='Sill', default=True, description='Window Sill', update=update_window)
mr1 = bpy.props.IntProperty(name='', min=1, max=20, default=4, description='Height', update=update_window)
mr2 = bpy.props.IntProperty(name='', min=0, max=20, default=4, description='First Depth', update=update_window)
mr3 = bpy.props.IntProperty(name='', min=1, max=50, default=20, description='Second Depth', update=update_window)
mr4 = bpy.props.IntProperty(name='', min=0, max=50, default=0, description='Extrusion for Jamb',
mr = BoolProperty(name='Sill', default=True, description='Window Sill', update=update_window)
mr1 = IntProperty(name='', min=1, max=20, default=4, description='Height', update=update_window)
mr2 = IntProperty(name='', min=0, max=20, default=4, description='First Depth', update=update_window)
mr3 = IntProperty(name='', min=1, max=50, default=20, description='Second Depth', update=update_window)
mr4 = IntProperty(name='', min=0, max=50, default=0, description='Extrusion for Jamb',
update=update_window)
mt1 = bpy.props.EnumProperty(
mt1 = EnumProperty(
items=(
('1', "PVC", ""),
('2', "WOOD", ""),
@ -1610,7 +1612,7 @@ class GeneralPanelProperties(bpy.types.PropertyGroup):
description='Material to use',
update=update_window,
)
mt2 = bpy.props.EnumProperty(
mt2 = EnumProperty(
items=(
('1', "PVC", ""),
('2', "WOOD", ""),
@ -1622,14 +1624,14 @@ class GeneralPanelProperties(bpy.types.PropertyGroup):
update=update_window,
)
r = bpy.props.FloatProperty(
r = FloatProperty(
name='Rotation',
min=0, max=360, default=0, precision=1,
description='Panel rotation',
update=update_window,
)
UST = bpy.props.EnumProperty(
UST = EnumProperty(
items=(
('1', "Flat", ""),
('2', "Arch", ""),
@ -1640,7 +1642,7 @@ class GeneralPanelProperties(bpy.types.PropertyGroup):
description='Type of window upper section',
update=update_window,
)
DT2 = bpy.props.EnumProperty(
DT2 = EnumProperty(
items=(
('1', "Difference", ""),
('2', "Radius", ""),
@ -1649,7 +1651,7 @@ class GeneralPanelProperties(bpy.types.PropertyGroup):
default='1',
update=update_window,
)
DT3 = bpy.props.EnumProperty(
DT3 = EnumProperty(
items=(
('1', "Difference", ""),
('2', "Incline %", ""),
@ -1659,102 +1661,102 @@ class GeneralPanelProperties(bpy.types.PropertyGroup):
default='1', update=update_window,
)
VL1 = bpy.props.IntProperty(name='', min=-10000, max=10000, default=30, update=update_window) # Fark
VL2 = bpy.props.IntProperty(name='', min=1, max=10000, default=30, update=update_window) # Cap
VL3 = bpy.props.IntProperty(name='', min=-100, max=100, default=30, update=update_window) # Egim %
VL4 = bpy.props.IntProperty(name='', min=-45, max=45, default=30, update=update_window) # Egim Aci
VL1 = IntProperty(name='', min=-10000, max=10000, default=30, update=update_window) # Fark
VL2 = IntProperty(name='', min=1, max=10000, default=30, update=update_window) # Cap
VL3 = IntProperty(name='', min=-100, max=100, default=30, update=update_window) # Egim %
VL4 = IntProperty(name='', min=-45, max=45, default=30, update=update_window) # Egim Aci
res = bpy.props.IntProperty(name='Resolution', min=2, max=360, default=36, update=update_window) # Res
res = IntProperty(name='Resolution', min=2, max=360, default=36, update=update_window) # Res
gnx0 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='1st Window Width',
gnx0 = IntProperty(name='', min=1, max=300, default=60, description='1st Window Width',
update=update_window)
gnx1 = bpy.props.IntProperty(name='', min=1, max=300, default=110, description='2nd Window Width',
gnx1 = IntProperty(name='', min=1, max=300, default=110, description='2nd Window Width',
update=update_window)
gnx2 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='3rd Window Width',
gnx2 = IntProperty(name='', min=1, max=300, default=60, description='3rd Window Width',
update=update_window)
gnx3 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='4th Window Width',
gnx3 = IntProperty(name='', min=1, max=300, default=60, description='4th Window Width',
update=update_window)
gnx4 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='5th Window Width',
gnx4 = IntProperty(name='', min=1, max=300, default=60, description='5th Window Width',
update=update_window)
gnx5 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='6th Window Width',
gnx5 = IntProperty(name='', min=1, max=300, default=60, description='6th Window Width',
update=update_window)
gnx6 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='7th Window Width',
gnx6 = IntProperty(name='', min=1, max=300, default=60, description='7th Window Width',
update=update_window)
gnx7 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='8th Window Width',
gnx7 = IntProperty(name='', min=1, max=300, default=60, description='8th Window Width',
update=update_window)
gny0 = bpy.props.IntProperty(name='', min=1, max=300, default=190, description='1st Row Height',
gny0 = IntProperty(name='', min=1, max=300, default=190, description='1st Row Height',
update=update_window)
gny1 = bpy.props.IntProperty(name='', min=1, max=300, default=45, description='2nd Row Height',
gny1 = IntProperty(name='', min=1, max=300, default=45, description='2nd Row Height',
update=update_window)
gny2 = bpy.props.IntProperty(name='', min=1, max=300, default=45, description='3rd Row Height',
gny2 = IntProperty(name='', min=1, max=300, default=45, description='3rd Row Height',
update=update_window)
gny3 = bpy.props.IntProperty(name='', min=1, max=300, default=45, description='4th Row Height',
gny3 = IntProperty(name='', min=1, max=300, default=45, description='4th Row Height',
update=update_window)
gny4 = bpy.props.IntProperty(name='', min=1, max=300, default=45, description='5th Row Height',
gny4 = IntProperty(name='', min=1, max=300, default=45, description='5th Row Height',
update=update_window)
k00 = bpy.props.BoolProperty(name='', default=True, update=update_window)
k01 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k02 = bpy.props.BoolProperty(name='', default=True, update=update_window)
k03 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k04 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k05 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k06 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k07 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k00 = BoolProperty(name='', default=True, update=update_window)
k01 = BoolProperty(name='', default=False, update=update_window)
k02 = BoolProperty(name='', default=True, update=update_window)
k03 = BoolProperty(name='', default=False, update=update_window)
k04 = BoolProperty(name='', default=False, update=update_window)
k05 = BoolProperty(name='', default=False, update=update_window)
k06 = BoolProperty(name='', default=False, update=update_window)
k07 = BoolProperty(name='', default=False, update=update_window)
k10 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k11 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k12 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k13 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k14 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k15 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k16 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k17 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k10 = BoolProperty(name='', default=False, update=update_window)
k11 = BoolProperty(name='', default=False, update=update_window)
k12 = BoolProperty(name='', default=False, update=update_window)
k13 = BoolProperty(name='', default=False, update=update_window)
k14 = BoolProperty(name='', default=False, update=update_window)
k15 = BoolProperty(name='', default=False, update=update_window)
k16 = BoolProperty(name='', default=False, update=update_window)
k17 = BoolProperty(name='', default=False, update=update_window)
k20 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k21 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k22 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k23 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k24 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k25 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k26 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k27 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k20 = BoolProperty(name='', default=False, update=update_window)
k21 = BoolProperty(name='', default=False, update=update_window)
k22 = BoolProperty(name='', default=False, update=update_window)
k23 = BoolProperty(name='', default=False, update=update_window)
k24 = BoolProperty(name='', default=False, update=update_window)
k25 = BoolProperty(name='', default=False, update=update_window)
k26 = BoolProperty(name='', default=False, update=update_window)
k27 = BoolProperty(name='', default=False, update=update_window)
k30 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k31 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k32 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k33 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k34 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k35 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k36 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k37 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k30 = BoolProperty(name='', default=False, update=update_window)
k31 = BoolProperty(name='', default=False, update=update_window)
k32 = BoolProperty(name='', default=False, update=update_window)
k33 = BoolProperty(name='', default=False, update=update_window)
k34 = BoolProperty(name='', default=False, update=update_window)
k35 = BoolProperty(name='', default=False, update=update_window)
k36 = BoolProperty(name='', default=False, update=update_window)
k37 = BoolProperty(name='', default=False, update=update_window)
k40 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k41 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k42 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k43 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k44 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k45 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k46 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k47 = bpy.props.BoolProperty(name='', default=False, update=update_window)
k40 = BoolProperty(name='', default=False, update=update_window)
k41 = BoolProperty(name='', default=False, update=update_window)
k42 = BoolProperty(name='', default=False, update=update_window)
k43 = BoolProperty(name='', default=False, update=update_window)
k44 = BoolProperty(name='', default=False, update=update_window)
k45 = BoolProperty(name='', default=False, update=update_window)
k46 = BoolProperty(name='', default=False, update=update_window)
k47 = BoolProperty(name='', default=False, update=update_window)
# opengl internal data
glpoint_a = bpy.props.FloatVectorProperty(
glpoint_a = FloatVectorProperty(
name="glpointa",
description="Hidden property for opengl",
default=(0, 0, 0),
)
glpoint_b = bpy.props.FloatVectorProperty(
glpoint_b = FloatVectorProperty(
name="glpointb",
description="Hidden property for opengl",
default=(0, 0, 0),
)
glpoint_c = bpy.props.FloatVectorProperty(
glpoint_c = FloatVectorProperty(
name="glpointc",
description="Hidden property for opengl",
default=(0, 0, 0),
)
glpoint_d = bpy.props.FloatVectorProperty(
glpoint_d = FloatVectorProperty(
name="glpointc",
description="Hidden property for opengl",
default=(0, 0, 0),
@ -1762,13 +1764,13 @@ class GeneralPanelProperties(bpy.types.PropertyGroup):
bpy.utils.register_class(GeneralPanelProperties)
bpy.types.Object.WindowPanelGenerator = bpy.props.CollectionProperty(type=GeneralPanelProperties)
Object.WindowPanelGenerator = CollectionProperty(type=GeneralPanelProperties)
# ------------------------------------------------------------------
# Define panel class to modify myobjects.
# ------------------------------------------------------------------
class AchmWindowEditPanel(bpy.types.Panel):
class AchmWindowEditPanel(Panel):
bl_idname = "window.edit_panel2"
bl_label = "Window Panel"
bl_space_type = 'VIEW_3D'