public override void OnSelectionChanged(RenderControl render, PickedResult result) { var item = result.GetItem(); if (item.GetNode() == null) { return; } var ssn = BrepSceneNode.Cast(item.GetNode()); if (ssn == null) { return; } if (item.GetShapeType() == EnumShapeFilter.Face) { var face = ssn.GetShape().GetShape().FindChild(EnumTopoShapeType.Topo_FACE, (int)item.GetShapeIndex()); if (face != null) { var surface = new ParametricSurface(face); var pt = item.GetPoint().GetPosition(); var param = surface.ComputeClosestPoint(pt.ToPnt(), GP.Resolution(), GP.Resolution()); var values = surface.D1(param.X(), param.Y()); var postion = Vector3.From(values.GetPoint()); var vecs = values.GetVectors(); var dir = Vector3.From(vecs[0].Crossed(vecs[1])); dir.normalize(); mArrow.SetLocation(postion, dir); mArrow.RequstUpdate(); mArrow.Update(); render.GetContext().GetSelection().Clear(); render.RequestDraw(EnumUpdateFlags.Scene); } } }