## GridLayout.py
Version 1.09
## Copyright (c) 2006
Bruce Vaughan, BV Detailing & Design, Inc.
## All rights
reserved.
## NOT FOR
############################################################################
"""
Read a text file containing grid and arc
information and layout the grid lines of a building as
construction lines
and circles. Version 1.08 and greater can read line, arc and circle data
from DXF files.
This script was orignally
intended to work in plan. ExplicitL' lines and 'ExplicitR' circles work
in any model
orientation, but will be created only in the current model orientation. This is
a
limitation of
This
script is compatible with GridSave.py.
For Construction Lines - 'Direction' = the
angle of the construction line
For Construction Circles - 'Circle' work
points are translated in 'Direction' from 'Origin'
'Origin' and 'Direction' must precede
'Circle' and offset dimensions
Text File Format:
# Comment Line
ExplicitL: 20-0,
20-0, 20-0 : 40-0, 40-0, 40-0
ExplicitA: 20-0,
20-0, 20-0 : 45
ExplicitR: 20-0,
20-0, 20-0 : 15-0
Origin:0.0,0.0
Direction: 45.0
Circle: 125-6 3/4, 66-9 7/
Circle: 125-6 3/4, 66-9 7/
Circle: 125-6 3/4, 66-9 7/
Origin:0.0,0.0
Direction:-90.0
41-5
42-8
......
Origin:0.0,0.0
Direction:0.0
1-11 1/2
1-0 1/2
.......
Origin has x and y components only
Direction should be between 180 and -180
degrees
If 'Direction' = 90 degrees, construction
lines are progressively added in the negative 'x' direction.
If 'Direction' = 0 degrees, construction
lines are progressively added in the positive 'y' direction.
Version History:
Version 1.00 (
Version 1.01 (
Version 1.02 (
Version 1.03 (
Add 'ExplicitR' construction circles
Add option to
print documentation to report viewer
Version 1.04 (
Version 1.05 (
Version 1.06 (
Version 1.07 (
Version 1.08 (
Add capability
of reading lines, circles and arcs from a DXF file.
Version 1.09 (
"""
def
run_script():
try:
from param import ResponseNotOK,
Units, Dialog, Warning, dim
from macrolib.ExceptWarn import formatExceptionInfo
from macrolib.PolarPt import polar_pt_plan
from macrolib.PrintPtList import formatPtList
from macrolib.GridDXF import parseDXFpts,
formatDXFpts
from point
import Point
from point
import PointLocate
from job
import JobName
from cons_line import ConsLine
from cons_circle import ConsCircle
import os
import re
Units("feet")
#####################################
def gridAdd(pt, dir, cons_color="Cyan"):
# construction
line begin
cl2 = ConsLine()
cl2.pt1 = pt
cl2.angle = dir
cl2.pen = cons_color
cl2.add()
# construction
line end
#####################################
def gridAddExplicit(pt1, pt2, cons_color="Cyan"):
# construction
line begin
cl2 = ConsLine()
cl2.pt1 = pt1
cl2.pt2 = pt2
cl2.pen = cons_color
cl2.add()
# construction
line end
####################################
def arcAdd(pt, rad, cons_color="Red"):
cc1 = ConsCircle()
cc1.pt1 = pt
cc1.radius = rad
cc1.pen = cons_color
cc1.add()
while 1:
## Dialog Box
######################
dlg1 = Dialog("Building
Grid Lines in Plan")
dlg1.menu("print_doc", ("Yes", "No"),
"No", "Print script documentation ")
dlg1.group_title("Import
Grid Line File")
dlg1.file('import_file', os.path.join(os.getcwd(), "jobs", JobName(),
"macro", "Test1.txt"), "Enter file name or browse ")
dlg1.menu('cons_color',
("Blue", "Green", "Yellow", "Magenta",
"Red", "White", "Cyan"), "Cyan",
"Construction line color")
dlg1.menu('conc_color',
("Blue", "Green", "Yellow", "Magenta",
"Red", "White", "Cyan"), "Red",
"Construction circle color")
try:
dlg1.done()
except ResponseNotOK:
raise
if
dlg1.print_doc == "Yes":
print
__doc__
break
if os.path.splitext(dlg1.import_file)[-1].lower() == '.dxf':
# Create a list object if user
selects a dxf file
pt = PointLocate("Select base point for DXF file import or
return")
if pt:
f = formatDXFpts(base=(pt.x, pt.y, pt.z),
*(parseDXFpts(dlg1.import_file))).split('\n')
else:
f = formatDXFpts(*(parseDXFpts(dlg1.import_file))).split('\n')
else:
# Create a file object
otherwise
# Import grid line file
try:
f = open(dlg1.import_file,
"r")
except
IOError, e:
# unable
to open file
Warning("Unable
to open file: %s" % (e))
# Iteration on list or file object
# 'for' calls file or list next() method
for item
in f:
if item.startswith('#'):
pass
elif item.lower().startswith('explicitl'):
pt
= re.split('[:;,]', item)
ptWP1 =
Point(dim(pt[1].strip()), dim(pt[2].strip()), dim(pt[3].strip()))
ptWP2 =
Point(dim(pt[4].strip()), dim(pt[5].strip()), dim(pt[6].strip()))
gridAddExplicit(ptWP1,
ptWP2, dlg1.cons_color)
elif item.lower().startswith('explicita'):
pt
= re.split('[:;,]', item)
ptWP1 =
Point(dim(pt[1].strip()), dim(pt[2].strip()), dim(pt[3].strip()))
ang1 = dim(pt[4].strip())
gridAdd(ptWP1, ang1,
dlg1.cons_color)
elif item.lower().startswith('explicitr'):
pt
= re.split('[:;,]', item)
ptWP1 =
Point(dim(pt[1].strip()), dim(pt[2].strip()), dim(pt[3].strip()))
arcAdd(ptWP1,
dim(pt[4].strip()), dlg1.conc_color)
elif item.lower().startswith('origin'):
ptx, pty = item.split(':')[1].split(",")
gridWP = Point(dim(ptx.strip()),
dim(pty.strip()), 0.0)
elif item.lower().startswith('direction'):
gridOffset = 0.0
gridDir = dim(item.split(':')[1].strip())
gridAdd(gridWP,
gridDir, dlg1.cons_color)
elif
item.lower().startswith('circle'):
_str,
ptWPx, ptWPy, arc_rad = re.split('[:,]', item)
pt1 = Point(dim(ptWPx.strip()), dim(ptWPy.strip()),
0.0)
ptWP = polar_pt_plan(polar_pt_plan(gridWP, pt1.x, gridDir), pt1.y, gridDir + 90.0)
arcAdd(ptWP,
dim(arc_rad.strip()), dlg1.conc_color)
else:
if
dim(item.strip()):
gridOffset = gridOffset +
dim(item.strip())
gridAdd(polar_pt_plan(gridWP, gridOffset, gridDir + 90.0), gridDir,
dlg1.cons_color)
if isinstance(f, file):
f.close()
break
except:
Warning(formatExceptionInfo())
##
END run_script() #########################
if
__name__ == '__main__':
try:
run_script()
finally:
# SAMPLE
“””
# Corporate Center IV
# Column Grids
Origin: 0-0, 0-0
Direction: 0.0
3-0
2-0
4-0
2-6
15-0
30-0
30-0
30-0
15-0
2-6
4-0
2-0
3-0
Origin: 0-0, 0-0
Direction:-90.0
2-6
2-6
15-0
30-0
30-0
20-6
9-6
29-0
9-6
20-6
30-0
30-0
15-0
2-6
2-6
# Save1.txt Inwood Station
ExplicitR:
ExplicitR:
ExplicitR:
ExplicitR:
ExplicitR:
ExplicitR:
ExplicitA: 1350.0000,
ExplicitA: 1350.0000,
# Lenox Grids and Beams
Origin: 0-0, 0-0
Direction: 0.0
2-2
57-9
Origin: 0-0, 0-0
Direction:-90.0
19-6
19-6
19-6
Origin: 0-0, 0-0
Direction: 0.0
2-2
17-10 1/4
8-8
11 3/4
22-0
8-3
Origin: 0-0, 0-0
Direction:-90.0
4-10 1/2
4-10 1/2
4-10 1/2
4-10 1/2
4-6
Origin: 0-0, 0-0
Direction:-90.0
29-10
9-2
4-1
4-1 1/4
4-1
7-2 3/4
Origin: 0-0, 0-0
Direction:-90.0
29-10
19-0
“””