## TextDXF.py
Version 1.02

## Copyright (c) 2007
Bruce Vaughan, BV Detailing & Design, Inc.

## All rights
reserved.

## NOT FOR

########################################################################

'''

parseDXFtext(file_name) - 'file_name'
is the name of the DXF file to parse.

The function returns
a list of text strings.

sumStuds(textList) - Summarize the stud
counts found in the argument list

Stud count string format:
[36] or [14,2,2,14]

Example
usage:

file_name = r'C:\

stud_count = sumStuds(parseDXFtext(file_name))

Version
1.01 (

Version
1.02 (

***
WATCH OUT FOR MEMBER NUMBERS IN PLACE OF PIECEMARKS ***

Member
numbers begin with an open bracket '['

'''

def
parseDXFtext(fn):

f = open(fn)

# skip to entities
section

s = f.next()

while s.strip() != 'ENTITIES':

s = f.next()

inText
= False

textList
= []

for line in f:

# In ENTITIES section, iteration can
cease when ENDSEC is reached

if line.strip() == 'ENDSEC':

break

elif
inText == True:

dd = dict.fromkeys([' 1\n',], '0')

while line
!= ' 0\n':

#if line.strip() in dd:

if
line in dd:

dd[line.strip()]
= f.next().strip()

line =
f.next()

textList.append(dd['1'])

inText = False

else:

if line.strip() == 'TEXT':

inText = True

f.close()

return textList

def
sumStuds(textList):

stud_count = 0

errorList
= []

for text in textList:

try:

stud_count
+= sum([int(i) for i in text.lstrip('[').rstrip(']').split(',') if text.startswith('[')])

except:

errorList.append(text)

if errorList:

print 'Invalid
text entr%s:\n%s' % (('y', 'ies')[len(errorList)>1 or 0], '\n'.join(errorList))

return stud_count

if
__name__ == '__main__':

from macrolib.dirEntries import dirEntries

# Calculate the total number of studs found
in all the DXF files in a specific directory

dirName
= r'H:\Dxf\studcount'

dirName
= r'H:\Dxf'

studCnt
= 0

for fn in dirEntries(dirName, False, 'dxf', 'DXF'):

sheetCnt
= sumStuds(parseDXFtext(fn))

studCnt
+= sheetCnt

print 'There
were %d studs counted in file %s' % (sheetCnt, fn)

print '\nTotal number of shear connector studs counted: %d' % studCnt

'''

fn =
r'H:\Dxf\6TH_FLOOR_FRAMING_

fn =
r'H:\Dxf\6TH_FLOOR_FRAMING_

textList
= parseDXFtext(fn)

print '\n'.join(textList)

'''

'''
Toringdon VI

>>>
There were 0 studs counted in file H:\Dxf\studcount\E1001.dxf

There
were 0 studs counted in file H:\Dxf\studcount\E1002.dxf

There
were 0 studs counted in file H:\Dxf\studcount\E1003.dxf

There
were 0 studs counted in file H:\Dxf\studcount\E1004.dxf

There
were 0 studs counted in file H:\Dxf\studcount\E1005.dxf

There
were 4530 studs counted in file H:\Dxf\studcount\E101.dxf

There
were 4284 studs counted in file H:\Dxf\studcount\E102.dxf

There
were 4288 studs counted in file H:\Dxf\studcount\E201.dxf

There
were 714 studs counted in file H:\Dxf\studcount\E202.dxf

There
were 0 studs counted in file H:\Dxf\studcount\E203.dxf

There
were 0 studs counted in file H:\Dxf\studcount\E901.dxf

There
were 0 studs counted in file H:\Dxf\studcount\E902.dxf

Total
number of shear connector studs counted: 13816

'''

'''
Corporate Center IV

>>>
There were 3770 studs counted in file H:\Dxf\studcount\E101.dxf

There
were 4418 studs counted in file H:\Dxf\studcount\E102.dxf

There
were 0 studs counted in file H:\Dxf\studcount\E103.dxf

There
were 3974 studs counted in file H:\Dxf\studcount\E501.dxf

There
were 3974 studs counted in file H:\Dxf\studcount\E502.dxf

There
were 3974 studs counted in file H:\Dxf\studcount\E503.dxf

There
were 3974 studs counted in file H:\Dxf\studcount\E901.dxf

There
were 4157 studs counted in file H:\Dxf\studcount\E902.dxf

There
were 137 studs counted in file H:\Dxf\studcount\E903.dxf

There
were 128 studs counted in file H:\Dxf\studcount\E904.dxf

There
were 0 studs counted in file H:\Dxf\studcount\E905.dxf

Total
number of shear connector studs counted: 28506

>>>

'''

'''

fn
= r'H:\Dxf\6TH_FLOOR_FRAMING_

studCnt = sumStuds(parseDXFtext(fn))

print stud_count

'''

'''

>>>
3962

'''