Тема: Как из реактора вызвать LISP-функцию?
Есть реактор на ARX (AcDbDatabaseReactor). Он активируется внутри транзакции, открывающейся в реакторе AcEditorReactor при вызове команд модификации. Он должен менять слой модифицируемых объектов. Если это делать из ARX, все замечательно. А если вызывать LISP - функцию - все плохо.
Делаю так:
void DBaseReactor::objectModified(const AcDbDatabase * dwg, const AcDbObject * dbObj) { if (DocVars.docData().isModifyCommandActive==false && DocVars.docData().isVBACommandActive==false ) { return; } AcDbBlockReference *pInsert=AcDbBlockReference::cast(dbObj); if (!pInsert) return; resbuf *xdataList=NULL; xdataList=pInsert->xData(NULL); if(xdataList==NULL) { acutRelRb(xdataList); return; } AcDbHandle h; pInsert->getAcDbHandle(h); if (!h) return; char *str=new char; h.getIntoAsciiBuffer(str); resbuf *SComm; int i; SComm=acutBuildList(RTSTR, "changelayertoobject",RTSTR, str,RTSTR, "user",RTNONE); pInsert->upgradeOpen(); resbuf *reslist=NULL; i=acedInvoke(SComm,&reslist); acutRelRb(reslist); acutRelRb(SComm); if (xdataList) acutRelRb(xdataList); }
а LISP-функция такая:
(defun changeLayerToObject (handleObj nameLayer) (if (and (tblsearch "LAYER" nameLayer) (handent handleObj)) (progn (vla-put-Layer (vlax-ename->vla-object (cdr (assoc -1 (entget (handent handleObj )))) nameLayer ) ) t ) nil ) (princ) ) (vl-acad-defun 'changeLayerToObject)
А в ответ мне говорят lentityp nil
Лидеры, что посоветуете?
Неохота уйму LISP-функций на ARX переписывать...
Все спасибо