I want to implement a plugin similar built in BlockEdit and edit block when double click imitating SU, but PickObjects with PickContext return empty. The sample code is below
class BlockEditor:MouseCallback
{
protected override void OnMouseDoubleClick(MouseCallbackEventArgs e)
{
RhinoObject rhinoObject = GetPickedObject(e);
if(null == rhinoObject)
{
return;
}
}
protected RhinoObject GetPickedObject(MouseCallbackEventArgs e)
{
var pickContext = new PickContext
{
View = e.View,
PickStyle = PickStyle.PointPick,
};
Guid displayModeId = e.View.ActiveViewport.DisplayMode.Id;
if(displayModeId == DisplayModeDescription.ShadedId ||
displayModeId == DisplayModeDescription.RenderedId)
{
pickContext.PickMode = PickMode.Shaded;
}
var xform = e.View.ActiveViewport.GetPickTransform(e.ViewportPoint);
pickContext.SetPickTransform(xform);
Line pick_line;
e.View.ActiveViewport.GetFrustumLine(e.ViewportPoint.X, e.ViewportPoint.Y, out pick_line);
pickContext.PickLine = pick_line;
pickContext.UpdateClippingPlanes();
ObjRef[] objRefs = Doc.Objects.PickObjects(pickContext);
if (null == objRefs || !objRefs.Any())
{
return null;
}
return objRefs[0].Object();
}
}
I have used similar code to pick objects with GetPoint, it works. The code is below
public class GetObject:GetPoint
{
protected override void OnMouseMove(GetPointMouseEventArgs e)
{
var pick_context = new PickContext
{
View = e.Viewport.ParentView,
PickStyle = PickStyle.PointPick,
};
var xform = e.Viewport.GetPickTransform(e.WindowPoint);
pick_context.SetPickTransform(xform);
Line pick_line;
e.Viewport.GetFrustumLine(e.WindowPoint.X, e.WindowPoint.Y, out pick_line);
pick_context.PickLine = pick_line;
pick_context.UpdateClippingPlanes();
ObjRef[] objRefs = RhinoDoc.ActiveDoc.Objects.PickObjects(pick_context);
if (null == objRefs || !objRefs.Any())
{
return;
}
}
}
Rhino version:Version 7 SR13(7.13.21348.13001, 2021-12-14)
OS: Windows 10
Nuget package: 7.13.21348.13000