原流程:點「新增規則」→ 拖曳起點關聯活動 → 拖曳終點關聯活動。優化後:在活動中心區域按下滑鼠拖曳,自動建立臨時規則,起點鎖定該活動,終點跟隨滑鼠移動,釋放時若落在另一活動上則確認關聯,否則取消。
Ellipse)作為中心觸發區。MouseLeftButtonDown 事件:建立臨時規則,設定 IsTemporaryRule = true,起點關聯當前活動,終點位置同步滑鼠座標,加入容器並置於最高 Z-Index。if (_container.CurrentTemporaryRule == null)
{
_container.CurrentTemporaryRule = new Rule(_container);
_container.CurrentTemporaryRule.IsTemporaryRule = true;
_container.AddRule(_container.CurrentTemporaryRule);
_container.CurrentTemporaryRule.SetBeginActivity(this);
_container.CurrentTemporaryRule.EndPointPosition = _container.CurrentTemporaryRule.BeginPointPosition;
_container.CurrentTemporaryRule.ZIndex = _container.NextMaxIndex;
}
網友建議連線端點應在活動邊緣而非中心。配合上一章的交點平滑移動邏輯,連線自動計算與活動幾何邊界的交點,視覺更自然。