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 compter le nombre d’occurrences des Xréfs dans le dessin en cours :


ObjectARX C++ API
Acad::ErrorStatus errSt;
AcDbXrefGraph xrGraph;
AcDbXrefGraphNode *xrGrNoeud;
CString etat, imbprq;

errSt = acedGetCurDwgXrefGraph(xrGraph);
if( errSt != Acad::eOk)
    return;

if (xrGraph.isEmpty() || xrGraph.numNodes() == 1) {
    acutPrintf(_T("\n0 Xréf(s) trouvée(s)."));
    return;
}

acutPrintf (_T("%3s%15s%15s%15s%15s\n"), _T("N°"), _T("Nom"), _T("Etat"), _T("Imbriquée"), _T("Quantité"));

for (int i=0; i < xrGraph.numNodes(); i++) {
    xrGrNoeud = xrGraph.xrefNode(i);
    if (xrGrNoeud != NULL) {
        switch(xrGrNoeud->xrefStatus()) {

            case AcDb::kXrfResolved :
                etat.Format(_T("%s"), _T("Resolue")); break;
            case AcDb::kXrfUnloaded :
                etat.Format(_T("%s"), _T("Déchargée")); break;

            case AcDb::kXrfUnreferenced :
                etat.Format(_T("%s"), _T("Non référencée")); break;

            case AcDb::kXrfFileNotFound :
                etat.Format(_T("%s"), _T("Introuvable")); break;

            case AcDb::kXrfUnresolved :
                etat.Format(_T("%s"), _T("Non résolue")); break;

            default :
                etat.Format(_T("Inconnue (%d)"), xrGrNoeud->xrefStatus()); break;
        }//Fin switch

        int nbOccurr = 0;
        if (xrGrNoeud->btrId() == 0) {
            imbprq.Format(_T("%s"), _T("(Hôte dwg)"));
            nbOccurr = 1;
        }
        else {

            imbprq.Format(_T("%s"), xrGrNoeud->isNested() ? _T("Oui\0") : _T("Non\0"));

            AcDbBlockTableRecord* adrCurEntBloc;
            if(acdbOpenObject((AcDbObject*&)adrCurEntBloc, xrGrNoeud->btrId(), AcDb::kForRead) == Acad::eOk) {

                AcDbObjectIdArray xrIds;
                errSt = adrCurEntBloc->getBlockReferenceIds(xrIds, true, false);
                if ((errSt == Acad::eOk) && (xrIds.isEmpty() == false)) {
                    nbOccurr = xrIds.length();
                    xrIds.removeAll();
                }
                adrCurEntBloc->close();
            }
        }
        acutPrintf(_T("%3d%15s%15s%15s%15d\n"), i, xrGrNoeud->name(), etat, imbprq, nbOccurr);
    }
}//Fin for
 
▲haut de page

C#
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database adrDB = Application.DocumentManager.MdiActiveDocument.Database;
XrefGraph xrGraph = Application.DocumentManager.MdiActiveDocument.Database.GetHostDwgXrefGraph(true);
XrefGraphNode xrGrNoeud;
string etat, imbprq;

if (xrGraph.IsEmpty || xrGraph.NumNodes == 1)
{
    ed.WriteMessage("\n0 Xréf(s) trouvée(s).");
    return;
}

const string format = "\n{0,3} {1,15} {2,15} {3,15} {4,15}";
ed.WriteMessage(format, "N°", "Nom", "Etat", "Imbriquée", "Quantité");

for (int i = 0; i < xrGraph.NumNodes; i++)
{
    xrGrNoeud = xrGraph.GetXrefNode(i);
    if (xrGrNoeud != null)
    {
        switch(xrGrNoeud.XrefStatus)
        {
            case XrefStatus.Resolved :
                etat = "Resolue"; break;

            case XrefStatus.Unloaded :
                etat = "Déchargée"; break;

            case XrefStatus.Unreferenced :
                etat = "Non référencée"; break;

            case XrefStatus.FileNotFound :
                etat = "Introuvable"; break;

            case XrefStatus.Unresolved:
                etat = "Non résolue"; break;

            default :
                etat = string.Format("Inconnue {0}", xrGrNoeud.XrefStatus); break;

        }//Fin switch

        int nbOccurr = 0;
        if (xrGrNoeud == xrGraph.HostDrawing)
        {
            imbprq = "(Hôte dwg)";
            nbOccurr = 1;
        }
        else
        {
            imbprq = string.Format("{0}", xrGrNoeud.IsNested ? "Oui" : "Non");
            BlockTableRecord adrCurEntBloc;

            using (Transaction tr = adrDB.TransactionManager.StartTransaction())
            {
                adrCurEntBloc = tr.GetObject(xrGrNoeud.BlockTableRecordId, OpenMode.ForRead) as BlockTableRecord;

                ObjectIdCollection xrIds;
                xrIds = adrCurEntBloc.GetBlockReferenceIds(true, false);
                nbOccurr = xrIds.Count;
                xrIds.Clear();
                tr.Commit();
            }
        }

        ed.WriteMessage(format, i, xrGrNoeud.Name, etat, imbprq, nbOccurr);

    }
}//Fin For
 
▲haut de page