123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- """system calc utils.
- 1. get connectors where model_id='@model_id' and belong_type='Equipment' and mep_system_type='@system_name'
- 2. get path start with connector,end with triple ,cross,equipment,end
- """
- from functools import cmp_to_key
- import vg
- import json
- from relations.src.system_relation import revit_const
- def path2edge(elements):
- """
- Convert path to GraphtEdge
- :param elements:
- :return:
- """
- pass
- def graph_arrange(graph):
- """
- Combine Vertex that connect to virtul Vertex
- :param graph:
- :return:
- """
- pass
- def connector_sort(connector1, connector2):
- """Use Define Sort rule"""
- dic = {revit_const.EQUIPMENT: 0, revit_const.COMPONENT: 1,revit_const.JoinObject:2, revit_const.OTHER: 2, revit_const.PIPE: 3,
- revit_const.DUCT: 4}
- x = dic[connector1.belong_type]
- y = dic[connector2.belong_type]
- return 1 if x > y else -1
- def sort_connectors(connectors):
- """Sort Connector order by Equipment>EquipPart>Other>Pipe>Duct"""
- return sorted(connectors, key=cmp_to_key(lambda x, y: connector_sort(x, y)))
- def is_break_condition(element):
- """Path end Condition."""
- res = element.type in revit_const.FACILITY
- return res
- def dic2obj(d):
- """Convert Dict to Object.
- """
- top = type('new', (object,), d)
- seqs = tuple, list, set, frozenset
- for i, j in d.items():
- j0 = j
- try:
- j0 = json.loads(j0)
- except Exception as e:
- pass
- if isinstance(j0, dict):
- setattr(top, i, dic2obj(j0))
- elif isinstance(j0, seqs):
- setattr(top, i,
- type(j0)(dic2obj(sj) if isinstance(sj, dict) else sj for sj in j0))
- else:
- setattr(top, i, j0)
- return top
- def sqldata2objlist(data):
- '''Convert Sqldata to Object list.
- '''
- return list(map(dic2obj,data))
- def list_to_dict(lis):
- '''Convert list to id Dict.
- :param lis:
- :return:
- '''
- ids = [idx.id for idx in lis if idx.id]
- dic = dict(zip(ids, lis))
- return dic
- def add_attr_is_used(x):
- """
- Add is_used attribute.
- :param x:
- :return:
- """
- x.is_used = False
- return x
- def is_xyz_equal(origin1, origin2):
- """
- Judge the two origin are almost equal.
- :param origin1:
- :param origin2:
- :return:
- """
- v1 = [origin1.X, origin1.Y, origin1.Z]
- v2 = [origin2.X, origin2.Y, origin2.Z]
- return vg.almost_equal(v1, v2, atol=1e-08)
- def get_specify_type_parent(vertex, type):
- parent = vertex
- try:
- while not isinstance(parent, type):
- parent = parent.parent
- except :
- parent=None
- return parent
|