Example #1
0
        public static Relation OverlapOperator(ModelInfo modelInfo1, ModelInfo modelInfo2)
        {
            if (modelInfo1 != null && modelInfo2 != null)
            {
            }
            else
            {
                return(null);
            }
            // QL4BIMspatial.IContainOperator

            // Call the Singleton Class to get the actual loaded elements -> Connection to the DataModel
            ModelController _modelController = ModelController.Instance;

            var model1 = _modelController.GetModel(modelInfo1.modelId) as IfcModel;
            var model2 = _modelController.GetModel(modelInfo2.modelId) as IfcModel;

            var result        = new Relation(Guid.Parse(modelInfo1.modelId), Guid.Parse(modelInfo2.modelId));
            var resCollection = result.Collection as ObservableCollection <Tuple <Guid, Guid> >;

            var elements1 = model1.GetElements(modelInfo1.elementIds);
            var elements2 = model1.GetElements(modelInfo2.elementIds);

            var list_1 = GeometryHandler.CreateTriangleMeshes(elements1, model1.xModelContext);
            var list_2 = GeometryHandler.CreateTriangleMeshes(elements2, model2.xModelContext);

            // Init the Settings for the operators
            var settings = container.Resolve <ISettings>();

            settings.Direction.RaysPerSquareMeter = 100;
            settings.Direction.PositiveOffset     = 100;
            // The mapping of the operators is because of the transformation of the model
            // Init the Operator

            var op = container.Resolve <IOverlapOperator>();

            // var op = container.Resolve<ITouchOperator>();


            foreach (var item1 in list_1)
            {
                foreach (var item2 in list_2)
                {
                    var abs = op.Overlap(item1, item2);
                    if (abs)
                    {
                        resCollection.Add(new Tuple <Guid, Guid>(IfcGuid.FromIfcGuid(item1.Name), IfcGuid.FromIfcGuid(item2.Name)));
                    }
                }
            }
            return(result);
        }