我想通过鼠标单击来选择一个实体列表,然后要求它们的属性。我知道可以通过使用(请查看代码)来选择实体。
但是如何获得这个实体列表的属性(例如,如果实体是圆柱体,并且需要它的起始点和结束点)
controlDrawing.ViewportLayoutTower.ActionMode = devDept.Eyeshot.actionType.SelectByPick发布于 2020-09-18 14:58:12
您可以简单地在控件的MouseDown事件中找到鼠标下的所有实体,并从它们获得所需的东西。
private void myViewport_MouseDown(object sender, MouseEventArgs e)
{
// if left click
if (e.Button == MouseButtons.Left)
{
// get all entities under the mouse cursor
var entityIndexes = myViewport.GetAllEntitiesUnderMouseCursor(e.Location);
// if there is any entities
if entityIndexes.Any())
{
foreach(var index in entityIndexes)
{
// get the entity and do something
var entity = myViewport.Entities[index];
}
}
}
}发布于 2020-09-23 21:29:31
你在找演员。当将对象放入视图并将对象从视图中取出时,它们总是作为实体进行强制转换,因为这是所有实体的父类。如果要使用柱面属性,则需要将其转换为添加到视图端口的任何子类。不幸的是,没有实体的柱面子类,所以我假设您创建了Mesh.CreateCylinder()。这是一个网格类,传入函数的变量(起始点和结束点)是本地作用域的函数,不再可以被网格类访问。
绕过这一点的一种方法是将此信息添加到实体的EntityData属性中。此属性可以保存您创建的任何对象。
public class myCylinderEntData
{
public double radius = 2d;
public double height = 5d;
public int slices = 10;
}
double dRadius = 2d;
double dHeight = 5d;
int iSlices = 10;
myCylinderEntData cyl1EntData = new myCylinderEntData() { radius = dRadius, height = dHeight, slices = iSlices };
Mesh cylinder1 = Mesh.CreateCylinder(dRadius, dHeight, iSlices);
cylinder1.EntityData = cyl1EntData;
vp1.Entities.Add(cylinder1); // Add to viewport
Entity retrivedEnt = vp1.Entities[0];
myCylinderEntData myRetrievedEntData = (myCylinderEntData)retrivedEnt.EntityData; // get Data back after clicked
int[] clickedEntsIndex = vp1.GetAllEntitiesUnderMouseCursor(Cursor.Position);// e.Location) ; // retrieve from viewport另外,如果它是继承实体的类的可用属性,则可以像这样检索该属性。
int[] clickedEntsIndex = vp1.GetAllEntitiesUnderMouseCursor(Cursor.Position);// e.Location) ; // retrieve from viewport
foreach(int index in clickedEntsIndex)
{
if(vp1.Entities[index] is Mesh) // Check object type for whichever child class you want to convert to
{
Mesh myClickedMesh = (Mesh)vp1.Entities[index];
// Here you access to all of your Meshes public Variables
}
else if (vp1.Entities[index] is Solid)
{
Solid myClickedSolid = (Solid)vp1.Entities[index];
// Here you access to all of your Solid public Variables
}
}https://stackoverflow.com/questions/63919972
复制相似问题