找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 530|回复: 3

[求助]:请大家来帮忙,有源代码和图片

[复制链接]
发表于 2003-6-20 10:35:20 | 显示全部楼层 |阅读模式

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

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

×
C:/Documents and Settings/Administrator/My Documents/My Pictures/HELP.bmp

图中的钢筋编号是一个属性块(*.DWG),我想通过编程来实现对钢筋编号的缩放。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2003-6-20 10:45:00 | 显示全部楼层
但我现在只能实现对圆的放缩,圆中的文字却没有变化,:(
实现的效果如图所示,主要源代码如下:
void Zoom()
{
    ads_name en;
    ads_point pt;
    ads_entsel("\n请选择实体",en,pt);

    //由实体名来获取对象标志符
  AcDbObjectId objId;
    acdbGetObjectId(objId,en);

    AcDbBlockReference *pBlockReference;
    acdbOpenObject(pBlockReference,objId,AcDb::kForWrite);
    Acad::ErrorStatus
    es=pBlockReference->setScaleFactors(AcGeScale3d(200,200,200));
   
    pBlockReference->close();

}

C:/Documents and Settings/Administrator/My Documents/My Pictures/Help2.bmp
请朋友们帮忙指点下我错在那里,谢谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2003-6-25 08:48:07 | 显示全部楼层
我这个问题已经解决了,呵呵
代码如下,
//缩放钢筋编号
void Zoom()
{
//输入钢筋直径
int ss;
double dD=0;
ads_getreal("\n输入新的钢筋编号直径:",&dD);

while (true)
{
if(dD!=0)
{
ads_name en;
ads_point pt;
ss=ads_entsel("\n请选择要缩放的钢筋编号",en,pt);
if(ss!=RTNORM)
break;

//由实体名来获取对象标志符
AcDbObjectId objId;
acdbGetObjectId(objId,en);

AcDbEntity *pEnt;
acdbOpenAcDbEntity(pEnt,objId,AcDb::kForWrite);

//gCyz和gConfig为自己写的函数,GetLayerInfo是取得层名
char str[50];
gCyz_ArxBegin();
gConfig.GetLayerInfo(LBIAOZHU,NULL,str,NULL,NULL);
gCyz_ArxEnd();

//判断所选实体是否钢筋编号
if(strcmp(pEnt->layer(),str)==0)
{
AcGePoint3d InsertPnt;
InsertPnt.x = pt[X];
InsertPnt.y = pt[Y];
InsertPnt.z = 0;

AcGeMatrix3d scaler;
//5.0为*.DWG中圆的实际直径
double scale = dD/5.0;
scaler.setToScaling(scale,InsertPnt);
pEnt->transformBy(scaler);
pEnt->close();

}
else
{
ads_printf("\n没有选择或选择了不匹配实体");

}

}
else return;
}

}
以上是把插入的属性块当作一个实体来处理的,如果哪位朋友有更好的方法请指点下新人,谢谢了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 13:42 , Processed in 0.180887 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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