找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1769|回复: 5

[ARX函数]:请问ARX中改变一个块的尺寸大小的函数

[复制链接]
发表于 2006-4-7 08:36:26 | 显示全部楼层 |阅读模式

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

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

×
访问一个图块后我想改变他的尺寸,应该用什么函数?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-4-7 09:23:32 | 显示全部楼层
AcDbBlockReference::setScaleFactors
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-7 09:32:18 | 显示全部楼层
这个函数应该是改变块的比例吧?!如果想改变块到某一个实体的大小而其它实体大小不变呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-7 09:44:00 | 显示全部楼层
谢谢,能说的具体一些么,
函数的参数是什么?
比如我画的图快是一个矩形我怎么改变它的大小,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-7 10:04:18 | 显示全部楼层
AutoCAD中的块,是通过块的定义,到块的引用来实现的。
在AutoCAD中的具体块,实际就是块的引用,每个块的应用都是指向块定义的。

对具体的块引用的修改,一般可以修改它的比例,插入点位置,旋转方向,所在平面。

因此如果要修改一个块的大小(当然修改的是整个块的大小),就可以通过修改块引用的比例来实现。具体的函数如下:

virtual Acad::ErrorStatus

setScaleFactors(

const AcGeScale3d& scale);

scale Input AcGeScale3d object containing the X, Y, and Z scale factors to be used by the block reference

This function sets the block reference to use the X, Y, and Z scale factors contained in scale.

The X, Y, and Z scaling of the block reference is applied to the entities in the referenced block table record relative to their perceived WCS coordinate axes, which may or may not be the same as the drawing抯 WCS axes.

The X scale factor value is used for DXF group code 41.

The Y scale factor value is used for DXF group code 42.

The Z scale factor value is used for DXF group code 43.

Returns Acad::eOk if successful, or Acad::eInvalidInput if the data passed in is not acceptable. eInvalidInput will also be returned if any of the specified scale factors is 0.0. Returns eCannotScaleNonUniformly when called on a block reference that refers to a block that cannot be scaled nonuniformly.

3楼所说的,只修改块中某一个实体的大小,如果不是属性,而是其他实体(来源于块定义)的话,则不能通过修改块引用的比例来实现。要做的,只能是修改块定义(这样的修改,会更新所有的同名块);或者将块应用扎开(与原来的块定义分离开),然后再对要修改的实体进行修改。

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

使用道具 举报

 楼主| 发表于 2006-4-7 10:16:11 | 显示全部楼层
setlayer函数的目的是搜索是否有名叫gdc的block,有的话改变它的尺寸
void setInsertLayer()
{
Acad::ErrorStatus es;
AcDbBlockTable* pBlockTbl;
AcDbBlockTableRecord* pMS;
if ((es = acdbCurDwg()->getBlockTable(pBlockTbl, AcDb::kForRead)) == Acad::eOk)
{
 {if ((es = pBlockTbl->getAt(ACDB_MODEL_SPACE, pMS, AcDb::kForWrite))! =Acad::eOk) //    (一)
  acrx_abort("\\nCouldn't get Model Space! Drawing corrupt.\\n");
 }
     pBlockTbl->close();
}
 AcDbBlockTableRecordIterator* pBtrIter; //(二)
if ((es = pMS->newIterator(pBtrIter)) != Acad::eOk)//(三)
{
acutPrintf("\\nCouldn't create Model Space iterator: %s", acadErrorStatusText(es));
return;
}
char* blockName;  
AcDbEntity* pEnt;
AcDbBlockTableRecord* pCurEntBlock;
AcDbObjectId blockId;
for (pBtrIter->start(); !pBtrIter->done(); pBtrIter->step())//(四)
{
 if ((es = pBtrIter->getEntity(pEnt, AcDb::kForRead)) != Acad::eOk)
{
 acutPrintf("\\nCouldn't open entity:  %s", acadErrorStatusText(es));
 continue;
}
if (pEnt->isA() != AcDbBlockReference::desc())//(五)
{
 pEnt->close();
 continue;
}
blockId = (AcDbBlockReference::cast(pEnt))->blockTableRecord();//(六)
if (acdbOpenObject((AcDbObject*&)pCurEntBlock, blockId, AcDb::kForRead) == Acad::eOk) //(七)
{
 pCurEntBlock->getName(blockName);
 if (strcmp(blockName, "gdc") == 0)
{
 if (pEnt->upgradeOpen() == Acad::eOk)

  pEnt->set??这里应该加什么函数?? }
 pCurEntBlock->close();

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 08:19 , Processed in 0.400079 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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