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