private void DrawBond(Bond bond, PointF pt, int handleIndex) { BondAttachment ba = BondAttachmentExtensions.GetTargetFromHandleIndex(handleIndex); HandleIcon handleIcon = GetHandleIcon(bond.BondType, TransformKind.Scale); if (handleIcon != HandleIcon.Anchor && handleIcon != HandleIcon.Spring) { float hr = handleSize / 2f; int variationIndex = handleIndex % icons[(int)handleIcon].Length; Point p = new Point((int)(pt.X - hr), (int)(pt.Y - hr)); graphicHolder.DrawImage(icons[(int)handleIcon][variationIndex], p); } long handleHash = bond.GetHandleHash(ba); if (bondPoints.ContainsKey(handleHash)) { // todo: need to allow vertical align inside horz dist chain (which will conflict on a handle). Console.WriteLine("conflict handle: " + handleHash); } else { bondPoints.Add(handleHash, pt); } }
public void AddInstance(DesignInstance inst) { PointF[] pts = (inst.IsRotated) ? inst.GetTransformedCenter() : inst.GetTransformedPoints().GetMidpointsAndCenter(); for (int i = 0; i < pts.Length; i++) { BondAttachment ba = BondAttachmentExtensions.GetTargetFromHandleIndex(i); AddPoint(xStops, pts[i].X, new CrossPoint(pts[i].Y, inst.InstanceHash, ba)); AddPoint(yStops, pts[i].Y, new CrossPoint(pts[i].X, inst.InstanceHash, ba)); } }