首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择一个实体的列表并获取它们的属性?

如何选择一个实体的列表并获取它们的属性?
EN

Stack Overflow用户
提问于 2020-09-16 12:21:14
回答 2查看 656关注 0票数 0

我想通过鼠标单击来选择一个实体列表,然后要求它们的属性。我知道可以通过使用(请查看代码)来选择实体。

但是如何获得这个实体列表的属性(例如,如果实体是圆柱体,并且需要它的起始点和结束点)

代码语言:javascript
复制
controlDrawing.ViewportLayoutTower.ActionMode = devDept.Eyeshot.actionType.SelectByPick
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-18 14:58:12

您可以简单地在控件的MouseDown事件中找到鼠标下的所有实体,并从它们获得所需的东西。

代码语言:javascript
复制
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];
            }
        }        
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-09-23 21:29:31

你在找演员。当将对象放入视图并将对象从视图中取出时,它们总是作为实体进行强制转换,因为这是所有实体的父类。如果要使用柱面属性,则需要将其转换为添加到视图端口的任何子类。不幸的是,没有实体的柱面子类,所以我假设您创建了Mesh.CreateCylinder()。这是一个网格类,传入函数的变量(起始点和结束点)是本地作用域的函数,不再可以被网格类访问。

绕过这一点的一种方法是将此信息添加到实体的EntityData属性中。此属性可以保存您创建的任何对象。

代码语言:javascript
复制
        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

另外,如果它是继承实体的类的可用属性,则可以像这样检索该属性。

代码语言:javascript
复制
        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
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63919972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档