3 Stimmen

Visio - Prüfen, ob Formen miteinander verbunden sind

Ich erstelle ein Visio-Diagramm, muss aber prüfen, ob vorhandene Formen verbunden sind. Ich habe eine Methode mit 3 verschiedenen Möglichkeiten geschrieben, um dies festzustellen. Ich konnte keine Shape-Methoden finden, die dies direkt tun. Hier ist, was ich mir ausgedacht habe. Ich bevorzuge die 3. Methode, weil sie keine Iteration beinhaltet. Haben Sie weitere Vorschläge?

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; }

    }

1voto

saveenr Punkte 7839

Wenn Sie Visio 2010 verwenden, werfen Sie einen Blick auf die Konnektivitäts-API

Link vom Visio MSDN Blog http://blogs.msdn.com/b/visio/archive/2009/09/22/the-visio-2010-connectivity-api.aspx

Als Referenz gibt es auch eine verwandte Frage auf StackOverflow Shape-Verbindungen in Visio

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X