Hyperlink Example

The following function lists the hyperlinks associated with an entity and allows new hyperlinks to be added in their place. (Error checking is not shown.)

void AddHyperlink()
{
    ads_name en;
    ads_point pt; 
    AcDbEntity * pEnt;
    AcDbObjectId pEntId;
    // Prompt user to select entity.   
    acedEntSel("\nSelect an Entity:  ", en, pt);
    // Get Object id.
    acdbGetObjectId(pEntId, en);
    // Open object for write.
    acdbOpenObject(pEnt, pEntId, AcDb::kForWrite);
    // The hyperlink collection object is created inside
    // of getHyperlinkCollection below. 
    // It is our responsibility to delete it.
    AcDbHyperlinkCollection * pcHCL = NULL;
    // Get the hyperlink collection associated with the entity.
    ACRX_X_CALL(pEnt, AcDbEntityHyperlinkPE)->
        getHyperlinkCollection(pEnt, pcHCL, false, true);
    // If a hyperlink exists already, say so.
    if (pcHCL->count() != 0)
    {
        AcDbHyperlink * pcHO;
        acutPrintf("\nThe following hyperlink info already exists
            on this entity:");
        // Iterate through collection and print existing hyperlinks.
        int i = 0;
        for (i = 0; i < pcHCL->count(); i++)
        {
            // Get point to current hyperlink object.
            pcHO = pcHCL->item(i); 
            acutPrintf("\nHyperlink name: %s", pcHO->name());
            acutPrintf("\nHyperlink location: %s", 
                pcHO->subLocation());
            acutPrintf("\nHyperlink description: %s", 
                pcHO->description());
        }
        acutPrintf("\n** All will be replaced.**");
        // Remove existing hyperlinks from collection. 
        // RemoveAt will delete objects too. 
        for (i = pcHCL->count() - 1; i >= 0; i--)
        {
            pcHCL->removeAt(i);
        }
    }
    // Get new hyperlinks for this entity.
    for (;;)
    {
        acutPrintf("\nEnter null name, location, and description to
            terminate input requests.");
        // Prompt user for name and description.
        char sName[100], sLocation[100], sDescription[100];
        if (acedGetString(TRUE, "\nEnter hyperlink name: ", sName)
            != RTNORM) 
            acutPrintf("Invalid input\n");
        if (acedGetString(TRUE, "\nEnter hyperlink location: ",
            sLocation) != RTNORM) 
            acutPrintf("Invalid input\n");
        if (acedGetString(TRUE, "\nEnter hyperlink description: ",
            sDescription) != RTNORM) 
            acutPrintf("Invalid input\n");
        // Add hyperlink or exit prompting.
        if (strcmp(sName, "") || strcmp(sLocation, "") ||
           strcmp(sDescription, ""))
           pcHCL->addTail(sName, sDescription, sLocation);
        else
           break;  
    }
    // Add these hyperlinks to the selected entity (opened above).
    ACRX_X_CALL(pEnt, AcDbEntityHyperlinkPE)->
        setHyperlinkCollection(pEnt, pcHCL);
    // Delete the collection. The collection will delete all its
    // contained hyperlink objects.
    delete pcHCL;
    // Close the object.
    pEnt->close();
}