Beispiel #1
0
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 #############################################
Beispiel #2
0
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"
Beispiel #3
0
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
Beispiel #4
0
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()   
Beispiel #5
0
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
Beispiel #8
0
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
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #12
0
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()   
Beispiel #13
0
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!")