设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 186|回复: 4

块 集合

[复制链接]
  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

    发表于 2021-1-29 22:32 | 显示全部楼层 |阅读模式
    Object ARX 删除块以及块参照

    1. void CArrowsBlock::DeleteBlockRefByBlockName( CString& strBlockName )
    2. {
    3.         AcDbObjectId objId;
    4.         bool bBlock = CArrowsBlock::IsBlock(strBlockName,objId);

    5.         acutPrintf(_T("\n bBlock = %d"),bBlock);

    6.         // 获得当前图形数据库的块表
    7.         AcDbBlockTable *pBlkTbl;
    8.         acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlkTbl, AcDb::kForWrite);   

    9.         // 创建新的块表记录
    10.         AcDbBlockTableRecord *pBlkTblRcd = NULL;
    11.         pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlkTblRcd,kForRead);
    12.         pBlkTbl->close();

    13.         AcDbBlockTableRecordIterator *pIte = NULL;
    14.        
    15.         Acad::ErrorStatus es;
    16.         es = pBlkTblRcd->newIterator(pIte);
    17.         AcDbEntity *pEnt = NULL;
    18.         int i = 0;
    19.         for(pIte->start(); !pIte->done(); pIte->step())
    20.         {
    21.                 i++;
    22.                 acutPrintf(_T("\n i = %d"),i);
    23.                 pIte->getEntity(pEnt,AcDb::kForWrite);

    24.                 //if (pEnt->id() == objId)
    25.                 //{
    26.                         bool dd = pEnt->isKindOf(AcDbBlockReference::desc());
    27.                         acutPrintf(_T("\n 块参照 = %d"),dd);
    28.                         if (dd)
    29.                         {
    30.                                 es = pEnt->setColorIndex(1);
    31.                         }
    32.                 //}
    33.                
    34.                 pEnt->close();
    35.         }
    36.         delete pIte;
    37.         pBlkTblRcd->close();
    复制代码
    1. bool CArrowsBlock::IsBlock(const CString& strBlkName,AcDbObjectId& blkDefId)
    2. {
    3.         // 获得块定义名称  
    4.         CString strBlkDef = strBlkName;

    5.         // 获得当前数据库的块表
    6.         AcDbBlockTable *pBlkTbl;
    7.         acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForWrite);

    8.         // 查找用户指定的块定义是否存在
    9.         if (!pBlkTbl->has(strBlkDef))  
    10.         {
    11.                 acutPrintf(_T("\n 当前图形中未包含指定名称的块定义!"));
    12.                 pBlkTbl->close();  

    13.                 return false;  
    14.         }
    15.         else
    16.         {
    17.                 acutPrintf(_T("\n 当前图形中找到!"));
    18.                 // 获得用户指定的块表记录      
    19.                 pBlkTbl->getAt(strBlkDef, blkDefId);
    20.                 acutPrintf(_T("\n ID = %x!"),blkDefId);
    21.                 pBlkTbl->close();
    22.                 return true;
    23.         }
    24. }
    复制代码
    回复


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2021-1-29 22:56 | 显示全部楼层
    1. static  AcDbObjectId createInsertForBlock (AcDbObjectId blockId, AcGePoint3d basePoint,
    2.                                                                    AcGeScale3d scaleFactor, double rotationAng,
    3.                                                                    AcGeVector3d vector, AcDbObjectId ownerRefId,
    4.                                                                    AcDbObjectId blockRefLayId)
    5. {
    6.         AcDbDatabase *pDB;
    7.         AcDbBlockReference *pBlkRef;
    8.         AcDbBlockTable *pBlockTable;
    9.         AcDbBlockTableRecord *pBlockTableRecord;
    10.         AcDbObjectId newEntId;
    11.         AcDbBlockTableRecord *pBlockDef;
    12.         AcDbBlockTableRecordIterator *pIterator;
    13.         AcDbBlockReference *pOriginalRef;
    14.         AcDbObjectIterator *pIterRef;
    15.         AcDbEntity *pEnt;
    16.         AcDbAttributeDefinition *pAttdef;

    17.         pDB = acdbHostApplicationServices()->workingDatabase();

    18.         pBlkRef = new AcDbBlockReference;   
    19.         pBlkRef->setBlockTableRecord(blockId);
    20.         pBlkRef->setNormal(vector);
    21.         pBlkRef->setPosition(basePoint);
    22.         pBlkRef->setScaleFactors(scaleFactor);
    23.         pBlkRef->setRotation(rotationAng);
    24.         pBlkRef->setLayer(blockRefLayId, Adesk::kFalse);


    25.         pDB->getBlockTable(pBlockTable, AcDb::kForRead);


    26.         pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
    27.                 AcDb::kForWrite);
    28.         pBlockTable->close();

    29.         pBlockTableRecord->appendAcDbEntity(newEntId, pBlkRef);
    30.         pBlockTableRecord->close();

    31.         acdbOpenObject(pBlockDef, blockId, AcDb::kForRead);

    32.         pBlockDef->newIterator(pIterator);   

    33.         //____iterating original block ref for attributes
    34.         acdbOpenObject(pOriginalRef,ownerRefId,AcDb::kForRead);
    35.         pIterRef =pOriginalRef->attributeIterator ();   
    36.         pOriginalRef->close();


    37.         for(pIterator->start(); !pIterator->done(); pIterator->step())
    38.         {
    39.                 pIterator->getEntity(pEnt, AcDb::kForRead);
    40.                 pAttdef = AcDbAttributeDefinition::cast (pEnt);
    41.                 if (pAttdef != NULL && !pAttdef->isConstant())
    42.                 {         
    43.                         //____iteration of original block ref continues...
    44.                         AcDbObject *pObj;
    45.                         AcDbObjectId ida;
    46.                         AcDbAttribute *pAtt;
    47.                         AcDbObjectId attId;

    48.                         ida = pIterRef->objectId();
    49.                         acdbOpenObject(pObj, ida, AcDb::kForRead);
    50.                         pAtt = AcDbAttribute::cast(pObj->clone());
    51.                         pObj->close();

    52.                         pAtt->setTextString(_T("XXX"));
    53.                         pBlkRef->appendAttribute(attId, pAtt);
    54.                         pAtt->close();
    55.                         pIterRef->step();
    56.                 }

    57.                 pEnt->close();
    58.         }

    59.         delete pIterator;         
    60.         delete pIterRef;
    61.         pBlockDef->close();
    62.         pBlkRef->close();

    63.         return newEntId;
    64. }
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2021-1-29 23:15 | 显示全部楼层
    在ObjectARX中添加“块”


    acDocManager->lockDocument(curDoc());
        // 获得当前图形数据库的块表
        AcDbBlockTable *pBlkTbl;
        acdbHostApplicationServices()->workingDatabase()
            ->getBlockTable(pBlkTbl, AcDb::kForWrite);
        // 创建新的块表记录
        AcDbBlockTableRecord *pBlkTblRcd;
        pBlkTblRcd = new AcDbBlockTableRecord();
        // 设置块表记录的名称
        CString blkName = "DiagramTail";
        pBlkTblRcd->setName(blkName);
        // 将块表记录添加到块表中
        AcDbObjectId blkDefId;
        pBlkTbl->add(blkDefId, pBlkTblRcd);
        pBlkTbl->close();

        // 向块表记录中添加线段
        AcGePoint3d RectLD(0,0,0), RectLU(0,18,0), RectRD(390,0,0), RectRU(390,18,0);
        drawLine(RectLD, RectLU, pBlkTblRcd);
        drawLine(RectLD, RectRD, pBlkTblRcd);
        drawLine(RectRU, RectLU, pBlkTblRcd);
        drawLine(RectRU, RectRD, pBlkTblRcd);

        //下面添加文字
        RectLU.y = RectRU.y = 2.5;
        AcGePoint3d ptInsertText(10,3,0);
        CString tempText = "制 图";
        drawText(ptInsertText,tempText, pBlkTblRcd);

        pBlkTblRcd->close();

        // 查找用户指定的块定义是否存在
        if (!pBlkTbl->has(blkName.AllocSysString()))
        {
            acutPrintf(_T("\n当前图形中未包含指定名称的块定义!"));
            pBlkTbl->close();
            return;
        }
        AcGePoint3d ptInsert(25,5,0);
        // 获得用户指定的块表记录
        pBlkTbl->getAt(blkName.AllocSysString(), blkDefId);
        AcDbBlockReference *pBlkRef = new AcDbBlockReference(ptInsert,blkDefId);
        pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd,AcDb::kForWrite);
        AcDbObjectId entId;
        pBlkTblRcd->appendAcDbEntity(entId, pBlkRef);
        // 关闭数据库的对象
        pBlkRef->close();
        pBlkTblRcd->close();
        pBlkTbl->close();

        acDocManager->unlockDocument(curDoc());
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2021-1-29 23:38 | 显示全部楼层
    1. //功能:制作图块
    2. //编程:BDYCAD
    3. //时间:2007-07-20早
    4. static void BDYCAD_TEST(void)
    5. {
    6.   ads_name name,ss;
    7.   ads_point pt1,pt2;
    8.   char BlockName[123];
    9.   AcGePoint3d Cpt;
    10.   int sel;long len;
    11.   AcDbObjectId BID;
    12.   if (acedSSGet(NULL,NULL,NULL,NULL,ss)!=RTNORM)return;
    13.   if (acedGetPoint(NULL,"\n输入基准点:",pt1)!=RTNORM)return;
    14.   if (acedGetString(FALSE,"\n请输入块名:",BlockName)!=RTNORM)return;
    15.   Cpt.x=pt1[X];Cpt.y=pt1[Y];Cpt.z=pt1[Z];
    16.   AcDbBlockTable *pBlockTable;
    17.   acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForWrite);
    18.   if (pBlockTable->has(BlockName)==Adesk::kTrue) {
    19.    acutPrintf("\n这个块已经建立了!");
    20.    pBlockTable->close();
    21.    return;
    22.   }
    23.   AcDbBlockTableRecord *pBlockTableRec= new AcDbBlockTableRecord();
    24.   pBlockTableRec->setName(BlockName);
    25.   pBlockTable->add(pBlockTableRec);
    26.   pBlockTableRec->setOrigin(Cpt);
    27.   pBlockTable->upgradeOpen();
    28.   AcDbEntity *pEnt,*pEnt0;
    29.   acedSSLength(ss,&len);
    30.   for (int i=0;i<len;i++) {
    31.    AcDbObjectId ObjID;
    32.    acedSSName(ss,i,name);
    33.    acdbGetObjectId(ObjID,name);
    34.    acdbOpenAcDbEntity(pEnt,ObjID,AcDb::kForWrite);
    35.    pEnt0=(AcDbEntity*)pEnt->clone();
    36.    pBlockTableRec->appendAcDbEntity(pEnt0);
    37.    pEnt->close();
    38.    pEnt0->close();
    39.   }
    40.   pBlockTable->close();
    41.   pBlockTableRec->close();
    42.   return;
    43. }
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

     楼主| 发表于 2021-1-29 23:38 | 显示全部楼层



    //功能:取两个对象的真实相交点。
    //编写:BDYCAD

    AcGePoint3dArray Get2ObjIDIntresPoints(AcDbObjectId ObjID1,AcDbObjectId ObjID2){
    AcDbEntity *pEnt1,*pEnt2;
    AcGePoint3dArray PTlist;
    acdbOpenObject(pEnt1,ObjID1,AcDb::kForRead);
    acdbOpenObject(pEnt2,ObjID2,AcDb::kForRead);
    pEnt1->intersectWith(pEnt2,AcDb::kExtendArg,PTlist);
    pEnt1->close();
    pEnt2->close();
    return PTlist;
    }
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛