Programmation

Développement ObjectARX AutoCAD :
Module de conception de façades (mur Bois/Bloc)

Programmation

Programmation

Evaluez vos connaissances sur AutoCAD :
Questionnaires sur les Xréfs et sur les Blocs.

Code ObjectARX, C# et API



Extraits de code pour créer un nouveau bloc avec lien hypertexte vers le site Cad Consult :


ObjectARX C++ API
Acad::ErrorStatus errSt;
AcApDocument *adrDocActive = acDocManager->mdiActiveDocument();
AcDbDatabase *adrDB = adrDocActive->database();
if(adrDB == NULL) {
    return;
}

AcDbBlockTable *adTableBlocs = NULL;
errSt = adrDB->getBlockTable(adTableBlocs, kForWrite);
if(Acad::eOk != errSt) {
    return;
}

if (! adTableBlocs->has(ACRX_T("LeBloc"))) {
    AcDbBlockTableRecord *adBTR = new  AcDbBlockTableRecord();
    errSt = adBTR->setName(ACRX_T("LeBloc"));
    if (Acad::eOk != errSt) {            
        delete adBTR;
        return;
    }

    AcDbObjectId idBTR = AcDbObjectId::kNull;
    errSt = adTableBlocs->add(idBTR, adBTR);
    if (Acad::eOk != errSt) {            
        delete adBTR;
        return;
    }

    AcDbCircle *adCercle = new AcDbCircle(AcGePoint3d::kOrigin, AcGeVector3d::kZAxis, 50.0);

    errSt = adBTR->appendAcDbEntity(adCercle);
    if (Acad::eOk != errSt) {  
        delete adCercle;
        adBTR->close();
        return;
    }
    adCercle->close();

    AcDbHyperlinkCollection * pcHCL = NULL;
    ACRX_PE_PTR(adBTR, AcDbEntityHyperlinkPE)->getHyperlinkCollection(adBTR, pcHCL, false , true);

    pcHCL->addTail(ACRX_T("http://cadconsult.fr" ), ACRX_T("Site CadConsult" ));

    errSt = ACRX_PE_PTR(adBTR, AcDbEntityHyperlinkPE)->setHyperlinkCollection(adBTR, pcHCL);

    if (Acad::eOk != errSt) {
        acutPrintf(_T("Lien Hypertexte Erreur."), acadErrorStatusText(errSt));
    }

    delete  pcHCL;
    adBTR->close();
}
adTableBlocs->close();
 
▲haut de page

C#
Database adrDB = Application.DocumentManager.MdiActiveDocument.Database;

using (Transaction tr = adrDB.TransactionManager.StartTransaction())
{
    BlockTable adTableBlocs = tr.GetObject(adrDB.BlockTableId, OpenMode.ForRead) as BlockTable;

    if (adTableBlocs.Has("LeBloc") == false)
    {
        adTableBlocs.UpgradeOpen();
        BlockTableRecord adBTR = new BlockTableRecord();
        adBTR.Name = "LeBloc";
        adBTR.Origin = Point3d.Origin;
        adTableBlocs.Add(adBTR);
        tr.AddNewlyCreatedDBObject(adBTR, true);

        Circle adCercle = new Circle(Point3d.Origin, Vector3d.ZAxis, 50.0);
        adBTR.AppendEntity(adCercle);
        tr.AddNewlyCreatedDBObject(adCercle, true);

        HyperLinkCollection linkCollection = adCercle.Hyperlinks;
        //AutoCAD 2015 et +, on peut utiliser : HyperLinkCollection linkCollection = adBTR.Hyperlinks;
        HyperLink hyperLink = new HyperLink();
        hyperLink.Description = "Site CadConsult";
        hyperLink.Name = "http://cadconsult.fr";
        hyperLink.SubLocation = "";
        linkCollection.Add(hyperLink);
    }
    tr.Commit();
}
 
▲haut de page