protected System.Drawing.Drawing2D.Matrix m; // Matrice di trasfrmazione 2D /// <summary> /// Costruttore /// </summary> public Elemento() { name = string.Empty; id = UNASSIGNED; sel = false; clipped = Def.ClipFlag.Inside; connesso = false; m = new Matrix(); // Matrice identità }
public override Def.ClipFlag Clip(Vista v) { Def.ClipFlag clip1 = Nd1.Clipped; Def.ClipFlag clip2 = Nd2.Clipped; if ((clip1 | clip2) == Def.ClipFlag.Inside) // Entrambi gli estremi all'interno (bitwise OR è zero): no clip { clipped = Def.ClipFlag.Inside; } else if ((clip1 & clip2) != Def.ClipFlag.Inside) // Bitwise AND non è zero: condividono una area esterna: clip { clipped = Def.ClipFlag.Outside; } else { clipped = Def.ClipFlag.Inside; // Clip parziale. Non si esegue il clipping sui double, ... } // ...ma si lascia fare a Windows.Graphics, su coordiante intere, più veloce return(clipped); }
/// <summary> /// Verifica se un punto è nella finestra visibile /// </summary> /// <param name="p"></param> /// <returns></returns> public Def.ClipFlag IsInsideWorld(Point2D p) { Def.ClipFlag pos = Def.ClipFlag.Inside; if ((p.X - szWorldTopLeft.X) * verso.X < 0) { pos |= Def.ClipFlag.Left; } else if ((p.X - szWorldBottomRight.X) * verso.X > 0) { pos |= Def.ClipFlag.Right; } if ((p.Y - szWorldTopLeft.Y) * verso.Y < 0) { pos |= Def.ClipFlag.Top; } else if ((p.Y - szWorldBottomRight.Y) * verso.Y > 0) { pos |= Def.ClipFlag.Bottom; } return(pos); }