Visio - проверка подключения фигур - PullRequest
2 голосов
/ 16 марта 2012

Я создаю диаграмму Visio, но мне нужно проверить, подключены ли существующие фигуры.Я написал метод с 3 различными способами, чтобы определить это.Я не мог найти какие-либо формы форм, чтобы сделать это напрямую.Вот что я придумал.Я предпочитаю третий метод, потому что он не включает итерацию.Есть еще предложения?

private bool  ShapesAreConnected(Visio.Shape shape1, Visio.Shape shape2)
    {  
     // in Visio our 2 shapes will each be connected to a connector, not to each other
     // so we need to see if theyare both connected to the same connector

       bool Connected = false;
        // since we are pinning the connector to each shape, we only need to check
        // the fromshapes attribute on each shape
        Visio.Connects shape1FromConnects = shape1.FromConnects;
        Visio.Connects shape2FromConnects = shape2.FromConnects;

        foreach (Visio.Shape connect in shape1FromConnects)
        {
            // first method
            // for each shape shape 1 is connected to, see if shape2 is connected 
            var shape = from Visio.Shape cs in shape2FromConnects where cs == connect select cs;
            if (shape.FirstOrDefault() != null) Connected = true;

            // second method, convert shape2's connected shapes to an IEnumerable and
            // see if it contains any shape1 shapes  
            IEnumerable<Visio.Shape> shapesasie = (IEnumerable<Visio.Shape>)shape2FromConnects;


            if (shapesasie.Contains(connect))
            {
                return true;
            }
        }

        return Connected;

        //third method
       //convert both to IEnumerable and check if they intersect
        IEnumerable<Visio.Shape> shapes1asie = (IEnumerable<Visio.Shape>)shape1FromConnects;
        IEnumerable<Visio.Shape> shapes2asie = (IEnumerable<Visio.Shape>)shape2FromConnects;
        var shapes = shapes1asie.Intersect(shapes2asie);
        if (shapes.Count() > 0) { return true; }
        else { return false; }

    }

1 Ответ

1 голос
/ 17 марта 2012

Если вы используете Visio 2010, взгляните на API подключения

Ссылка из блога Visio MSDN http://blogs.msdn.com/b/visio/archive/2009/09/22/the-visio-2010-connectivity-api.aspx

Для справки есть также связанный вопрос по StackOverflow Форма разъемов в Visio

...