明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2161|回复: 3

根据卡恩的代码,写的一个图块预览。

  [复制链接]
发表于 2019-2-21 15:11:46 | 显示全部楼层 |阅读模式
做个标记备忘。// Helper function to generate an Image from a BitmapSource
        // 函数:从位图源生成190*120图像
        private static Image ImageSourceToGDI(BitmapSource src)
        {
            var ms = new MemoryStream();
            var encoder = new BmpBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(src));
            encoder.Save(ms);
            ms.Flush();
            return Image.FromStream(ms);
        }
1.界面
private void BlockPreviews2_Load(object sender, EventArgs e)
        {
            Database db = HostApplicationServices.WorkingDatabase;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                //打开块表
                var bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
                var namelist = new List<string>();//新建图块名称表
                ImageList imglist = new ImageList();//新建图块缩略图表
                imglist.ImageSize = new Size(190,120);// 图片尺寸分别是宽和高
                foreach (ObjectId blockRecordId in bt)//循环遍历块表中的块表记录
                {
                    var btr = (BlockTableRecord)trans.GetObject(blockRecordId, OpenMode.ForRead);//打开块表记录对象
                    if (!btr.IsAnonymous && !btr.IsLayout)//在下拉列表框中只加入非匿名块和非布局块的名称
                    {
                        namelist.Add(btr.Name);//添加到图块名称表
                        imglist.Images.Add(ImageSourceToGDI(CMLContentSearchPreviews.GetBlockTRThumbnail(btr) as BitmapSource));//添加到图块缩略图表
                    }
                }
                listView1.View = View.LargeIcon;//设置为大图标视图
                listView1.MultiSelect = false; //只能单选
                listView1.LargeImageList = imglist;// 这里设置listView的SmallImageList ,用imgList将其撑大
                for (int i = 0; i < imglist.Images.Count; i++)
                {
                    var lvi = new ListViewItem();//新建ListViewItem
                    lvi.ImageIndex = i;//取出图片
                    lvi.Text = namelist[i];//取出图块名称
                    listView1.Items.Add(lvi);//添加到listView1
                }
            }
        }


2.获取选中项
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listView1.FocusedItem != null) //这个if必须的,不然会得到值但会报错
            {
                textBox1.Text = "当前选中的是:" + listView1.FocusedItem.SubItems[0].Text;//获得的listView的值显示在文本框里
            }
        }

发表于 2019-4-30 15:54:30 | 显示全部楼层
不错,很好的方法
发表于 2019-4-30 15:59:21 | 显示全部楼层
就是速度有点慢
发表于 2020-5-29 16:14:52 | 显示全部楼层
这个是什么语音写法的CAD插件  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 06:55 , Processed in 0.143532 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表