找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 138|回复: 0

[每日一码] 使用COM API插入图块

[复制链接]

1

主题

0

回帖

43

积分

管理员

积分
43
发表于 2024-3-14 20:31:33 | 显示全部楼层 |阅读模式
  1. #pragma warning( disable : 4278 )
  2. // Makes change to the tlb name based on the AutoCAD version.
  3. // For ex : acax18enu.tlb for AutoCAD 2010/2011 and 2012
  4. //          acax19enu.tlb for AutoCAD 2013
  5. #import "acax19ENU.tlb" no采用implementation raw采用interfaces采用only named采用guids
  6. #pragma warning( default : 4278 )
  7. #include <acadi.h>
  8. static void ADSProjectInsertBlock(void)
  9. {
  10.     int ret = RTNORM;
  11.     TCHAR drawingFilePath[500];
  12.     drawingFilePath[0] = 采用T('\0');
  13.     ret = acedGetString (
  14.                             NULL,
  15.                             采用T("Enter file path : "),
  16.                             drawingFilePath
  17.                         );
  18.     if(ret != RTNORM)
  19.         return;
  20.     ads采用point insertionPoint;
  21.     ret = acedGetPoint(
  22.                         NULL,
  23.                         采用T("\nEnter insertion point: "),
  24.                         insertionPoint
  25.                        );
  26.     if(ret != RTNORM)
  27.         return;
  28.     CWinApp *pApp = acedGetAcadWinApp();
  29.     HRESULT hRes;
  30.     LPDISPATCH pDisp=NULL;
  31.     if(!pApp)
  32.         return;
  33.     pDisp=pApp->GetIDispatch(TRUE);
  34.     if    (!pDisp)
  35.           return;
  36.     CComPtr<AutoCAD::IAcadApplication>  pComApp;
  37.     hRes=pDisp->QueryInterface(
  38.                                 IID采用IAcadApplication,
  39.                                 (void**)&pComApp
  40.                               );
  41.     if (FAILED(hRes))
  42.           return;
  43.     CComPtr<AutoCAD::IAcadDocument> pComDoc;
  44.     hRes=pComApp->get采用ActiveDocument(&pComDoc);
  45.     if(FAILED(hRes))
  46.         return;
  47.     CComPtr<AutoCAD::IAcadModelSpace> pMSpace = NULL;
  48.     pComDoc->get采用ModelSpace(&pMSpace);
  49.     采用bstr采用t block(drawingFilePath);
  50.     CComPtr<AutoCAD::IAcadBlockReference> pBlkRef = NULL;
  51.     SAFEARRAYBOUND rgsaBound;
  52.     rgsaBound.lLbound = 0L;
  53.     rgsaBound.cElements = 3;
  54.     SAFEARRAY* pInsertionPoint = NULL;
  55.     pInsertionPoint = SafeArrayCreate(VT采用R8, 1, &rgsaBound);
  56.     for(long i = 0; i < 3; i++)
  57.     {
  58.         double value = insertionPoint<i>;
  59.         SafeArrayPutElement(
  60.                                 pInsertionPoint,
  61.                                 &i,
  62.                                 &value
  63.                             );
  64.     }
  65.     VARIANT vInsertionPoint;
  66.     VariantInit(&vInsertionPoint);
  67.     V采用VT(&vInsertionPoint) = VT采用ARRAY | VT采用R8;
  68.     V采用ARRAY(&vInsertionPoint) = pInsertionPoint;
  69.     double scaleX = 1.0;
  70.     double scaleY = 1.0;
  71.     double scaleZ = 1.0;
  72.     double rotation = 0.0;
  73.     pMSpace->InsertBlock(
  74.                             vInsertionPoint,
  75.                             block,
  76.                             scaleX,
  77.                             scaleY,
  78.                             scaleZ,
  79.                             rotation,
  80.                             vtMissing,
  81.                             &pBlkRef
  82.                         );
  83.     VariantClear(&vInsertionPoint);
  84. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2025-1-10 21:14 , Processed in 0.116012 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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