找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4073|回复: 26

[求助]:如何获取图块的图标

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2003-5-21 09:21:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
哪位高手知道如何获取图块的图标?最好能提供一个例子。
谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-5-21 12:12:47 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-22 12:51:41 | 显示全部楼层

Re: [求助]:如何获取图块的图标

最初由 stoneball 发布
[B]哪位高手知道如何获取图块的图标?最好能提供一个例子。
谢谢 [/B]

Question
I want to use the BlockView sample in my application, but instead of displaying
the current AutoCAD drawing I want to display a drawing from the hard disk.

How do I do this?
Answer
游客,如果您要查看本帖隐藏内容请回复
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-22 19:10:56 | 显示全部楼层
好例子!!非常强大的功能,高手高手
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2003-5-23 09:01:03 | 显示全部楼层
binbin:
    你的方法或部分代码能否也共享一下,让大家都提高提高?(stoneball@163.com)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-23 09:32:20 | 显示全部楼层
因为工程很大,几乎上百个类,我把关键的类给大家看看吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2003-5-23 14:06:33 | 显示全部楼层
最关键的类和方法没有耶:Utils::ViewAllBlock(m_sFileName);
主要是想明白 AcDbBlockTableRecord::getPreviewIcon(PreviewIcon &previewIcon);如何将previewIcon转换为BMP或IMG,能否在麻烦楼上的朋友一下。谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-23 16:11:46 | 显示全部楼层

  1.   [FONT=courier new]
  2.         BITMAPFILEHEADER bfHeader;
  3.         BITMAPINFOHEADER biHeader;
  4.         DWORD dwTmp;
  5.         HANDLE hf;         // file handle
  6.        
  7.         biHeader.biSize = EN_BlockSize ;
  8.         biHeader.biWidth = EN_BlockWidth;
  9.         biHeader.biHeight = EN_BlockHeight ;  
  10.         biHeader.biPlanes = EN_BlockPlanes ;
  11.         biHeader.biBitCount = EN_BlockBitCount ;
  12.         biHeader.biCompression = EN_BlockCompression ;
  13.         biHeader.biSizeImage = EN_BlockSizeImage;
  14.         biHeader.biXPelsPerMeter = EN_BlockbiXPelsPerMeter ;
  15.         biHeader.biYPelsPerMeter = EN_BlockbiYPelsPerMeter ;
  16.         biHeader.biClrUsed = EN_BlockClrUsed;
  17.         biHeader.biClrImportant = EN_Block;ClrImportant
  18.        
  19.         //       
  20.         int clrTableSize;
  21.         if (biHeader.biBitCount < 9)
  22.         {
  23.                 clrTableSize = 4 * ldexp(1, biHeader.biBitCount);
  24.         }
  25.         else
  26.         {
  27.                 clrTableSize = 0;
  28.         }
  29.        
  30.         //        ' Fill the BITMAPFILEHEADER structure
  31.         bfHeader.bfType = 0x4d42;  // 0x42 = "B" 0x4d = "M"  // ' Image type   
  32.         bfHeader.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + biHeader.biSize + clrTableSize + biHeader.biSizeImage); //' Length of file (in bytes)
  33.         bfHeader.bfOffBits = (DWORD) (sizeof(BITMAPFILEHEADER) + biHeader.biSize + clrTableSize);
  34.     bfHeader.bfReserved1 = 0;
  35.     bfHeader.bfReserved2 = 0;
  36. .
  37. .
  38. .
  39. .
  40. //以下是存为bmp文件
  41.                         bHas = pRec->hasPreviewIcon();
  42.                         if (bHas)
  43.                         {
  44.                                 pRec->getPreviewIcon(PreviewIcon);

  45.                                 // Create the .BMP file.
  46.                                 hf = CreateFile(sFile, GENERIC_READ | GENERIC_WRITE, (DWORD) 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
  47.                                
  48.                                 // Copy the BITMAPFILEHEADER into the .BMP file.
  49.                                 if (!WriteFile(hf, (LPVOID) &bfHeader, sizeof(BITMAPFILEHEADER),(LPDWORD) &dwTmp,  NULL))      
  50.                                 {
  51.                                         CloseHandle(hf); pRec->close();pTable->close();
  52.                                         return NULL;
  53.                                 }
  54.                                
  55.                                 int nLength = PreviewIcon.length();
  56.                                 for (i = 0; i< nLength;i++)
  57.                                 {
  58.                                         BYTE BTemp = PreviewIcon.at(i);
  59.                                         if (!WriteFile(hf, (LPVOID)&BTemp, 1,(LPDWORD) &dwTmp,  NULL))
  60.                                         {
  61.                                                 CloseHandle(hf);pRec->close();pTable->close();
  62.                                                 return NULL;
  63.                                         }
  64.                                 }       
  65.                                
  66.                                 // Close the .BMP file.
  67.                                 if (!CloseHandle(hf)) {pRec->close();pTable->close();return NULL;}
  68.   [/FONT]
复制代码


还有什么不明白的吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-25 14:34:02 | 显示全部楼层
我已经用很简单的方法实现了这个功能,你们发的东东即没有讲清楚,也显得太复杂,
我实现的代码不超过三十行,呵呵
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-5-25 16:38:39 | 显示全部楼层
最初由 yangliucool 发布
[B]我已经用很简单的方法实现了这个功能,你们发的东东即没有讲清楚,也显得太复杂,
我实现的代码不超过三十行,呵呵 [/B]


能否贴出来和大家共享呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-25 17:18:09 | 显示全部楼层
binbin 兄,我对你的“Utils::ViewAllBlock(m_sFileName)”函数很感兴趣,不知能否公布。
当然若是将类“Utils”公布出来则更好。我也归纳了一个工具集类,但函数可能都是些常用的,没什么特别之处。若你感兴趣我也可以提供一些函数,以供交流。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-25 20:19:01 | 显示全部楼层
最初由 DARCY 发布
[B]binbin 兄,我对你的“Utils::ViewAllBlock(m_sFileName)”函数很感兴趣,不知能否公布。
当然若是将类“Utils”公布出来则更好。我也归纳了一个工具集类,但函数可能都是些常用的,没什么特别之处。若你感兴趣我也... [/B]


好主意!
大家都公布一些函数,很多低效的重复劳动可以省略.

我去发布一个新主题[ARX函数集], 请跟贴发布!

有人不是没积分吗,发布有赏
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-26 09:21:06 | 显示全部楼层
如果只是得到Cbitmap可能会简单,可用SetBitmapBits函数
如果存成bmp文件请看:
The bitmap file format is shown in the following illustration.

Structure Corresponding bytes
BITMAPFILEHEADER 0x00 – 0x0D
BITMAPINFOHEADER 0x0E – 0x31
RGBQUAD array 0x32 – 0x75
Color-index array 0x76 – 0x275

其中BITMAPFILEHEADER 是要根据底下几个结构数据自己构造出来的,这就难了,(你也可以写死)CAD的getPreviewIcon函数返回的是不包括BITMAPFILEHEADER 的数据

看看微软怎写的

  1.   [FONT=courier new]
  2. void CreateBMPFile(HWND hwnd, LPTSTR pszFile, PBITMAPINFO pbi,
  3.                   HBITMAP hBMP, HDC hDC)
  4. {
  5.      HANDLE hf;                 // file handle
  6.     BITMAPFILEHEADER hdr;       // bitmap file-header
  7.     PBITMAPINFOHEADER pbih;     // bitmap info-header
  8.     LPBYTE lpBits;              // memory pointer
  9.     DWORD dwTotal;              // total count of bytes
  10.     DWORD cb;                   // incremental count of bytes
  11.     BYTE *hp;                   // byte pointer
  12.     DWORD dwTmp;

  13.     pbih = (PBITMAPINFOHEADER) pbi;
  14.     lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);

  15.     if (!lpBits)
  16.          errhandler("GlobalAlloc", hwnd);

  17.     // Retrieve the color table (RGBQUAD array) and the bits
  18.     // (array of palette indices) from the DIB.
  19.     if (!GetDIBits(hDC, hBMP, 0, (WORD) pbih->biHeight, lpBits, pbi,
  20.         DIB_RGB_COLORS))
  21.     {
  22.         errhandler("GetDIBits", hwnd);
  23.     }

  24.     // Create the .BMP file.
  25.     hf = CreateFile(pszFile,
  26.                    GENERIC_READ | GENERIC_WRITE,
  27.                    (DWORD) 0,
  28.                     NULL,
  29.                    CREATE_ALWAYS,
  30.                    FILE_ATTRIBUTE_NORMAL,
  31.                    (HANDLE) NULL);
  32.     if (hf == INVALID_HANDLE_VALUE)
  33.         errhandler("CreateFile", hwnd);
  34.     hdr.bfType = 0x4d42;        // 0x42 = "B" 0x4d = "M"
  35.     // Compute the size of the entire file.
  36.     hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) +
  37.                  pbih->biSize + pbih->biClrUsed
  38.                  * sizeof(RGBQUAD) + pbih->biSizeImage);
  39.     hdr.bfReserved1 = 0;
  40.     hdr.bfReserved2 = 0;

  41.     // Compute the offset to the array of color indices.
  42.     hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) +
  43.                     pbih->biSize + pbih->biClrUsed
  44.                     * sizeof (RGBQUAD);

  45.     // Copy the BITMAPFILEHEADER into the .BMP file.
  46.     if (!WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER),
  47.         (LPDWORD) &dwTmp,  NULL))
  48.     {
  49.        errhandler("WriteFile", hwnd);
  50.     }

  51.     // Copy the BITMAPINFOHEADER and RGBQUAD array into the file.
  52.     if (!WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER)
  53.                   + pbih->biClrUsed * sizeof (RGBQUAD),
  54.                   (LPDWORD) &dwTmp, ( NULL))
  55.         errhandler("WriteFile", hwnd);

  56.     // Copy the array of color indices into the .BMP file.
  57.     dwTotal = cb = pbih->biSizeImage;
  58.     hp = lpBits;
  59.     if (!WriteFile(hf, (LPSTR) hp, (int) cb, (LPDWORD) &dwTmp,NULL))
  60.            errhandler("WriteFile", hwnd);

  61.     // Close the .BMP file.
  62.      if (!CloseHandle(hf))
  63.            errhandler("CloseHandle", hwnd);

  64.     // Free memory.
  65.     GlobalFree((HGLOBAL)lpBits);
  66. }

  67.   [/FONT]
复制代码



我们看看getPreviewIcon函数的lisp写法
(defun C:GetPreview ()
  (setq blk "1")'块名
  (VL-LOAD-COM)
  (apply
    'strcat
    (apply
      'append
      (mapcar '(lambda (x)
                 (if (= (car x) 310)
                   (list (cdr x))
                 )
               )
              (entget
                (cdr (assoc 330 (entget (tblobjname "block" blk))))
              )
      )
    )
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-15 23:10:16 | 显示全部楼层
我没有积分,怎样获取积分呀?我好想看见隐藏的内容呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-10-21 15:45:26 | 显示全部楼层
积分不够
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-10 05:44 , Processed in 0.378136 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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