This Programm goes through all Elements of the file and looks which elements use a lot of memory by counting the number of elements and the number of points. Afterwards it givesĀ out lxguids files with which you select the elements in your file, so you can reduce them.

###########################################################################################################
#               Import Libraries
###########################################################################################################
import collections


import  Base, Core, Geom, Draw, Topo
import  OpenLxApp as lx
import  OpenLxUI  as ui
import  OpenLxCmd as cmd

import math
import os


###########################################################################################################
#               Define namespaces
###########################################################################################################
lxstr = Base.StringTool.toString
cstr  = Base.StringTool.toStlString

app   = lx.Application.getInstance()
doc   = app.getActiveDocument()
uiapp = ui.UIApplication.getInstance()
uidoc = uiapp.getUIDocument(doc)
sel   = uidoc.getSelection()


###########################################################################################################
#               All Elements get chosen and saved in elements.
###########################################################################################################
sel.selectAll()

elements = uidoc.getSelectedElements()

standings = []

###########################################################################################################
#               For each Element the GUID and the number of points gets saved.
###########################################################################################################
for e in elements:
        points = Geom.vector_Pnt()
        shape = e.getShape()
        Topo.ShapeTool.getVerticesAsPoints(shape, points)
        glob_id = e.getGlobalId()
        global_id = cstr(glob_id.toString())
        standings.append([global_id, len(points)])
##        if len(points) > 10:
##                print(global_id, len(points))


###########################################################################################################
#               All Elements with the same number of points are put together
###########################################################################################################        
zf_stand = []
status = False
zf_stand.append([standings[0][1],1])
for stand in standings:
        for t in range(0,len(zf_stand)):
            if zf_stand[t][0] == stand[1]:
                zf_stand[t][1] += 1
                status = False
                break
            else:
                status = True
        if status == True:
            zf_stand.append([stand[1],1])
            status = False

###########################################################################################################
#               All Elements, who have totally a lot of points will be saved.
###########################################################################################################
zf_stand.sort()
ebig = []
for s in zf_stand:
        if s[0]*s[1] > 10000 and (s[0]>20):
                ebig.append([s[0],[]])
        print(s, s[0]*s[1])

for s in standings:
        for t in range(0,len(ebig)):
                if s[1] == ebig[t][0]:
                        ebig[t][1].append(s[0])
                        break


###########################################################################################################
#               The lxguids files are written
###########################################################################################################                                        
def writefile(name, data):
        path = sys.path[0]+"/"+name+".lxguids"
        txtfile = open(path, "w")
        for d in data:
                txtfile.write(d+"\n")
        txtfile.close()

for b in ebig:
        writefile(("Points"+repr(b[0])),b[1])

Author: P. Walther

Leave a Reply

Your email address will not be published.