Skip to content

A mvdXML checker and w3c SPARQL converter, as an IfcOpenShell submodule or stand-alone.

License

Notifications You must be signed in to change notification settings

sonicg83/python-mvdxml

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

python-mvdxml

A mvdXML checker and w3c SPARQL converter, as an IfcOpenShell submodule or stand-alone.

WARNING: While this repository has many useful building blocks to build software around mvdXML and IFC, there are many mvdXML dialects and not all variants are likely to be fully supported.

Quickstart

Extraction

import ifcopenshell
from ifcopenshell.mvd import mvd

mvd_concept = mvd.open_mvd("examples/wall_extraction.mvdxml")
file = ifcopenshell.open("Duplex_A_20110505.ifc")

all_data = mvd.get_data(mvd_concept, file, spreadsheet_export=True)

non_respecting_entities = mvd.get_non_respecting_entities(file, all_data[1])
respecting_entities = mvd.get_respecting_entities(file, all_data[1])
# Create a new file
new_file = ifcopenshell.file(schema=file.schema)
proj = file.by_type("IfcProject")[0]
new_file.add(proj)

for e in respecting_entities:
    new_file.add(e)

new_file.write("new_file.ifc")
# Visualize results
mvd.visualize(file, non_respecting_entities)
Validation
import ifcopenshell

from ifcopenshell.mvd import mvd
from colorama import Fore
from colorama import Style

concept_roots = list(ifcopenshell.mvd.concept_root.parse(MVDXML_FILENAME))
file = ifcopenshell.open(IFC_FILENAME)

tt = 0 # total number of tests
ts = 0 # total number of successful tests

for concept_root in concept_roots:
    print("ConceptRoot: ", concept_root.entity)
    for concept in concept_root.concepts():
        tt = tt + 1
        print("Concept: ", concept.name)
        try:

            if len(concept.template().rules) > 1:
                attribute_rules = []
                for rule in concept.template().rules:
                    attribute_rules.append(rule)
                rules_root = ifcopenshell.mvd.rule("EntityRule", concept_root.entity, attribute_rules)
            else:
                rules_root = concept.template().rules[0]
            ts = ts + 1
            finst = 0 #failed instances

            for inst in file.by_type(concept_root.entity):
                try:
                    data = mvd.extract_data(rules_root, inst)
                    valid, output = mvd.validate_data(concept, data)
                    if not valid:
                        finst = finst + 1
                    print("[VALID]" if valid else Fore.RED +"[failure]"+Style.RESET_ALL, inst)
                    print(output)
                except Exception as e:
                    print(Fore.RED+"EXCEPTION: ", e, Style.RESET_ALL,inst)
                    print ()
            print (int(finst), "out of", int(len(file.by_type(concept_root.entity))), "instances failed the check")
            print ("---------------------------------")
        except Exception as e:
            print("EXCEPTION: "+Fore.RED,e,Style.RESET_ALL)
            print("---------------------------------")
    print("---------------------------------")
print("---------------------------------")

tf = tt-ts # total number of failed tests

print ("\nRESULTS OVERVIEW")
print ("Total number of tests: ",tt)
print ("Total number of executed tests: ", ts)
print ("Total number of failed tests: ", tf)

About

A mvdXML checker and w3c SPARQL converter, as an IfcOpenShell submodule or stand-alone.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%