public void snaps_begin_grab(SceneObject so) { if (EnableSnapping == false) { return; } Snaps.IgnoreSet.Add(so); Snaps.AddToActive(cockpit.Scene.Selected); Snaps.AddToActive(cockpit.Scene.Find((x) => x is PivotSO)); cockpit.Scene.AddUIElement(SnapHelper); }
// update snaps private void Scene_SelectionChangedEvent(object sender, EventArgs e) { // update active snap set based on new selection var selected = scene.Selected; Snaps.ClearActive(); foreach (SceneObject so in selected) { if (so is PivotSO || Snaps.IgnoreSet.Contains(so)) { continue; } Snaps.AddToActive(so); } Snaps.AddToActive(scene.Find((x) => x is PivotSO)); }
override protected void OnUpdateCapture(Ray3f worldRay, Standard3DWidget w) { SceneObject hitSO = null; SORayHit hit; IEnumerable <SceneObject> targetSOs = this.targets; if (parentScene.FindSORayIntersection(worldRay, out hit, (x) => ((x is PivotSO) == false) && (targetSOs.Contains(x) == false))) { hitSO = hit.hitSO; } if (hitSO != null && hitSO != curActiveSO) { Snaps.RemoveFromActive(curActiveSO); Snaps.AddToActive(hitSO); curActiveSO = hitSO; } }