设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

插入匿名块

[复制链接]
  • TA的每日心情
    开心
    2021-6-22 09:39
  • 签到天数: 1542 天

    [LV.Master]伴坛终老

    发表于 2021-2-7 23:41 | 显示全部楼层 |阅读模式
    class BlockDrawCar
    {
    public:
            void DrawBlock(AcDbBlockTableRecord *btr)
            {
                    Acad::ErrorStatus es;

                    // Draw a rectangle polyline
                    AcDbPolyline *pline = new AcDbPolyline();
                    AcGePoint2d p0(0.0, 0.0), p1(m_Length, 0.0);
                    AcGePoint2d p2(m_Length, m_Width), p3(0.0, m_Width);
                    pline->addVertexAt(0, p0);
                    pline->addVertexAt(1, p1);
                    pline->addVertexAt(2, p2);
                    pline->addVertexAt(3, p3);
                    pline->setClosed(true);
                    pline->setDatabaseDefaults();
                    pline->setColorIndex(m_Color);
                    es = btr->appendAcDbEntity(pline);
                    if (!es)
                            pline->close();
                    else
                            delete pline;

                    // Draw a circle
                    AcDbCircle *circle = new AcDbCircle();
                    AcGePoint3d center(m_Width / 2, m_Width / 2, 0.0);
                    double radius = m_Width * 0.4;
                    circle->setCenter(center);
                    circle->setRadius(radius);
                    circle->setDatabaseDefaults();
                    circle->setColorIndex(m_Color);
                    es = btr->appendAcDbEntity(circle);
                    if (!es)
                            circle->close();
                    else
                            delete circle;
            }

    public:
            int m_Color=7;
            double m_Width=200;
            double m_Length=340;
    };


    AcDbObjectId CreateCarBlock(AcDbDatabase *db, LPCWSTR blockname)
    {
            Acad::ErrorStatus es;
            AcDbBlockTableRecord *btr = new AcDbBlockTableRecord;
            BlockDrawCar *car = new BlockDrawCar;
            car->DrawBlock(btr);
            btr->setName(blockname);

            // Add the BTR to the Blocktable of the current drawing
            AcDbObjectId BtrID;
            AcDbBlockTable *blocktable;
            es = db->getBlockTable(blocktable, AcDb::kForWrite);
            if (!es)
            {
                    es = blocktable->add(BtrID, btr);
                    if (!es)
                            btr->close();
                    else
                            delete btr;
                    blocktable->close();
            }

            return BtrID;
    }

    AcDbObjectId FindBlock(AcDbDatabase *db, LPCWSTR blockname)
    {
            AcDbObjectId BlockID;
            Acad::ErrorStatus es;
            AcDbBlockTable *blocktable;
            es = db->getBlockTable(blocktable, AcDb::kForRead);
            if (!es)
            {
                    es = blocktable->getAt(blockname, BlockID);
                    blocktable->close();
            }
            return BlockID;
    }

    Acad::ErrorStatus PostToDb(AcDbDatabase *db, AcDbObjectId& objId, AcDbEntity* pEnt)
    {
            Acad::ErrorStatus      es;
            AcDbBlockTable*        blocktable = 0;
            AcDbBlockTableRecord*  modelspace = 0;

            if ((es = db->getBlockTable(blocktable, AcDb::kForRead)) != Acad::eOk)
                    return es;

            if ((es = blocktable->getAt(ACDB_MODEL_SPACE, modelspace, AcDb::kForWrite)) == Acad::eOk)
            {
                    es = modelspace->appendAcDbEntity(objId, pEnt);
                    modelspace->close();
            }
            blocktable->close();

            return es;
    }

    void cmdDrawCar()
    {
            Acad::ErrorStatus es;
            LPCWSTR blockname = L"*U"; // Blockname. This is for an unnamed block.
            blockname = L"car"; // And this for a named block

            AcDbDatabase *db = acdbHostApplicationServices()->workingDatabase();
            AcDbObjectId BtrID;
            if (blockname[0]!=L'*') // '*' as first char means: Unnamed block. Don't search for it.
                    BtrID = FindBlock(db, blockname); // Search for an existing named block

            if (BtrID.isNull())
                    BtrID = CreateCarBlock(db, blockname); // For "*U" AutoCAD will create unique names like "*U1", "*U2", ...

            if (BtrID.isNull())
            {
                    acutPrintf(L"\nFailed.");
                    return;
            }

            // Now create a block reference
            AcDbBlockReference *bref = new AcDbBlockReference;
            bref->setDatabaseDefaults();
            bref->setBlockTableRecord(BtrID);

            AcGeVector3d insertionPoint;
            acedGetPoint(nullptr, L"\nInsertion point: ", asDblArray(insertionPoint));
            AcGeMatrix3d trans; // the transformation matrix
            trans.setToTranslation(insertionPoint);
            bref->setBlockTransform(trans);

            // Append it to modelspace
            AcDbObjectId BrefID;
            es = PostToDb(db, BrefID, bref);
            if (!es)
                    bref->close();
            else
                    delete bref;
    }
    回复


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

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-22 09:39
  • 签到天数: 1542 天

    [LV.Master]伴坛终老

     楼主| 发表于 2021-2-7 23:41 | 显示全部楼层
    lockDrawCar car;
            car.DrawBlock(btr);
    or

            BlockDrawCar *car = new BlockDrawCar;
            car->DrawBlock(btr);
            delete car;
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-22 09:39
  • 签到天数: 1542 天

    [LV.Master]伴坛终老

     楼主| 发表于 2021-2-7 23:42 | 显示全部楼层
    AcDbObjectId insertDwgAsBlock(AcDbDatabase *pTargetDb, LPCWSTR dwgFilePath, LPCWSTR blockname)
    {
            AcDbObjectId BtrID; // The resulting Id of the AcDbBlockTableRecordd
            Acad::ErrorStatus es;

            //----- Read the external DWG file
            AcDbDatabase *pDwg = new AcDbDatabase( Adesk::kFalse );       
            es = pDwg->readDwgFile(dwgFilePath);

            //----- Insert it into the current Database
            if (!es)
                    es = pTargetDb->insert(BtrID, blockName, pDwg, true);
            delete pDwg;       
            return BtrID;
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-22 09:39
  • 签到天数: 1542 天

    [LV.Master]伴坛终老

     楼主| 发表于 2021-2-7 23:42 | 显示全部楼层
    struct resbuf {                                                  
            struct resbuf *rbnext; // Allows them to be "linked"
            short restype;
            union ads_u_val resval;
    };

    LPCWSTR myAppName=L"MYAPP";

    void setCarXData(AcDbBlockReference *brefCar) // brefCar must be open for write
    {
            acdbRegApp(myAppName); // Make sure your XData appname is registered

            resbuf *rb = acutBuildList(
                    AcDb::kDxfRegAppName, myAppName,
                    AcDb::kDxfXdAsciiString, L"Car",
                    AcDb::kDxfXdControlString, L("{"),
                      AcDb::kDxfXdAsciiString, L"Lamborghini", //name
                      AcDb::kDxfXdReal,        250.0,                                   //max speed
                      AcDb::kDxfXdInteger16,        2,                           //number of seats
                    AcDb::kDxfXdControlString, L("}"),
                    0
            );
            brefCar->setXData(rb); // this will replace the XData for myAppName
            acutRelRb(rb); // release the list.
    }

    void getCarXData(AcDbBlockReference *brefCar) // brefCar must be open for read
    {
            resbuf *rb = brefCar->XData(myAppName);  // get XData for myAppName
            // -- use rb here --
            acutRelRb(rb); // release the list.
    }
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

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