LOD TOOL Final

 avatar
JO00
python
4 days ago
12 kB
2
No Index
import unreal
import datetime

##gets date time for my debug log printing
print(str(datetime.datetime.now()))
editor_stat_meshes=[]
textlibrary=unreal.TextLibrary()
transferlist=[]
geteditor=unreal.get_editor_subsystem(unreal.StaticMeshEditorSubsystem)


getselecteditor=unreal.EditorUtilityLibrary.get_selected_assets_of_class(unreal.StaticMesh)
getselectlevel=unreal.get_editor_subsystem(unreal.EditorActorSubsystem).get_selected_level_actors() 

def clean_static_meshes(listofmeshes):
    counter=0
    for x in listofmeshes:
        #is static mesh
        if isinstance(listofmeshes[counter], unreal.StaticMeshActor):
            editor_stat_meshes.append(listofmeshes[counter])
            counter=counter+1
        #not static mesh
        else:
            counter=counter+1

clean_static_meshes(getselectlevel)

def data_for_array_list(listofmeshes):
    counteritems=0
    #repeat for all selected items
    while counteritems!=len(listofmeshes):
        try:
            thecomponent=listofmeshes[counteritems].static_mesh_component
            getstaticmesh=thecomponent.static_mesh
    
        except AttributeError:
            getstaticmesh=listofmeshes[counteritems]
        

    ##thumb setting for first
        if counteritems==0:
            datapath=getstaticmesh.get_path_name()
            data_for_thumb = unreal.EditorAssetLibrary.find_asset_data(datapath)
            asset_thumb.set_asset(data_for_thumb)
    #now for data adding
    #mesh name and lod counter for later
        nameofmesh=getstaticmesh.get_name()
        transferlist.append(str(nameofmesh))
        numberoflods=getstaticmesh.get_num_lods()
    #instances
        instcounter=0
        theeditorworld=unreal.EditorLevelLibrary.get_editor_world()
        worldactors=unreal.GameplayStatics.get_all_actors_of_class(theeditorworld, unreal.Actor)

        for actor in worldactors:
                staticchecker = actor.get_components_by_class(unreal.StaticMeshComponent)
                for selected in staticchecker:
                    pickedmesh = selected.get_editor_property("static_mesh")
                    if pickedmesh == getstaticmesh:
                        instcounter += 1
        transferlist.append(str(instcounter))
    ##current tricount and vertex count
        transferlist.append(str(getstaticmesh.get_num_triangles(0)))
        transferlist.append(str(geteditor.get_number_verts(getstaticmesh,0)))    
    ##total lod count
        transferlist.append(str(getstaticmesh.get_num_lods()))
    #material count
        numberofmats=geteditor.get_number_materials(getstaticmesh)
        transferlist.append(str(numberofmats))

    #scale info
        scaleofmesh=getstaticmesh.get_bounding_box()
        dimensionsx=round(scaleofmesh.max.x-scaleofmesh.min.x,1)
        dimensionsy=round(scaleofmesh.max.y-scaleofmesh.min.y,1)
        dimensionsz=round(scaleofmesh.max.z-scaleofmesh.min.z,1)
        combineddimensions=str(dimensionsx)+"cm x "+str(dimensionsy)+"cm x "+str(dimensionsz)+"cm"
        transferlist.append(combineddimensions)

    #collision enabled, collision type and nanite
        gettingcoll=getstaticmesh.get_editor_property('body_setup')
        check_if_enabled = gettingcoll.get_editor_property('collision_reponse').value
        if check_if_enabled==0:
            transferlist.append("Enabled")
        else:
            transferlist.append("Disabled")

        collisioncomp=geteditor.get_collision_complexity(getstaticmesh)
        thenumberofflag=collisioncomp.value
        if thenumberofflag==0:
            transferlist.append("Default")
        elif thenumberofflag==1:
            transferlist.append("Simple and Complex")
        elif thenumberofflag==2:
            transferlist.append("Simple as Complex")
        elif thenumberofflag==3:
            transferlist.append("Complex as Simple")
        
        get_nanite_settings = getstaticmesh.get_editor_property("nanite_settings")
        checkenablednanite = get_nanite_settings.get_editor_property("enabled")

        if checkenablednanite==True:
            transferlist.append("Enabled")
        else :
            transferlist.append("Disabled")
    #lod data for header 2
    #biglodcounter
        listlodcounter=0
        LODNUMBERLISTER=""
        while listlodcounter!=numberoflods:
            LODNUMBERLISTER+="LOD0"+str(listlodcounter)+"{/n}"
            listlodcounter+=1
        replacelonglodcounter = LODNUMBERLISTER.replace("{/n}", "\n")
        transferlist.append(replacelonglodcounter)
    ##lod tricount per lod and vertex count per lod
        lodcounter=0
        tricountlister=""
        vertexlister=""
        while lodcounter!=numberoflods:
            tricountlister+=str(getstaticmesh.get_num_triangles(lodcounter))+"{/n}"
            vertexlister+=str(geteditor.get_number_verts(getstaticmesh,lodcounter))+"{/n}"
            lodcounter=lodcounter+1
        
        replacetricountlister = tricountlister.replace("{/n}", "\n")
        replacevertexlister = vertexlister.replace("{/n}", "\n")
        transferlist.append(replacetricountlister)
        transferlist.append(replacevertexlister)
    
    ##screensize per lod
        getscreensizes=unreal.EditorStaticMeshLibrary.get_lod_screen_sizes(getstaticmesh)
        nicerscreenlist=""
        listcounter=0
        while listcounter!= len(getscreensizes):
            percentofscreen=round(getscreensizes[listcounter]*50,2)
            nicerscreenlist+=str(percentofscreen)+"{/n}"
            listcounter=listcounter+1
        
        replacescreensize = nicerscreenlist.replace("{/n}", "\n")
        transferlist.append(replacescreensize)
    ##lod reduction
        tricountcounter=0
        tricountreductionlist=""
        while tricountcounter!=numberoflods:
            currenttricountdensity=100-round(getstaticmesh.get_num_triangles(tricountcounter)/getstaticmesh.get_num_triangles(0)*100,2)
            tricountreductionlist+=str(currenttricountdensity)+"{/n}"
            tricountcounter=tricountcounter+1
        
        replacetricount = tricountreductionlist.replace("{/n}", "\n")
        transferlist.append(replacetricount)
    ##vertex density per cm
        counter=0
        listofvertexdensity=""
        while counter!=numberoflods:
            currentvertex=geteditor.get_number_verts(getstaticmesh,counter)
            lodscaleofmesh=getstaticmesh.get_bounding_box()
            lodlength=round(lodscaleofmesh.max.x-lodscaleofmesh.min.x,1)
            diameterlod=round(currentvertex/lodlength,2)
            listofvertexdensity+=str(diameterlod)+"{/n}"
            counter=counter+1 
        
        replacingstringline = listofvertexdensity.replace("{/n}", "\n")
        transferlist.append(replacingstringline)
        print(replacingstringline)

    ###rowheader3 - materials info
        matnamescollective=""
        matcounter=0
        while matcounter!=numberofmats:
            materialselected=getstaticmesh.get_material(matcounter)
            if materialselected:
                gettingmat=materialselected.get_name()
                matnamescollective+="Mat No "+str(matcounter)+"= "+str(gettingmat)
            else:
                print("No mat detected")
            matcounter=matcounter+1
        transferlist.append(matnamescollective)
    
    ##sending data to selection if first runtime
        print(str(counteritems))
        if counteritems==0:
            print("first runtime")
            text_solotricount=textlibrary.conv_int_to_text(getstaticmesh.get_num_triangles(0))
            text_solovertcount=textlibrary.conv_int_to_text(geteditor.get_number_verts(getstaticmesh,0))
            text_nameofmesh=textlibrary.conv_string_to_text(str(nameofmesh))
            rep_mesh_name.set_text(text_nameofmesh)
            text_dimensionsx=textlibrary.conv_string_to_text(combineddimensions)
            scale_x.set_text(text_dimensionsx)
            text_numberoflods=textlibrary.conv_string_to_text(str(numberoflods))
            lod_counter_total.set_text(text_numberoflods)
            text_LODNUMBERLISTER=textlibrary.conv_string_to_text(replacelonglodcounter)
            lod_list_1.set_text(text_LODNUMBERLISTER)
            lod_list_2.set_text(text_LODNUMBERLISTER)
            text_tricountlister=textlibrary.conv_string_to_text(replacetricountlister)
            text_vertexlister=textlibrary.conv_string_to_text(replacevertexlister)
            lod_settings_lod_tricount.set_text(text_tricountlister)
            lod_vert_list.set_text(text_vertexlister)
            tricount_selected_1.set_text(text_solotricount)
            vertcount_selected.set_text(text_solovertcount)
            if checkenablednanite==True:
                nanite_enabled.set_text(textlibrary.conv_string_to_text("Enabled"))
            else :
                nanite_enabled.set_text(textlibrary.conv_string_to_text("Disabled"))
            scene_insts.set_text(textlibrary.conv_int_to_text(instcounter))
            text_nicerscreenlist=textlibrary.conv_string_to_text(replacescreensize)
            lod_settings_lod_screen_size.set_text(text_nicerscreenlist)
            numberofmatsname=str(numberofmats)
            text_numberofmats=textlibrary.conv_string_to_text(numberofmatsname)
            material_count_1.set_text(text_numberofmats)
            vertexredcounter=0
            highestvertex=geteditor.get_number_verts(getstaticmesh,0)
            vertexreductionlist=""
            while vertexredcounter!=numberoflods:
                vertexreductionlist+=str(100-round(geteditor.get_number_verts(getstaticmesh,vertexredcounter)/geteditor.get_number_verts(getstaticmesh,0)*100,2))+"{/n}"
                vertexredcounter=vertexredcounter+1
            replacevertextreductionlist = vertexreductionlist.replace("{/n}", "\n")
            text_vertexreductionlist=textlibrary.conv_string_to_text(replacevertextreductionlist)
            text_vertexreductionlist=textlibrary.conv_string_to_text(replacevertextreductionlist)
            lod_settings_lod_screen_size_1.set_text(text_vertexreductionlist)
            text_tricountreductionlist=textlibrary.conv_string_to_text(replacetricount)
            lod_settings_lod_tricount_1.set_text(text_tricountreductionlist)
            text_listofvertexdensity=textlibrary.conv_string_to_text(replacingstringline)
            lod_settings_lod_screen_size_1.set_text(text_listofvertexdensity)
            if thenumberofflag==0:
                collision_type.set_text(textlibrary.conv_string_to_text("Default"))
            elif thenumberofflag==1:
                collision_type.set_text(textlibrary.conv_string_to_text("Simple and Complex"))
            elif thenumberofflag==2:
                collision_type.set_text(textlibrary.conv_string_to_text("Simple as Complex"))
            elif thenumberofflag==3:
                collision_type.set_text(textlibrary.conv_string_to_text("Complex as Simple"))

            gettingcoll=getstaticmesh.get_editor_property('body_setup')
            check_if_enabled = gettingcoll.get_editor_property('collision_reponse').value
            collisionenabledquestion=False
            if check_if_enabled==0:
                collison_enable_disable.set_text(textlibrary.conv_string_to_text("Enabled"))

            else:
                collison_enable_disable.set_text(textlibrary.conv_string_to_text("Disabled"))
            print("got here!!")
        counteritems+=1
        print("got here instead")

amountofitems=len(getselecteditor)
amountofitems2=len(editor_stat_meshes)



if dropdowncheck.get_selected_index()!=0: #content browser
    asset_data_for_thumb=getselecteditor[0]
    no_selected_assets_1.set_text(textlibrary.conv_int_to_text(amountofitems))
    data_for_array_list(getselecteditor)

elif dropdowncheck.get_selected_index()!=1: #level
    no_selected_assets_1.set_text(textlibrary.conv_int_to_text(amountofitems2))
    data_for_array_list(editor_stat_meshes)
    asset_data_for_thumb=editor_stat_meshes[0]


else: #no selection
    print("empty no selection!")

Editor is loading...