> Александр Ривилис
"В этот момент уже поздно их делать Invisible — им нужно присвоить свойство Invisible при создании."Формально я их не создаю.
Я их (AttDef) копирую ф-цией AcDbDatabase::insert(...). В исходном dwg нет возможости их менять. Или имеете ввиду выставить флаг invisible в скопированой BTR? Пробовал - не работает, т.е. флаг выставляется, а в Jig-е все равно прорисовывается тег AttDef-a.
1.Какие есть еще способы скопировать BTR?
2.Как же при моем способе сделать так чтоб в Jig не рисовались AttDef?
Пробовал подсунуть Jig-у свой класс-наследник AcDbBlockReference с переопределенной worldDraw. Отображение AttDef убрал, но блок в Jig-e перестал двигаться.
Сделал так:
class CsBlockReference : public AcDbBlockReference
{
public:
// ACRX_DECLARE_MEMBERS(CsBlockReference);
CsBlockReference(const AcGePoint3d& position,AcDbObjectId blockTableRec);
virtual ~CsBlockReference();
virtual Adesk::Boolean worldDraw(AcGiWorldDraw* p_Wd);
virtual Acad::ErrorStatus setPosition(const AcGePoint3d&);
private:
AcDbObjectId m_BlockBTRId;
};
CsBlockReference::CsBlockReference(const AcGePoint3d& position,AcDbObjectId blockTableRec)
{
AcDbBlockReference::AcDbBlockReference(position,blockTableRec);
m_BlockBTRId=blockTableRec;
}
Adesk::Boolean CsBlockReference::worldDraw(AcGiWorldDraw* p_Wd)
{
Acad::ErrorStatus e;
AcDbBlockTableRecordIterator *btrIterator;
AcDbBlockTableRecord *btr;
AcDbEntity *t_Entity;
AcDbText *t_AttDef;
e=acdbOpenObject(btr,m_BlockBTRId,AcDb::kForRead);
e=btr->newIterator(btrIterator);
for(btrIterator->start();!btrIterator->done();btrIterator->step())
{
e=btrIterator->getEntity(t_Entity,AcDb::kForRead);
t_AttDef=AcDbText::cast(t_Entity);
CString debugstr;
debugstr.Format("%s\n",t_Entity->isA()->name());
OutputDebugString(debugstr);
if(t_AttDef==NULL)
{
p_Wd->geometry().draw(t_Entity);
}
e=t_Entity->close();
}
delete btrIterator;
btr->close();
return Adesk::kTrue;
}
Acad::ErrorStatus CsBlockReference::setPosition(const AcGePoint3d &pt)
{
return AcDbBlockReference::setPosition(pt);
}
что-то может еще переопределить надо?
setPosition transformBy и т.д. по-идее должны вызываться родительские.
Пробовал даже варварский способ:
перед вызовом Jig-a удалить AttDef из BTR сохранив его ObjectId, а при выходе из Jig-a восстановить [erase(true/false)]. Это работает, но:
1.не уверен на счет сохранности Id и прочих глюков.
2. AttDef утрачивает свойства текстовые. Это самое неприятное.
3. Ужасно коряво выглядит.
Как всеже работает акадовский _insert?