明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2293|回复: 6

关于拖动块的问题()

[复制链接]
发表于 2006-8-23 10:40:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2006-8-27 22:49:27 编辑

我做了一个带属性定义的块表记录,和引用该块定义的块参照

当我使用AcEdJig拖动该块参照的时候会发现,在拖动的过程中,会出现在块中属性定义的tag中的字符串 和块的图形一起出现.也随着块中的图形一起动

其实属性定义的tag值,应该只是该属性的一个标识,但是为什么在块定义中的这个标识,会在拖动的过程中出现啊?

比如:块中有个属性定义,该属性定义的tag = "标识",这样在拖动这个块 的引用的同时,这个"标识"的字符也会随着图形一起动,其实应该不会出现这个字符串 啊

这个问题郁闷我好几天了,请哪为朋友指点一下 好么?

 楼主| 发表于 2006-8-30 10:50:00 | 显示全部楼层

这么长时间也没有人能解决这个问题么?看来只好使用一个变通的方法了,

pAttDef->setHeight(0.00001)把高度值设置为最小,这样就看不见了;不过我还是不甘心,要是哪位兄弟知道该怎么解决这个问题,请赐教!

 楼主| 发表于 2006-8-30 10:54:00 | 显示全部楼层
其实这个问题就是:在拖动一个块引用的过程中,怎样才能不显示"该块引用的那个块"中的属性定义的Tag字符串
发表于 2006-8-30 15:48:00 | 显示全部楼层

属性和属性定义的问题:

class bjt:
 public AcEdJig
{
 AcGePoint3d mTo;
 AcDbBlockReference* br;
public:
 AcDbObjectId append()
 {
  AcDbBlockTableRecord *btr;
  acdbOpenObject(btr,br->blockTableRecord(),kForRead);
  if(btr->hasAttributeDefinitions())
  {
   AcDbBlockTableRecordIterator *it;
   btr->newIterator(it);
   for(;!it->done();it->step())
   {
    AcDbEntity *pEnt;
    it->getEntity(pEnt, AcDb::kForRead);

    // Make sure the entity is an attribute definition
    // and not a constant.
    //
    AcDbAttributeDefinition *pAttdef = AcDbAttributeDefinition::cast(pEnt);
    if (pAttdef != NULL && !pAttdef->isConstant())
    {
     // We have a non-constant attribute definition,
     // so build an attribute entity.
     //
     AcDbAttribute *pAtt = new AcDbAttribute();
     pAtt->setPropertiesFrom(pAttdef);
     pAtt->setInvisible(pAttdef->isInvisible());

     // Translate the attribute by block reference.
     // To be really correct, the entire block
     // reference transform should be applied here.
     //
     AcGePoint3d basePoint = pAttdef->position();
     basePoint += br->position().asVector();
     pAtt->setPosition(basePoint);
     pAtt->setHeight(pAttdef->height());
     pAtt->setRotation(pAttdef->rotation());
     pAtt->setTag(pAttdef->tag());
     pAtt->setFieldLength(25);
     char *pStr = pAttdef->tag();
     pAtt->setTag(pStr);
     free(pStr);
     pAtt->setFieldLength(pAttdef->fieldLength());

     pAtt->setTextString("Assigned Attribute Value");
     br->appendAttribute(pAtt);
     pAtt->close();
    }
    pEnt->close();
   }

   delete it;
  }
  btr->close();
  return AcEdJig::append();
 }
 //////////////////////////////////////////////////////////////////////////
 virtual DragStatus sampler()
 {
  DragStatus stat;
  setUserInputControls((UserInputControls)
   (AcEdJig::kAccept3dCoordinates
   | AcEdJig::kNoNegativeResponseAccepted
   | AcEdJig::kNoZeroResponseAccepted));

  static AcGePoint3d axisPointTemp;
  stat = acquirePoint(mTo);
  if (axisPointTemp != mTo)
   axisPointTemp = mTo;
  else if (stat == AcEdJig::kNormal)
   return AcEdJig::kNoChange;
  return stat;
 }
 //////////////////////////////////////////////////////////////////////////
 virtual Adesk::Boolean  update()
 {

  br->setPosition(mTo);
  return Adesk::kTrue;
 }
 //////////////////////////////////////////////////////////////////////////
 virtual AcDbEntity* entity() const
 {
  return br;
 }
 //////////////////////////////////////////////////////////////////////////
 void start()
 {
  br=0;
  AcDbBlockTable *bt;
  acdbHostApplicationServices()->workingDatabase()->getBlockTable(bt,kForRead);
  AcDbObjectId bid;
  try
  {
   char text[1024];
   if(RTNORM!=acedGetString(1,"input name",text))throw(0);
   if (bt->getAt(text,bid)!=eOk)throw(0);
  }
  catch(...)
  {
   bt->close();
   return;
  }
  bt->close();
  br=new AcDbBlockReference(AcGePoint3d::kOrigin,bid);
  setDispPrompt("Jig a Block");
  drag();
  append();
 }

};

 另:

static void BlockJigTestnewJ(void)
 {
  // Add your code for command BlockJigTest.newJ here
  bjt b;
  b.start();
 }

发表于 2006-9-5 12:50:00 | 显示全部楼层

大侠们能否上传一个先动态创建块,在插入块参考时有橡皮条效果的例题??

QQ:78250323

EMAILYHNJUCT@163.COM

 楼主| 发表于 2006-9-11 09:46:00 | 显示全部楼层

使用jig好象也可以,我没有尝试过,你先研究研究,我也给你看看

使用jig拖动距离看看是不是能实现,我也是感觉而已

发表于 2006-9-23 22:03:00 | 显示全部楼层
我做过无属性的拖动块,但我认为对属性的定义应在drag();之后  append();之前定义则属性在拖动中不可见,除非属性模式是固定,建议为预置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 21:14 , Processed in 0.180997 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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