First Commit

This commit is contained in:
2026-05-31 10:17:09 +07:00
commit 17a9c69379
4547 changed files with 1170384 additions and 0 deletions
@@ -0,0 +1,92 @@
import matplotlib.pyplot as plt
import networkx as nx
from itertools import count
import matplotlib.patches as mpatches
from matplotlib import pylab
class IfcEntity:
def __init__(self, data):
self.ifctype = data["ifc_type"]
self.id = data["id"]
def __str__(self):
return "#" + str(self.id) + "_" + self.ifctype
__repr__ = __str__
def get_cmap(n, name="hsv"):
"""Returns a function that maps each index in 0, 1, ..., n-1 to a distinct
RGB color; the keyword argument name must be a standard mpl colormap name."""
return plt.cm.get_cmap(name, n)
G = nx.Graph()
colors = []
color_map = []
ifctypes = set()
types_color = {}
for e in ents.values():
for r in e["attributes"][1]:
G.add_edge(e["id"], r)
color_map.append("red")
ifctypes.add(e["ifc_type"])
ifctypes.add(ents[r]["ifc_type"])
cmap = get_cmap(len(ifctypes), "rainbow")
colors = [cmap(i) for i in range(len(ifctypes))]
type_color_mapping = {}
cols = []
i = 0
for eid in G.nodes():
t = ents[eid]["ifc_type"]
# print(t)
if t in type_color_mapping.keys():
cols.append(type_color_mapping[t])
else:
type_color_mapping[t] = colors[i]
i = i + 1
cols.append(type_color_mapping[t])
# k controls the distance between the nodes and varies between 0 and 1
# iterations is the number of times simulated annealing is run
# default k=0.1 and iterations=50
pos = nx.spring_layout(G, k=0.8, iterations=60) # positions for all nodes
nodes = G.nodes()
print(get_cmap(len(nodes)))
cmap = get_cmap(len(nodes))
c_map = [cmap(i) for i in range(len(nodes))]
nc = nx.draw_networkx_nodes(G, pos, nodelist=nodes, node_color=cols, node_size=200)
# edges
elarge = [(u, v) for (u, v, d) in G.edges(data=True)]
nx.draw_networkx_edges(G, pos, edgelist=elarge, width=1)
nx.draw_networkx_labels(G, pos, font_size=8, font_family="sans-serif")
red_patch = mpatches.Patch(color="red", label="The red data")
blue_patch = mpatches.Patch(color="blue", label="The blue data")
patches = []
for k, v in type_color_mapping.items():
patches.append(mpatches.Patch(color=v, label=k))
plt.legend(handles=patches, fontsize=8)
plt.axis("off")
plt.show()