The functions acedGetSym() and acedPutSym() let ObjectARX applications inspect and change the value of AutoLISP variables.
In the first example, the user enters the following AutoLISP expressions:
Command: (setq testboole t)
T
Command: (setq teststr “HELLO, WORLD”)
“HELLO, WORLD”
Command: (setq sset1 (ssget))
<Selection set: 1>
Then the following sample code shows how acedGetSym() retrieves the new values of the symbols.
struct resbuf *rb; int rc; long sslen; rc = acedGetSym("testboole", &rb); if (rc == RTNORM && rb->restype == RTT) acutPrintf("TESTBOOLE is TRUE\n"); acutRelRb(rb); rc = acedGetSym("teststr", &rb); if (rc == RTNORM && rb->restype == RTSTR) acutPrintf("TESTSTR is %s\n", rb->resval.rstring); acutRelRb(rb); rc = acedGetSym("sset1", &rb); if (rc == RTNORM && rb->restype == RTPICKS) { rc = acedSSLength(rb->resval.rlname, &sslen); acutPrintf("SSET1 contains %lu entities\n", sslen); } acutRelRb(rb);
Conversely, acedPutSym() can create or change the binding of AutoLISP symbols, as follows:
ads_point pt1; pt1[X] = pt1[Y] = 1.4; pt1[Z] = 10.9923; rb = acutBuildList(RTSTR, "GREETINGS", 0); rc = acedPutSym("teststr", rb); acedPrompt("TESTSTR has been reset\n"); acutRelRb(rb); rb = acutBuildList(RTLB, RTSHORT, -1, RTSTR, "The combinations of the world", RTSTR, "are unstable by nature.", RTSHORT, 100, RT3DPOINT, pt1, RTLB, RTSTR, "He jests at scars", RTSTR, "that never felt a wound.", RTLE, RTLE, 0); rc = acedPutSym("longlist", rb); acedPrompt("LONGLIST has been created\n"); acutRelRb(rb);
To set an AutoLISP variable to nil, make the following assignment and function call:
rb->restype = RTNIL; acedPutSym("var1", rb);
Users can retrieve these new values. (As shown in the example, your program should notify users of any changes.)
TESTSTR has been reset.
LONGLIST has been created.
Command: !teststr
(“GREETINGS”)
Command: !longlist
((-1 “The combinations of the world” “are unstable by nature.” 100 (1.4 1.4 10.9923) (“He jests at scars” “that never felt a wound.”)))