zoukankan      html  css  js  c++  java
  • 平台_结构算量(目的:1.结构算量 2.将清单编码按照exel清单序号加载入模型构件的信息中)

    import clr
    clr.AddReference("RevitNodes")
    import Revit
    clr.ImportExtensions(Revit.Elements)
    clr.AddReference("DSCoreNodes")
    import DSCore
    from DSCore import *
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    clr.AddReference("RevitAPI")
    import Autodesk
    from Autodesk.Revit.DB import *
    clr.AddReference("System.Windows.Forms")
    clr.AddReference("System.Drawing")
    import sys
    import System
    from System.Windows.Forms import *
    from System.Drawing import *
    from System import Array
    from System.Collections.Generic import *
    clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
    from Microsoft.Office.Interop import Excel
    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo("en-US")
    from System.Runtime.InteropServices import Marshal
    
    # Create a Class Form
    class CreateWindow(Form):
        def __init__(self):
    
            # Create the Form
            self.Name = "Create Window"
            self.Text = "现浇混凝土构件类别命名确认"
            self.Size = Size(700, 550)
            self.CenterToScreen()
    
            self.values_XJ = []
    
            # Create Label for Beam Name
            labelBeamName_expath = Label(Text = "* excel工程清单路径")
            labelBeamName_expath.Parent = self
            labelBeamName_expath.Location = Point(30, 20)
            labelBeamName_expath.AutoSize=False
            labelBeamName_expath.Width=300
            # Create TextBox for Beam Name
            self.textboxBeamName_expath = TextBox()
            self.textboxBeamName_expath.Parent = self
            self.textboxBeamName_expath.Text = r'C:UsersadminDesktop万科超级清单模板(总包)08.31.xls'
            self.textboxBeamName_expath.Location = Point(350, 20)
            self.textboxBeamName_expath.Width = 300
    
            labelsheetname = Label(Text = "工作表名称(工程清单)")
            labelsheetname.Parent = self
            labelsheetname.Location = Point(30, 50)
            labelsheetname.AutoSize=False
            labelsheetname.Width=300
            # Create TextBox for Beam Name
            self.textboxsheetname = TextBox()
            self.textboxsheetname.Parent = self
            self.textboxsheetname.Text = '01型+A类明细表(土建地上)'
            self.textboxsheetname.Location = Point(350, 50)
            self.textboxsheetname.Width = 300
    
    
            # Create Label for Beam Name
            labelBeamName_梁 = Label(Text = "* 梁类别")
            labelBeamName_梁.Parent = self
            labelBeamName_梁.Location = Point(30, 80)
            labelBeamName_梁.AutoSize=False
            labelBeamName_梁.Width=300
            # Create Label for Beam Name
            labelBeamName_有梁板 = Label(Text = "有梁板(如:框架梁,暗梁,悬挑梁)")
            labelBeamName_有梁板.Parent = self
            labelBeamName_有梁板.Location = Point(30, 110)
            labelBeamName_有梁板.AutoSize=False
            labelBeamName_有梁板.Width=300
            # Create TextBox for Beam Name
            self.textboxBeamName_有梁板 = TextBox()
            self.textboxBeamName_有梁板.Parent = self
            self.textboxBeamName_有梁板.Text = "KL,AL,XL,PTL"
            self.textboxBeamName_有梁板.Location = Point(350, 110)
            self.textboxBeamName_有梁板.Width = 300
    
            # Create Label for Beam Number
            labelBeamName_直形墙 = Label(Text = "直形墙(连梁等)")
            labelBeamName_直形墙.Parent = self
            labelBeamName_直形墙.Location = Point(30, 140)
            labelBeamName_直形墙.AutoSize=False
            labelBeamName_直形墙.Width=300
    
            # Create TextBox for Beam Number
            self.textboxBeamName_直形墙 = TextBox()
            self.textboxBeamName_直形墙.Parent = self
            self.textboxBeamName_直形墙.Text = "LL"
            self.textboxBeamName_直形墙.Location = Point(350, 140)
            self.textboxBeamName_直形墙.Width = 300
    
            # Create Label for Beam Name
            labelBeamName_圈梁过梁 = Label(Text = "圈梁过梁")
            labelBeamName_圈梁过梁.Parent = self
            labelBeamName_圈梁过梁.Location = Point(30, 170)
            labelBeamName_圈梁过梁.AutoSize=False
            labelBeamName_圈梁过梁.Width=300
    
            # Create TextBox for Beam Name
            self.textboxBeamName_圈梁过梁 = TextBox()
            self.textboxBeamName_圈梁过梁.Parent = self
            self.textboxBeamName_圈梁过梁.Text = "QL,GL"
            self.textboxBeamName_圈梁过梁.Location = Point(350, 170)
            self.textboxBeamName_圈梁过梁.Width = 300
    
            # Create Label for Beam Number
            labelBeamName_零星构件 = Label(Text = "混凝土现浇零星构件(如翻边,反坎)")
            labelBeamName_零星构件.Parent = self
            labelBeamName_零星构件.Location = Point(30, 200)
            labelBeamName_零星构件.AutoSize=False
            labelBeamName_零星构件.Width=300
    
            # Create TextBox for Beam Number
            self.textboxBeamName_零星构件 = TextBox()
            self.textboxBeamName_零星构件.Parent = self
            self.textboxBeamName_零星构件.Text = "翻边,反坎"
            self.textboxBeamName_零星构件.Location = Point(350, 200)
            self.textboxBeamName_零星构件.Width = 300
    
            # Create Label for Beam Number
            labelColumnName_柱 = Label(Text = "* 结构柱类别")
            labelColumnName_柱.Parent = self
            labelColumnName_柱.Location = Point(30, 230)
            labelColumnName_柱.AutoSize=False
            labelColumnName_柱.Width=300
    
            # Create Label for Beam Number
            labelColumnName_矩形柱 = Label(Text = "矩形柱(如框架柱,梯柱等),其余归入直形墙")
            labelColumnName_矩形柱.Parent = self
            labelColumnName_矩形柱.Location = Point(30, 260)
            labelColumnName_矩形柱.AutoSize=False
            labelColumnName_矩形柱.Width=300
    
            # Create TextBox for Beam Number
            self.textboxColumnName_矩形柱 = TextBox()
            self.textboxColumnName_矩形柱.Parent = self
            self.textboxColumnName_矩形柱.Text = "KZ,TZ"
            self.textboxColumnName_矩形柱.Location = Point(350, 260)
            self.textboxColumnName_矩形柱.Width = 300
    
            # Create Label for Beam Number
            labelColumnName_矩形柱 = Label(Text = "* 结构墙")
            labelColumnName_矩形柱.Parent = self
            labelColumnName_矩形柱.Location = Point(30, 290)
            labelColumnName_矩形柱.AutoSize=False
            labelColumnName_矩形柱.Width=300
    
    
            # Create Label for Beam Number
            labelWallName_结构墙 = Label(Text = "结构墙(如剪力墙等)")
            labelWallName_结构墙.Parent = self
            labelWallName_结构墙.Location = Point(30, 320)
            labelWallName_结构墙.AutoSize=False
            labelWallName_结构墙.Width=300
    
            # Create TextBox for Beam Number
            self.textboxWallName_结构墙 = TextBox()
            self.textboxWallName_结构墙.Parent = self
            self.textboxWallName_结构墙.Text = "Q"
            self.textboxWallName_结构墙.Location = Point(350, 320)
            self.textboxWallName_结构墙.Width = 300
    
            # Create Label for Beam Number
            labelFloorName_楼板 = Label(Text = "* 结构板")
            labelFloorName_楼板.Parent = self
            labelFloorName_楼板.Location = Point(30, 350)
            labelFloorName_楼板.AutoSize=False
            labelFloorName_楼板.Width=300
            # Create Label for Beam Number
            labelFloorName_楼板 = Label(Text = "结构板(如楼板)")
            labelFloorName_楼板.Parent = self
            labelFloorName_楼板.Location = Point(30, 380)
            labelFloorName_楼板.AutoSize=False
            labelFloorName_楼板.Width=300
    
            # Create TextBox for Beam Number
            self.textboxFloorName_楼板 = TextBox()
            self.textboxFloorName_楼板.Parent = self
            self.textboxFloorName_楼板.Text = "楼板,LB"
            self.textboxFloorName_楼板.Location = Point(350, 380)
            self.textboxFloorName_楼板.Width = 200
    
    
            # Create Button = button
            button = Button()
            button.Parent = self
            button.Text = "确定"
            button.Location = Point(500, 450)
            # Register event
            button.Click += self.ButtonClicked
    
        # Create button event
        def ButtonClicked(self, sender, args):
            if sender.Click:
                self.values_XJ.append(self.textboxBeamName_expath.Text)
                self.values_XJ.append(self.textboxBeamName_有梁板.Text)
                self.values_XJ.append(self.textboxBeamName_直形墙.Text)
                self.values_XJ.append(self.textboxBeamName_圈梁过梁.Text)
                self.values_XJ.append(self.textboxBeamName_零星构件.Text)
                self.values_XJ.append(self.textboxColumnName_矩形柱.Text)
                self.values_XJ.append(self.textboxWallName_结构墙.Text)
                self.values_XJ.append(self.textboxFloorName_楼板.Text)
                self.values_XJ.append(self.textboxsheetname.Text)
    
                self.Close()
    
    form = CreateWindow()
    Application.Run(form)
    P_excel=form.values_XJ[0]
    B_有梁板=form.values_XJ[1].split(',')
    B_直形墙=form.values_XJ[2].split(',')
    B_圈梁过梁=form.values_XJ[3].split(',')
    B_零星构件=form.values_XJ[4].split(',')
    Z_矩形柱=form.values_XJ[5].split(',')
    Q_结构墙=form.values_XJ[6].split(',')
    L_楼板=form.values_XJ[7].split(',')
    S_工作表=form.values_XJ[8]
    # Create a Class Form
    class CreateWindow_YZ(Form):
        def __init__(self):
    
            # Create the Form
            self.Name = "Create Window"
            self.Text = "预制构件命名确认"
            self.Size = Size(700, 290)
            self.CenterToScreen()
    
            self.values_YZ = []
    
    
            # Create Label for Beam Name
            labelPrefaName_预制板 = Label(Text = "预制板(如:叠合板)")
            labelPrefaName_预制板.Parent = self
            labelPrefaName_预制板.Location = Point(30, 30)
            labelPrefaName_预制板.AutoSize=False
            labelPrefaName_预制板.Width=300
            # Create TextBox for Beam Name
            self.textboxPrefaName_预制板 = TextBox()
            self.textboxPrefaName_预制板.Parent = self
            self.textboxPrefaName_预制板.Text = "DBS,叠合板"
            self.textboxPrefaName_预制板.Location = Point(350, 30)
            self.textboxPrefaName_预制板.Width = 300
    
            # Create Label for Beam Number
            labelPrefaName_预制梁 = Label(Text = "预制梁(如:叠合梁)")
            labelPrefaName_预制梁.Parent = self
            labelPrefaName_预制梁.Location = Point(30, 60)
            labelPrefaName_预制梁.AutoSize=False
            labelPrefaName_预制梁.Width=300
    
            # Create TextBox for Beam Number
            self.textboxPrefaName_预制梁 = TextBox()
            self.textboxPrefaName_预制梁.Parent = self
            self.textboxPrefaName_预制梁.Text = "YL,预制梁"
            self.textboxPrefaName_预制梁.Location = Point(350, 60)
            self.textboxPrefaName_预制梁.Width = 300
    
            # Create Label for Beam Name
            labelPrefaName_预制阳台 = Label(Text = "预制阳台(如预制叠合阳台)")
            labelPrefaName_预制阳台.Parent = self
            labelPrefaName_预制阳台.Location = Point(30, 90)
            labelPrefaName_预制阳台.AutoSize=False
            labelPrefaName_预制阳台.Width=300
    
            # Create TextBox for Beam Name
            self.textboxPrefaName_预制阳台 = TextBox()
            self.textboxPrefaName_预制阳台.Parent = self
            self.textboxPrefaName_预制阳台.Text = "YYT,预制叠合阳台"
            self.textboxPrefaName_预制阳台.Location = Point(350, 90)
            self.textboxPrefaName_预制阳台.Width = 300
    
            # Create Label for Beam Number
            labelPrefaName_预制楼梯 = Label(Text = "预制楼梯(如预制楼梯)")
            labelPrefaName_预制楼梯.Parent = self
            labelPrefaName_预制楼梯.Location = Point(30, 120)
            labelPrefaName_预制楼梯.AutoSize=False
            labelPrefaName_预制楼梯.Width=300
    
            # Create TextBox for Beam Number
            self.textboxPrefaName_预制楼梯 = TextBox()
            self.textboxPrefaName_预制楼梯.Parent = self
            self.textboxPrefaName_预制楼梯.Text = "YZLT,预制楼梯"
            self.textboxPrefaName_预制楼梯.Location = Point(350, 120)
            self.textboxPrefaName_预制楼梯.Width = 300
    
            # Create Label for Beam Number
            labelPrefaName_预制空调板 = Label(Text = "预制空调板(如:预制空调板)")
            labelPrefaName_预制空调板.Parent = self
            labelPrefaName_预制空调板.Location = Point(30, 150)
            labelPrefaName_预制空调板.AutoSize=False
            labelPrefaName_预制空调板.Width=300
    
            # Create TextBox for Beam Number
            self.textboxPrefaName_预制空调板 = TextBox()
            self.textboxPrefaName_预制空调板.Parent = self
            self.textboxPrefaName_预制空调板.Text = "YKT,预制空调板"
            self.textboxPrefaName_预制空调板.Location = Point(350, 150)
            self.textboxPrefaName_预制空调板.Width = 300
    
    
    
            # Create Button = button
            button = Button()
            button.Parent = self
            button.Text = "确定"
            button.Location = Point(500, 200)
            # Register event
            button.Click += self.ButtonClicked
    
        # Create button event
        def ButtonClicked(self, sender, args):
            if sender.Click:
                self.values_YZ.append(self.textboxPrefaName_预制板.Text)
                self.values_YZ.append(self.textboxPrefaName_预制梁.Text)
                self.values_YZ.append(self.textboxPrefaName_预制阳台.Text)
                self.values_YZ.append(self.textboxPrefaName_预制楼梯.Text)
                self.values_YZ.append(self.textboxPrefaName_预制空调板.Text)
    
                self.Close()
    
    form_YZ = CreateWindow_YZ()
    Application.Run(form_YZ)
    DBS_叠合板=form_YZ.values_YZ[0].split(',')
    YL_预制梁=form_YZ.values_YZ[1].split(',')
    YYT_预制叠合阳台=form_YZ.values_YZ[2].split(',')
    YZLT_预制楼梯=form_YZ.values_YZ[3].split(',')
    YKT_预制空调板=form_YZ.values_YZ[4].split(',')
    
    class CreateWindow_HY(Form):
        def __init__(self):
    
            # Create the Form
            self.Name = "Create Window"
            self.Text = "合同编码命名确认"
            self.Size = Size(700, 350)
            self.CenterToScreen()
    
            self.values_HY = []
    
    
            # Create Label for Beam Name
            labelBM_现浇 = Label(Text = "*现浇混凝土构件")
            labelBM_现浇.Parent = self
            labelBM_现浇.Location = Point(30, 30)
            labelBM_现浇.AutoSize=False
            labelBM_现浇.Width=300
    
            labelBM_合一 = Label(Text = "合约类型编码1")
            labelBM_合一.Parent = self
            labelBM_合一.Location = Point(30, 60)
            labelBM_合一.AutoSize=False
            labelBM_合一.Width=300
    
            # Create TextBox for Beam Name
            self.textboxBM_合一 = TextBox()
            self.textboxBM_合一.Parent = self
            self.textboxBM_合一.Text = "CG.CD.0002"
            self.textboxBM_合一.Location = Point(350, 60)
            self.textboxBM_合一.Width = 300
    
            # Create Label for Beam Number
            labelBM_合二 = Label(Text = "合约类型编码2")
            labelBM_合二.Parent = self
            labelBM_合二.Location = Point(30, 90)
            labelBM_合二.AutoSize=False
            labelBM_合二.Width=300
    
            # Create TextBox for Beam Number
            self.textboxBM_合二 = TextBox()
            self.textboxBM_合二.Parent = self
            self.textboxBM_合二.Text = "SG.JT.0001"
            self.textboxBM_合二.Location = Point(350, 90)
            self.textboxBM_合二.Width = 300
    
            # Create Label for Beam Name
            label_预制 = Label(Text = "*预制构件")
            label_预制.Parent = self
            label_预制.Location = Point(30, 120)
            label_预制.AutoSize=False
            label_预制.Width=300
            # Create Label for Beam Name
            labelYBM_合一 = Label(Text = "合约类型编码1")
            labelYBM_合一.Parent = self
            labelYBM_合一.Location = Point(30, 150)
            labelYBM_合一.AutoSize=False
            labelYBM_合一.Width=300
    
    
    
            # Create TextBox for Beam Name
            self.textboxYBM_合一 = TextBox()
            self.textboxYBM_合一.Parent = self
            self.textboxYBM_合一.Text = " "
            self.textboxYBM_合一.Location = Point(350, 150)
            self.textboxYBM_合一.Width = 300
    
            # Create Label for Beam Number
            labelYBM_合二 = Label(Text = "合约类型编码2")
            labelYBM_合二.Parent = self
            labelYBM_合二.Location = Point(30, 180)
            labelYBM_合二.AutoSize=False
            labelYBM_合二.Width=300
    
            self.textboxYBM_合二 = TextBox()
            self.textboxYBM_合二.Parent = self
            self.textboxYBM_合二.Text = "SG.JT.0001"
            self.textboxYBM_合二.Location = Point(350, 180)
            self.textboxYBM_合二.Width = 300
    
    
    
    
    
    
            # Create Button = button
            button = Button()
            button.Parent = self
            button.Text = "确定"
            button.Location = Point(500, 250)
            # Register event
            button.Click += self.ButtonClicked
    
        # Create button event
        def ButtonClicked(self, sender, args):
            if sender.Click:
                self.values_HY.append(self.textboxBM_合一.Text)
                self.values_HY.append(self.textboxBM_合二.Text)
                self.values_HY.append(self.textboxYBM_合一.Text)
                self.values_HY.append(self.textboxYBM_合二.Text)
    
                self.Close()
    
    form_HY = CreateWindow_HY()
    Application.Run(form_HY)
    HNT_编码1=form_HY.values_HY[0]
    HNT_编码2=form_HY.values_HY[1]
    YZ_编码1=form_HY.values_HY[2]
    YZ_编码2=form_HY.values_HY[3]
    
    
    
    
    doc = DocumentManager.Instance.CurrentDBDocument
    TransactionManager.Instance.EnsureInTransaction(doc)
    ###结构梁###
      #######
    builtInCategory_L = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_StructuralFraming).WhereElementIsNotElementType().ToElements()
    class Eleli:
        def __init__(self,builtInCategory,name):   #传入参数名称,如‘KL’
            self.name=name
            self.builtInCategory=builtInCategory
            self.list=[]
            for  each in self.name:
                self.list.append(list(filter(lambda l :  each in l.Name, self.builtInCategory)))
            self.list=DSCore.List.Flatten(self.list,3)
        def elementlist(self):
            return self.list
        def elementcon(self):
            return list(each.Name[each.Name.index('C'):each.Name.index('C')+3] for each in self.list)
        def elementvolumn(self):
            return list(map(lambda l :UnitUtils.Convert(l.get_Parameter(BuiltInParameter.HOST_VOLUME_COMPUTED).AsDouble(), DisplayUnitType.DUT_CUBIC_FEET, DisplayUnitType.DUT_CUBIC_METERS),self.list))
    
    
    beam_有梁板 =  Eleli(builtInCategory_L,B_有梁板).elementlist()  ###"KL","AL","XL","PTL"
    beamcon_有梁板=Eleli(builtInCategory_L,B_有梁板).elementcon()
    beamVolumn_有梁板 =Eleli(builtInCategory_L,B_有梁板).elementvolumn()
    
    
    beam_直形墙 =  Eleli(builtInCategory_L,B_直形墙).elementlist()  ###"LL"
    beamcon_直形墙=Eleli(builtInCategory_L,B_直形墙).elementcon()
    beamVolumn_直形墙 =Eleli(builtInCategory_L,B_直形墙).elementvolumn()
    
    beam_圈梁过梁 = Eleli(builtInCategory_L,B_圈梁过梁).elementlist()  #GL过梁:对应清单圈梁过梁
    beamcon_圈梁过梁= Eleli(builtInCategory_L,B_圈梁过梁).elementcon()
    beamVolumn_圈梁过梁 = Eleli(builtInCategory_L,B_圈梁过梁).elementvolumn()
    
    
    beam_L = list(set(list(filter(lambda l :  l.Name[0]=='L', builtInCategory_L)) ).difference(set(beam_直形墙)))  #L梁:对应清单有梁板
    beamcon_L=list(each.Name[each.Name.index('C'):each.Name.index('C')+3] for each in beam_L)
    beamVolumn_L=list(map(lambda l :UnitUtils.Convert(l.get_Parameter(BuiltInParameter.HOST_VOLUME_COMPUTED).AsDouble(), DisplayUnitType.DUT_CUBIC_FEET, DisplayUnitType.DUT_CUBIC_METERS),beam_L))
    
    beam_零星构件 = Eleli(builtInCategory_L,B_零星构件).elementlist()  #GL过梁:对应清单圈梁过梁
    beamcon_零星构件= Eleli(builtInCategory_L,B_零星构件).elementcon()
    beamVolumn_零星构件 = Eleli(builtInCategory_L,B_零星构件).elementvolumn()
    
    #有梁板清单
    beamlist_有梁板=DSCore.List.Flatten([beam_有梁板,beam_L], 3)
    beamconlist_有梁板=DSCore.List.Flatten([beamcon_有梁板,beamcon_L], 3)
    beamVolumnlist_有梁板=DSCore.List.Flatten([beamVolumn_有梁板,beamVolumn_L], 3)
    #直形墙清单
    beamlist_直形墙=DSCore.List.Flatten([beam_直形墙], 3)
    beamconlist_直形墙=DSCore.List.Flatten([beamcon_直形墙], 3)
    beamVolumnlist_直形墙=DSCore.List.Flatten([beamVolumn_直形墙], 3)
    #圈梁过梁清单
    beamlist_圈梁过梁=DSCore.List.Flatten([beam_圈梁过梁], 3)
    beamconlist_圈梁过梁=DSCore.List.Flatten([beamcon_圈梁过梁], 3)
    beamVolumnlist_圈梁过梁=DSCore.List.Flatten([beamVolumn_圈梁过梁], 3)
    #零星构件清单
    beamlist_零星构件=DSCore.List.Flatten([beam_零星构件], 3)
    beamconlist_零星构件=DSCore.List.Flatten([beamcon_零星构件], 3)
    beamVolumnlist_零星构件=DSCore.List.Flatten([beamVolumn_零星构件], 3)
    
    #四个清单归类(result)
    Blist_有梁板=[beamlist_有梁板,beamconlist_有梁板,beamVolumnlist_有梁板]
    Blist_直形墙=[beamlist_直形墙,beamconlist_直形墙,beamVolumnlist_直形墙]
    Blist_圈梁过梁=[beamlist_圈梁过梁,beamconlist_圈梁过梁,beamVolumnlist_圈梁过梁]
    Blist_零星构件=[beamlist_零星构件,beamconlist_零星构件,beamVolumnlist_零星构件]
    
    ###结构柱###
      #######
    builtInCategory_Z = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_StructuralColumns).WhereElementIsNotElementType().ToElements()
    
    column_矩形柱 = Eleli(builtInCategory_Z,Z_矩形柱).elementlist()   #KZ框架柱:对应清单矩形柱
    columncon_矩形柱=Eleli(builtInCategory_Z,Z_矩形柱).elementcon()
    columnVolumn_矩形柱 =Eleli(builtInCategory_Z,Z_矩形柱).elementvolumn()
    
    column_QZ = list(set(list(filter(lambda l :  'Z' in l.Name, builtInCategory_Z)) ).difference(set(column_矩形柱)))   #其他翼缘柱:对应清单直形墙
    columncon_QZ=list(each.Name[each.Name.index('C'):each.Name.index('C')+3] for each in column_QZ)
    columnVolumn_QZ=list(map(lambda l :UnitUtils.Convert(l.get_Parameter(BuiltInParameter.HOST_VOLUME_COMPUTED).AsDouble(), DisplayUnitType.DUT_CUBIC_FEET, DisplayUnitType.DUT_CUBIC_METERS),column_QZ))
    
    columnlist_矩形柱=DSCore.List.Flatten([column_矩形柱], 3)
    columnconlist_矩形柱=DSCore.List.Flatten([columncon_矩形柱], 3)
    columnVolumnlist_矩形柱=DSCore.List.Flatten([columnVolumn_矩形柱], 3)
    
    columnlist_直形墙=DSCore.List.Flatten([column_QZ], 3)
    columnconlist_直形墙=DSCore.List.Flatten([columncon_QZ], 3)
    columnVolumnlist_直形墙=DSCore.List.Flatten([columnVolumn_QZ], 3)
    
    Clist_矩形柱=[columnlist_矩形柱,columnconlist_矩形柱,columnVolumnlist_矩形柱]
    Clist_直形墙=[columnlist_直形墙,columnconlist_直形墙,columnVolumnlist_直形墙]
    
    ###结构墙###
      #######
    builtInCategory_W = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).WhereElementIsNotElementType().ToElements()
    wall_直形墙 = Eleli(builtInCategory_W,Q_结构墙).elementlist()      #KZ框架柱:对应清单矩形柱
    wallcon_直形墙=Eleli(builtInCategory_W,Q_结构墙).elementcon()
    wallVolumn_直形墙 =Eleli(builtInCategory_W,Q_结构墙).elementvolumn()
    
    walllist_直形墙=DSCore.List.Flatten([wall_直形墙], 3)
    wallconlist_直形墙=DSCore.List.Flatten([wallcon_直形墙], 3)
    wallVolumnlist_直形墙=DSCore.List.Flatten([wallVolumn_直形墙], 3)
    #result Q墙
    Wlist_直形墙=[walllist_直形墙,wallconlist_直形墙,wallVolumnlist_直形墙]
    ###结构板###
      #######
    builtInCategory_F = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Floors).WhereElementIsNotElementType().ToElements()
    floor_楼板 = Eleli(builtInCategory_F,L_楼板).elementlist()
    floorcon_楼板= Eleli(builtInCategory_F,L_楼板).elementcon()
    floorVolumn_楼板=Eleli(builtInCategory_F,L_楼板).elementvolumn()
    floorlist_楼板=DSCore.List.Flatten([floor_楼板], 3)
    floorconlist_楼板=DSCore.List.Flatten([floorcon_楼板], 3)
    floorVolumnlist_楼板=DSCore.List.Flatten([floorVolumn_楼板], 3)
    
    Flist_有梁板=[floorlist_楼板,floorconlist_楼板,floorVolumnlist_楼板]
    
    #OUT=(Blist_有梁板,Blist_直形墙,Blist_圈梁过梁,Blist_零星构件,Clist_矩形柱,Clist_直形墙,Wlist_直形墙,Flist_有梁板)
    
    ###常规模型###
      #######
    builtInCategory_G = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_GenericModel).WhereElementIsNotElementType().ToElements()
    class Genericli:
        def __init__(self,name,nname=0):   #传入参数名称,如‘叠合板’
            self.name=name
            self.nname=nname
            self.list=[]
            for  each in self.name:
                self.list.append((filter(lambda l :  each in l.Name and self.nname not in l.Name, builtInCategory_G)))
            self.list=DSCore.List.Flatten(self.list,3)
        def genericlist(self):
            return self.list
        def genericcon(self):
            return list()
        def genericvolumn(self):
            return list(map(lambda l :UnitUtils.Convert(l.get_Parameter(BuiltInParameter.HOST_VOLUME_COMPUTED).AsDouble(), DisplayUnitType.DUT_CUBIC_FEET, DisplayUnitType.DUT_CUBIC_METERS),self.list))
    
    genericDBS_叠合板 = Genericli(DBS_叠合板).genericlist()#DBS(叠合板):对应清单预制板
    genericCon_DBS_叠合板 = Genericli(DBS_叠合板).genericcon()
    genericVolumn_DBS_叠合板 = Genericli(DBS_叠合板).genericvolumn()
    
    #清单 DBS(叠合板)
    genericlist_DBS叠合板=DSCore.List.Flatten([genericDBS_叠合板], 3)
    genericConlist_DBS叠合板=DSCore.List.Flatten([genericCon_DBS_叠合板], 3)
    genericVolumnlist_DBS叠合板=DSCore.List.Flatten([genericVolumn_DBS_叠合板 ], 3)
    #result DBS(叠合板)
    Glist_DBS叠合板=[genericlist_DBS叠合板,genericConlist_DBS叠合板,genericVolumnlist_DBS叠合板]
    
    genericYL_预制梁 = Genericli(YL_预制梁).genericlist()   #YL(预制梁):对应清单预制梁
    genericConYL_预制梁 = Genericli(YL_预制梁).genericcon()
    genericVolumnYL_预制梁 = Genericli(YL_预制梁).genericvolumn()
    
    #清单 YL(预制梁)
    genericlist_YL预制梁=DSCore.List.Flatten([genericYL_预制梁], 3)
    genericConlist_YL预制梁=DSCore.List.Flatten([genericConYL_预制梁], 3)
    genericVolumnlist_YL预制梁=DSCore.List.Flatten([genericVolumnYL_预制梁], 3)
    #result YL(预制梁)
    Glist_YL预制梁=[genericlist_YL预制梁,genericConlist_YL预制梁,genericVolumnlist_YL预制梁]
    
    genericYYT_预制叠合阳台 = Genericli(YYT_预制叠合阳台).genericlist()   #YYT(预制叠合阳台):对应清单预制叠合阳台
    genericConYYT_预制叠合阳台 = Genericli(YYT_预制叠合阳台).genericcon()
    genericVolumnYYT_预制叠合阳台 = Genericli(YYT_预制叠合阳台).genericvolumn()
    
    #清单 YYT(预制叠合阳台)
    genericlist_YYT预制叠合阳台=DSCore.List.Flatten([genericYYT_预制叠合阳台], 3)
    genericConlist_YYT预制叠合阳台=DSCore.List.Flatten([genericConYYT_预制叠合阳台], 3)
    genericVolumnlist_YYT预制叠合阳台=DSCore.List.Flatten([genericVolumnYYT_预制叠合阳台], 3)
    #result YYT(预制叠合阳台)
    Glist_YYT预制叠合阳台=[genericlist_YYT预制叠合阳台,genericConlist_YYT预制叠合阳台,genericVolumnlist_YYT预制叠合阳台]
    
    genericYZLT_预制楼梯 = Genericli(YZLT_预制楼梯).genericlist()   #YZLT(预制楼梯):对应清单预制楼梯
    genericConYZLT_预制楼梯 = Genericli(YZLT_预制楼梯).genericcon()
    genericVolumnYZLT_预制楼梯= Genericli(YZLT_预制楼梯).genericvolumn()
    
    #清单 YYT(预制楼梯)
    genericlist_YZLT预制楼梯=DSCore.List.Flatten([genericYZLT_预制楼梯], 3)
    genericConlist_YZLT预制楼梯=DSCore.List.Flatten([genericConYZLT_预制楼梯], 3)
    genericVolumnlist_YZLT预制楼梯=DSCore.List.Flatten([genericVolumnYZLT_预制楼梯], 3)
    #result YZLT(预制楼梯)
    Glist_YZLT预制楼梯=[genericlist_YZLT预制楼梯,genericConlist_YZLT预制楼梯,genericVolumnlist_YZLT预制楼梯]
    
    genericYKT_预制空调板 = Genericli(YKT_预制空调板).genericlist()   #YKT(预制空调板):对应清单预制空调板
    genericConYKT_预制空调板 = Genericli(YKT_预制空调板).genericcon()
    genericVolumnYKT_预制空调板= Genericli(YKT_预制空调板).genericvolumn()
    
    #清单 YYT(预制空调板)
    genericlist_YKT预制空调板=DSCore.List.Flatten([genericYKT_预制空调板], 3)
    genericConlist_YKT预制空调板=DSCore.List.Flatten([genericConYKT_预制空调板], 3)
    genericVolumnlist_YKT预制空调板=DSCore.List.Flatten([genericVolumnYKT_预制空调板], 3)
    #result YZLT(预制空调板)
    Glist_YKT预制空调板=[genericlist_YKT预制空调板,genericConlist_YKT预制空调板,genericVolumnlist_YKT预制空调板]
    
    generic_现浇梯梁 = Genericli('现浇梯梁').genericlist()   #TL(现浇楼梯):对应清单矩形梁
    genericCon_现浇梯梁 = Genericli('现浇梯梁').genericcon()
    genericVolumn_现浇梯梁= Genericli('现浇梯梁').genericvolumn()
    generic_TL = Genericli('TL').genericlist()
    genericVolumn_TL = Genericli('TL').genericvolumn()#清单 TL(现浇梯梁)
    genericCon_TL = Genericli('TL').genericcon()
    genericlist_TL现浇梯梁=DSCore.List.Flatten([generic_现浇梯梁,generic_TL], 3)
    genericConlist_TL现浇梯梁=DSCore.List.Flatten([genericCon_现浇梯梁,genericCon_TL], 3)
    genericVolumnlist_TL现浇梯梁=DSCore.List.Flatten([genericVolumn_现浇梯梁,genericVolumn_TL], 3)#result TL(现浇梯梁)
    
    Glist_TL现浇梯梁=[genericlist_TL现浇梯梁,genericConlist_TL现浇梯梁,genericVolumnlist_TL现浇梯梁]
    
    ###excel###
      #######
    ###excel###
    '''excel_data=IN[0]
    excel_code=['0' if x==None else x for x in excel_data[0]]
    excel_name=['0' if x==None else x for x in excel_data[1]]'''
    
    path=P_excel
    sys.path.append(path)
    
    ex=Excel.ApplicationClass()
    ex.Visible=True
    ex.DisplayAlerts=False
    
    workbook=ex.Workbooks.Open(path)
    ws=workbook.Worksheets[S_工作表]
    ws2=workbook.Worksheets.Add()
    ws2.name="01型+A类明细表(土建地上)工程量2"
    x1range=ws.Range["A1","A200"]
    x2range=ws.Range["B1","B200"]
    r1=x1range.Value2
    r2=x2range.Value2
    x21range=ws2.Range["A1","A200"]
    x22range=ws2.Range["B1","B200"]
    x21range.Value2=r1
    x22range.Value2=r2
    
    
    
    
    
    
    #ws3=workbook.creat_sheet()
    excel_code=['0' if x==None else x for x in r1]
    excel_name=['0' if x==None else x for x in r2]
    
    
    
    class Code:
        def __init__(self,keyword,*lists):
            self.lists=lists
            self.keyword=keyword
            self.result=[]
            self.listelement=[]
            length1=len(self.lists[0])
            length2=len(self.lists)
            for i in range(length1):
                temp=[]
                for j in range(length2):
                    temp.append(lists[j][i])
                self.result.append(temp)
            for each in self.result:
                self.listelement.append(DSCore.List.Flatten(each, 3))
    
    
        def getele(self):
            return  self.listelement
        def getCode(self):
            code_new=[]
            nu_row=[]
            i=0
            for each1 in  self.listelement[0]:
                for each2 in  excel_name:
                    if self.keyword in each2 and self.listelement[1][i] in each2:
                        n_row=excel_name.index(each2)
                        nu_row.append(n_row)
                        code_new.append(excel_code[n_row])
                i+=1
            self.listelement.append(code_new)
            self.listelement.append(nu_row)
            return self.listelement
        def getCode_YZ(self):
            code_new=[]
            nu_row=[]
            i=0
            for each1 in  self.listelement[0]:
                for each2 in  excel_name:
                    if self.keyword in each2:
                        n_row=excel_name.index(each2)
                        nu_row.append(n_row)
                        code_new.append(excel_code[n_row])
                i+=1
            self.listelement.append(code_new)
            self.listelement.append(nu_row)
            return self.listelement
    
    listelement_有梁板=Code('有梁板',Blist_有梁板,Flist_有梁板).getCode()
    listelement_直形墙=Code('直形墙',Blist_直形墙,Clist_直形墙,Wlist_直形墙).getCode()
    listelement_圈梁过梁=Code('圈梁',Blist_圈梁过梁).getCode()
    listelement_零星构件=Code('现浇混凝土其他构件:零星',Blist_零星构件).getCode()
    listelement_矩形柱=Code('矩形柱',Clist_矩形柱).getCode()
    listelement_DBS叠合板=Code('叠合板',Glist_DBS叠合板).getCode_YZ()
    listelement_YL预制梁=Code('预制叠合阳台梁',Glist_YL预制梁).getCode_YZ()
    listelement_YYT预制叠合阳台=Code('预制阳台',Glist_DBS叠合板).getCode_YZ()
    listelement_YZLT预制楼梯=Code('预制楼梯',Glist_YZLT预制楼梯).getCode_YZ()
    listelement_YKT预制空调板=Code('预制空调板',Glist_YKT预制空调板).getCode_YZ()
    
    ###编码###
      #######
    class Code_element:
        def __init__(self,listelement):     ###code3需要从excel获取
            self.listelement=listelement
    
        def codeSetting_HNT(self):
            i=0
    
            for each in self.listelement[0]:
                typeId = each.GetTypeId()
                typeElement = doc.GetElement(typeId)
                parms = typeElement.Parameters
                for par in parms:
                    if par.Definition.Name == '合约类型编码1':
                        par.Set(HNT_编码1)
                    elif par.Definition.Name == '合约类型编码2':
                        par.Set(HNT_编码2)
                    elif par.Definition.Name == '清单编码':
                        par.Set(self.listelement[3][i])
            i+=1
        def codeSetting_YZ(self):
            i=0
            for each in self.listelement[0]:
                typeId = each.GetTypeId()
                typeElement = doc.GetElement(typeId)
                parms = typeElement.Parameters
                for par in parms:
                    if par.Definition.Name == '合约类型编码1':
                        par.Set(YZ_编码1)
                    elif par.Definition.Name == '合约类型编码2':
                        par.Set(YZ_编码2)
                    elif par.Definition.Name == '清单编码':
                        par.Set(self.listelement[3][i])
            i+=1
    Code_element(listelement_有梁板).codeSetting_HNT()
    Code_element(listelement_矩形柱).codeSetting_HNT()
    Code_element(listelement_直形墙).codeSetting_HNT()
    Code_element(listelement_圈梁过梁).codeSetting_HNT()
    Code_element(listelement_零星构件).codeSetting_HNT()
    Code_element(listelement_DBS叠合板).codeSetting_YZ()
    Code_element(listelement_YL预制梁).codeSetting_YZ()
    Code_element(listelement_YYT预制叠合阳台).codeSetting_YZ()
    Code_element(listelement_YZLT预制楼梯).codeSetting_YZ()
    Code_element(listelement_YKT预制空调板).codeSetting_YZ()
    
    ###get the floor num
    filename=Document.PathName.GetValue(doc)
    filename_doc=filename.split('\')[-1]
    n=filename_doc.index('F')
    floor_num=str(filename_doc[n-2:n])
    colnum=int(floor_num)+2
    
    class Volumn_row:
        def __init__(self,listelement):
            self.listelement_row=listelement[4]
            self.listelement_volumn=listelement[2]
            self.dic={}
            for i in range(len(self.listelement_row)):
                if self.listelement_row[i] not in self.listelement_row[0:i]:
                    self.dic[self.listelement_row[i]]=self.listelement_volumn[i]
                else:
                    self.dic[self.listelement_row[i]]=self.dic[self.listelement_row[i]]+self.listelement_volumn[i]
            self.keys=list(map(lambda l:l+1,list(self.dic.keys())))
            self.values=list(self.dic.values())
        def getdic(self):
            return self.dic
        def getrow(self):
            return self.keys
        def getvolumn(self):
            return list(self.dic.values())
        def writting(self):
            for i in range(len(self.keys)):
                ws2.Cells[self.keys[i],colnum]=self.values[i]
    
    Volumn_row(listelement_有梁板).writting()
    Volumn_row(listelement_矩形柱).writting()
    Volumn_row(listelement_直形墙).writting()
    Volumn_row(listelement_圈梁过梁).writting()
    Volumn_row(listelement_零星构件).writting()
    Volumn_row(listelement_DBS叠合板).writting()
    Volumn_row(listelement_YL预制梁).writting()
    Volumn_row(listelement_YYT预制叠合阳台).writting()
    Volumn_row(listelement_YZLT预制楼梯).writting()
    Volumn_row(listelement_YKT预制空调板).writting()
    
    
    
    OUT=(listelement_有梁板,listelement_直形墙,listelement_零星构件,listelement_DBS叠合板,listelement_DBS叠合板)
  • 相关阅读:
    了解委托(Delegate)
    C#中事件的一些总结
    Devexpress Xtrareport 并排报表
    Xtrareport 交叉报表
    Xtrareport 多栏报表
    Xtrareport 报表的一些属性及控件
    UI前端开发都是做什么的以及html、css、php、js等究竟是神马关系
    url,href,src之间的区别
    join()的用法
    爬取百度百科
  • 原文地址:https://www.cnblogs.com/ShirleyX/p/8310761.html
Copyright © 2011-2022 走看看