def UPLOAD_WorksetsMain(sh): ri = re #ci = ce awssDBxl = {} while(True): r = sh.Range[rg(ri, ce)] proj = r.Text if proj: ids = {int(sh.Range[rg(ri, ce + 1)].Value2): \ int(sh.Range[rg(ri, ce + 2)].Value2)} if not proj in awssDBxl: tmpbdws = {} tmpbdpj = {proj:tmpbdws} awssDBxl.update(tmpbdpj) awssDBxl[proj].update(ids) else: config.UpdateDB(awssDBxl) log = "" if sw.isEvenHandlerAdded(): log = "Attention!\n\nThe tool is or was activated, so must restart Revit to reload new data!\n\n" log += "But you can use the ActiveView button, without restarting Revit. " log += "(ActiveView button set the workset for the Active View individually.)" Alert(log, title="neoCL | Auto Workset Set", header="Update of config file done!") return ri += 1 ### END : UPLOAD TO FILE #############################################
def ImportThisRow(r, sh): ri = r.Row ci = r.Column eq = db.Element.from_int(int(r.Text)) while (True): ci += 1 rp = sh.Range[rg(rt, ci)] rpv = rp.Text if rpv: rpN = sh.Range[rg(ri, ci)] rpNvTxt = rpN.Text rpNvVal = rpN.Value2 try: pm = eq.parameters[rpv] try: if pm.type is str: pm._revit_object.Set(str(rpNvTxt)) elif pm.type is int: pm._revit_object.Set(int(rpNvVal)) elif pm.type is float: pm._revit_object.SetValueString(str(rpNvVal)) else: #if rpNv != pm.AsValueString(): #avoid mess with non modified parameters pm._revit_object.SetValueString(rpNvTxt) except: print("-> Can't set this parameter: " + rpv) except: print("-> Doesn't have this parameter: " + rpv) else: return "Done"
def LOG_Collector(sh, ri, docname, collector): lastws = "" thisws = "" for c in collector: if Allow_this_workset(c): thisws = c.Name.ToString() if thisws != lastws: sh.Range[rg(ri, ce)].Value2 = "'" + docname sh.Range[rg(ri, ce + 1)].Value2 = "'" + c.Kind.ToString() sh.Range[rg(ri, ce + 2)].Value2 = "'" + c.Id.ToString() sh.Range[rg(ri, ce + 3)].Value2 = "'" + thisws ri += 1 lastws = thisws return ri
def LOG_WorksetsMain(sh): ri = re #ci = ce sh.Cells.ClearContents() sh.Range[rg(rt1, ce)].Value2 = "'PROJECT NAME" sh.Range[rg(rt1, ce + 1)].Value2 = "'TYPE" sh.Range[rg(rt1, ce + 2)].Value2 = "'ID" sh.Range[rg(rt1, ce + 3)].Value2 = "'NAME" docname = doc.Title collector = DB.FilteredWorksetCollector(doc).OfKind(DB.WorksetKind.ViewWorkset) ri = LOG_Collector(sh, ri, docname, collector) collector = DB.FilteredWorksetCollector(doc).OfKind(DB.WorksetKind.UserWorkset) ri = LOG_Collector(sh, ri, docname, collector) sh.Cells.EntireColumn.AutoFit()
def FillData(sh): sh.Cells.ClearContents() sh.Range[rg(rt1, ce)].Value2 = "'ID" sh.Range[rg(rt1, ce + 1)].Value2 = "'Order" sh.Range[rg(rt1, ce + 2)].Value2 = "'Numbering" sh.Range[rg(rt1, ce + 3)].Value2 = "'Date" sh.Range[rg(rt1, ce + 4)].Value2 = "'Description" sh.Range[rg(rt1, ce + 5)].Value2 = "'Issued" sh.Range[rg(rt1, ce + 6)].Value2 = "'Issued to" sh.Range[rg(rt1, ce + 7)].Value2 = "'Issued by" sh.Range[rg(rt1, ce + 8)].Value2 = "'Log" FillData_Rows(sh) sh.Range[rg(1, 1)].Value2 = "Export to Excel is done! Read HOW TO sheet!" sh.Cells.EntireColumn.AutoFit()
def GetDicOfColumns(sh): ri = rt ci = ct dic = {} while(True): ci += 1 rp = sh.Range[rg(ri, ci)] rpv = rp.Text dic[ci] = rpv if rpv == "": return dic
def GetColumnWithParam(param): c = ct while(True): c += 1 r = sh.Range[rg(rt, c)] rv = r.Text if not rv: r.Value2 = "'" + param return c elif rv == param: return c
def ImportMain(sh, where): ri = re ci = ce atLeastOneImport = False log = sh.Range[rg(ri - 1, ci + 4)] ClearColumnFrom(log.Offset(1, 0)) log.Value2 = time.ctime() + " | " + doc.PathName log.EntireColumn.AutoFit() while (True): find_familyName = sh.Range[rg(ri, ci)].Text find_typeName = sh.Range[rg(ri, ci + 1)].Text replace_familyName = sh.Range[rg(ri, ci + 2)].Text replace_typeName = sh.Range[rg(ri, ci + 3)].Text log = sh.Range[rg(ri, ci + 4)] log.Value2 = "" ri += 1 if find_familyName: log.Value2 = tyrep.SetNewType(find_familyName, find_typeName, replace_familyName, replace_typeName, where) log.EntireColumn.AutoFit() atLeastOneImport = True else: if atLeastOneImport: log.Value2 = "^ Import is done!" #print("Import is done!") else: log.Value2 = "^ Any to import!" #print("Any to import!") return
def FillData_Rows(sh): import _neo_importer import lib.revisions.neo_revisions_main as mn #main.UpdateDB() ri = re #ci = ce for key in mn.revDB: rev = mn.revDB[key] sh.Range[rg(ri, ce)].Value2 = "'" + str(rev.Id.ToString()) sh.Range[rg(ri, ce + 1)].Value2 = "'" + str(key) sh.Range[rg(ri, ce + 2)].Value2 = "'" + str(rev.NumberType.ToString()) sh.Range[rg(ri, ce + 3)].Value2 = "'" + str(rev.RevisionDate) sh.Range[rg(ri, ce + 4)].Value2 = "'" + str(rev.Description) sh.Range[rg(ri, ce + 5)].Value2 = "'" + ('Yes' if rev.Issued else 'No') sh.Range[rg(ri, ce + 6)].Value2 = "'" + str(rev.IssuedTo) sh.Range[rg(ri, ce + 7)].Value2 = "'" + str(rev.IssuedBy) sh.Range[rg(ri, ce + 8)].Value2 = "'Ready..." ri += 1
def ImportMain(sh): ri = re ci = ce atLeastOneImport = False while (True): r = sh.Range[rg(ri, ci)] ri += 1 rv = r.Text if rv: strEl = db.Element.from_int(int(rv)).name + " | ID[" + rv + "]" print(strEl) ImportThisRow(r, sh) atLeastOneImport = True else: if atLeastOneImport: print("Import is done!") else: print("Any to import!") return
def AddParam(pm, c): if not c: c = GetColumnWithParam(pm.Definition.Name) pval = "" if pm._revit_object.HasValue: if pm.type is str: pval = pm.AsString() elif pm.type is int: pval = pm.value elif pm.type is float: pval = pm.value * 304.8 else: pval = pm.AsValueString() r = sh.Range[rg(ar, c)] r.Value2 = "'" + str(pval) r.Interior.ColorIndex = cEdc r.Font.ColorIndex = cEdt
def LOAD_WorksetsMain(sh): ri = re #ci = ce sh.Cells.ClearContents() sh.Range[rg(rt1, ce)].Value2 = "'PROJECT NAME" sh.Range[rg(rt1, ce + 1)].Value2 = "'VIEW WORKSET ID" sh.Range[rg(rt1, ce + 2)].Value2 = "'USER WORKSET ID" config.ReloadDB() awssDBxl = config.awssDB for proj in awssDBxl: awssDBxlproj = awssDBxl[proj] for id in awssDBxlproj: sh.Range[rg(ri, ce)].Value2 = "'" + proj sh.Range[rg(ri, ce + 1)].Value2 = "'" + str(id) sh.Range[rg(ri, ce + 2)].Value2 = "'" + str(config.awssDB[proj][id]) ri += 1 sh.Cells.EntireColumn.AutoFit()
def Import(): import _neo_importer import lib.revisions.neo_revisions_main as mn with db.Transaction(str('neoCL | Import Revisions')): XL, wb = GetWb() XL.DisplayAlerts = False sh = wb.Worksheets(shName) sh.Cells(1, 1).Value = "Importing to Revit... please wait..." ri = re #ci = ce while(True): newRev = False rId = sh.Range[rg(ri, ce)] rlog = sh.Range[rg(ri, ce + 8)] rDescription = sh.Range[rg(ri, ce + 4)] revOrder = sh.Range[rg(ri, ce + 1)].Text revOrder = int(revOrder.strip() or 0) if rId.Text and not rDescription.Text: if mn.DeleteRevision(rId.Text): rlog.Value2 = "Revision DELETED!" else: rlog.Value2 = "Can't delete revision!" mn.revIdsToReorder.append([int(revOrder), DB.ElementId(int(rId.Text))]) elif rDescription.Text: try: revId = rId.Text if revId: rev = doc.GetElement(DB.ElementId(int(revId))) else: rev = DB.Revision.Create(doc) revId = rev.Id.ToString() sh.Range[rg(ri, ce)].Value2 = "'" + revId newRev = True mn.revIdsToReorder.append([int(revOrder), DB.ElementId(int(revId))]) rev.Issued = True if sh.Range[rg(ri, ce + 5)].Text == 'Yes' else False if not rev.Issued: rev.RevisionDate = sh.Range[rg(ri, ce + 3)].Text rev.Description = sh.Range[rg(ri, ce + 4)].Text rev.IssuedTo = sh.Range[rg(ri, ce + 6)].Text rev.IssuedBy = sh.Range[rg(ri, ce + 7)].Text numType = sh.Range[rg(ri, ce + 2)].Text if numType == "Numeric": rev.NumberType = DB.RevisionNumberType.Numeric elif numType == "Alphanumeric": rev.NumberType = DB.RevisionNumberType.Alphanumeric elif numType == "None": rev.NumberType = DB.RevisionNumberType.None rlog.Value2 = "Done." else: rlog.Value2 = "Can't update data in Issued revisions. Set Issued to No to allow editing." except: # OSError as err: #print("OS error: {0}".format(err)) rlog.Value2 = "Error trying to update... Is the Id correct?" if newRev: rlog.Value2 = "New revision created. " + rlog.Value2 elif not rId.Text and not rDescription.Text: try: mn.ReorderRevisions() #print("Import is done!") sh.Cells(1, 1).Value = "Import to Revit is done!" except: err = "Process ended. Can't reorder revisions! Are all the revisions listed in Excel? Read HOW TO sheet!" #print(err) sh.Range[rg(1, 1)].Value2 = err sh.Cells.EntireColumn.AutoFit() XL.DisplayAlerts = True return ri += 1
def ExportXL(presetParams): global XL, wb, sh global rID, rFa, rTy global ar, rt, ct, re, ce XL, wb = GetWb() try: sh = wb.Worksheets(shName) except: pass sh.Activate XL.DisplayAlerts = False rID = sh.Range[rg(rt, ct)] rFa = sh.Range[rg(rt, ct + 1)] rTy = sh.Range[rg(rt, ct + 2)] GetDicOfColumns(sh) SetFormatsBefore(presetParams) rID.Value2 = "neoCL.iParametersEditor | Loading..." XL.ScreenUpdating = True XL.ScreenUpdating = False XL.Calculation = False rFa.Value2 = "Family" rTy.Value2 = "Type" sel = ui.Selection() print('[neoCL.iParametersEditor]') if len(sel) < 1: sel = UserSelect() if len(sel) < 1: print('No elements selected!\nProcess ended.') return False print('\n' + str(len(sel)) + ' element(s) selected.\nExporting to Excel... please wait.') print('\nSelected Elements : loading...') ctEq = 1 for eq in sel: print(str(ctEq) + ') ' + eq.name + " | ID[" + str(eq.Id) + "]") ctEq += 1 if presetParams: # Export only parameters defined in Excel dic = GetDicOfColumns(sh) for eq in sel: sh.Range[rg(ar, ce)].Value2 = "'" + str(eq.Id) for col in dic: try: pm = eq.parameters[dic[col]] AddParam(pm, col) except: pass ar += 1 else: # Export all allowed parameters of elements for eq in sel: pmap = eq.parameters.all pmap.sort(key=lambda x: x.name, reverse=False) pmap.sort(key=lambda x: x.Definition.ParameterGroup, reverse=False) sh.Range[rg(ar, ce)].Value2 = "'" + str(eq.Id) for pm in pmap: if IsValidParam(pm): AddParam(pm, None) ar += 1 rID.Value2 = "ID" SetFormatsAfter() XL.ScreenUpdating = True XL.Calculation = True XL.DisplayAlerts = True #ap.BringExcelToFront(XL) print("\nExcel is ready!")