乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 73|回复: 3

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

[复制链接]

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2019-2-21 15:11:00 | 显示全部楼层 |阅读模式
做个标记备忘。// 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();//新建图块名称表
                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的值显示在文本框里
            }
        }
回复

使用道具 举报

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
13
发表于 2019-4-30 15:54:00 | 显示全部楼层
不错,很好的方法
回复

使用道具 举报

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
13
发表于 2019-4-30 15:59:00 | 显示全部楼层
就是速度有点慢
回复

使用道具 举报

3

主题

18

帖子

7

银币

初来乍到

Rank: 1

铜币
29
发表于 2020-5-29 16:14:00 | 显示全部楼层
这个是什么语音写法的CAD插件
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 01:12 , Processed in 0.225594 second(s), 60 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表