Столкнулся с проблемой в палитре свойств в AutoCAD 2017, может кто подскажет решение.
Написаны несколько CustomEntity. Для них реализованы COM палитры свойств. Для AutoCAD 2013-2016 все работает хорошо, никаких проблем нет.
В AutoCAD 2017 возникла
проблема:
нельзя изменить параметр AcDbEntity «Цвет», в комбобоксе выбираю другой цвет, после выбора он сбивается назад. И так для всех CustomEntity. Пример оглавления палитры:
class ATL_NO_VTABLE CProfileFrameCOMObj :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CProfileFrameCOMObj, &CLSID_ProfileFrameCOMObj>,
public IAcPiCategorizeProperties,
public ISupportErrorInfo,
public IOPMPropertyExtensionImpl<CProfileFrameCOMObj>,
public IAcadEntityDispatchImpl<CProfileFrameCOMObj, &CLSID_ProfileFrameCOMObj, IProfileFrameCOMObj, &IID_IProfileFrameCOMObj, &LIBID_UnisTraceDBXLib>
#ifdef NEVER
//- Please do not remove the following line. It is here to make .NET ATL Wizards
//- running properly. The parent class will not compile but is required by .NET to recognize
//- this class as being an ATL coclass
,public IDispatchImpl<IProfileFrameCOMObj, &IID_IIProfileFrameCOMObj, &LIBID_UnisProfileDBXLib>
#endif
{
...
}
COM_MAP:
DECLARE_REGISTRY_RESOURCEID(IDR_PROFILEFRAMECOMOBJ)
BEGIN_COM_MAP(CProfileFrameCOMObj)
COM_INTERFACE_ENTRY(IProfileFrameCOMObj)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY(IOPMPropertyExtension)
COM_INTERFACE_ENTRY(ICategorizeProperties)
COM_INTERFACE_ENTRY(IPerPropertyBrowsing)
COM_INTERFACE_ENTRY(IAcadBaseObject)
COM_INTERFACE_ENTRY(IAcadBaseObject2)
COM_INTERFACE_ENTRY(IAcadObject)
COM_INTERFACE_ENTRY(IAcadEntity)
COM_INTERFACE_ENTRY(IRetrieveApplication)
COM_INTERFACE_ENTRY(IAcPiCategorizeProperties)
END_COM_MAP()
Пробовал перегрузить методы:
STDMETHODIMP CProfileFrameCOMObj::get_TrueColor(IAcadAcCmColor** pColor)
{
HRESULT res = AcAxGetTrueColor(m_objRef, pColor);
return res;
}
STDMETHODIMP CProfileFrameCOMObj::put_TrueColor(IAcadAcCmColor* color)
{
HRESULT res = AcAxPutTrueColor(m_objRef, color);
return res;
}
Для AutoCAD 2013-2016 сначала вызывается
get_TrueColor, потом при прохождении курсором по элементам комбобокса вызывается
put_TrueColor и объект нормально перерисовывается. В AutoCAD 2017
get_TrueColor вызывается і возвращет
S_OK, но
put_TrueColor уже не вызывается, соответственно никакой реакции на CustomEntity нет.