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