如何获取AUTOCAD图形边界坐标_第1页
如何获取AUTOCAD图形边界坐标_第2页
如何获取AUTOCAD图形边界坐标_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Getimageclipboundarycoordinates

By

XiaodongLiang

Issue

Icansetimage’sclipbyAcadRasterImage.ClipBoundary,buthowdoIgettheAcadRasterImage'sclipboundarycoordinates?Iknowifitisrectangular,Icangetitsboundingbox,widthandheight.But,iftheclipboundaryisofairregularshape,Ican'tfindanyexposedmethodstogetsuchdata.

Solution

TheObjectARXAcDbRasterImage::clipBoundary()equivalentfunctionalityisnotexposedinthecurrentActiveXAutomationModel.

Wecanworkaroundthislimitationbyexposinganinterfacethatdoesexactlythat.Thewholeprojectisattached:

DownloadImgClipBoundary

STDMETHODIMPCClipBoundaryObj::GetImageClipBoundary(

VARIANT*pVarDblArray,

VARIANTacadImage)

{

//TODO:Addyourimplementationcodehere

try

{

CComQIPtr<IAcadRasterImage>

pAcadImage(acadImage.punkVal);

if(!pAcadImage)

throw

E_POINTER;

CComQIPtr<IAcadBaseObject>

pBaseObj(pAcadImage);

if(!pBaseObj)

throw

E_POINTER;

AcDbObjectIdid;

pBaseObj->GetObjectId(&id);

AcDbObjectPointer<AcDbRasterImage>

pImage(id,AcDb::kForRead);

if(pImage.openStatus()!=Acad::eOk)

throw

E_UNEXPECTED;

AcGePoint2dArray

array

=

pImage->clipBoundary();

intlen=

array.length();

if(len==0)

throw

E_FAIL;

AcGeMatrix3dmat;

pImage->getPixelToModelTransform(mat);

mat.inverse();

AcAxPoint2dArraypts;

for(int

i=0;i<len;i++)

{

AcGePoint3dpt(array[i].x,

array[i].y,0);

pt.transformBy(mat);

pts.append(AcGePoint2d(pt.x,pt.y));

}

pts.setVariant(pVarDblArray);

}

catch(const

HRESULTh)

{

//fornow

acutPrintf(_T("\nSomethingiswrong."));

return

h;

}

return

S_OK;

}

Tousetheabilityabove,

1.buildtheattachedproject,loaditinAutoCAD

2.

openVBAIDE

3.Tools>>Reference:selectARX.nowyoucanseeonelibraryisavailableinthelist.

4.RuntheVBAcodebelow.Itcreatesanimageandsetitsclip,andgetsitsclipboundarybythemethodprovidedinasdkImgClipBoundary.

SubExample_ClipBoundary()

'Thisexampleaddsarasterimageinmodelspace.

'Itthenclipstheimagebasedonaclipboundary.

'Thisexampleusesthe"downtown.jpg"foundinthesample

'directory.Ifyoudonothavetheimage,oritislocated

'inadifferentdirectory,insertavalidpathandnameforthe

'imageNamevariablebelow.

DiminsertionPoint(0To2)AsDouble

DimscalefactorAsDouble

DimrotationAngleAsDouble

DimimageNameAsString

DimrasterObjAsAcadRasterImageimageName="C:\01_SDK\ObjectARX2023\samples\graphics\AsdkTransientGraphicsSampFolder\Airport-Image.jpg"

insertionPoint(0)=5#:insertionPoint(1)=5#:insertionPoint(2)=0#

scalefactor=2#

rotationAngle=0

OnErrorResumeNext

'Createsarasterimageinmodelspace

SetrasterObj=(imageName,insertionPoint,scalefactor,rotationAngle)

IfErr.Description="Filererror"Then

MsgBoximageName&"couldnotbefound."

ExitSub

EndIf

ZoomAllMsgBox"Cliptheimage?",,"ClipBoundaryExample"

'Establishtheclipboundarywithanarrayofpoints

DimclipPoints(0To9)AsDouble

clipPoints(0)=6:clipPoints(1)=6.75

clipPoints(2)=7:clipPoints(3)=6

clipPoints(4)=6:clipPoints(5)=5

clipPoints(6)=5:clipPoints(7)=6

clipPoints(8)=6:clipPoints(9)=6.75

'Cliptheimage

rasterObj.ClipBoundaryclipPoints

'Enablethedisplayoftheclip

rasterObj.ClippingEnabled=True

ThisDrawing.RegenacActiveViewport

'MsgBox"Theimagehasbeenclipped.",,"ClipBoundaryExample"

OnErrorGoTo0

DimxObjAsasdkImgClipBoundaryLib.ClipBoundaryObj

SetxObj=ThisDrawing.Application.GetInterfaceObject("ImgClipBoundary.ClipBoundaryObj.1")

Dimbound

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论