Тема: Атрибуты файла

Привет всем  !!!!!   Только начинаю  писать под  autocad.  Подскажите пожалуйста как мне программно узнать  атрибуты файла  (количество листов, их формат,  внешние ссылки  и их количество).  и самое главное   в чем писать?  lisp VBA   ObjectARX  ???

Re: Атрибуты файла

Только начинаю писать под autocad.

то что ты спрашиваешь, люди узнают как минимум через 1-2 месяца после начала изучения ARX. Так что даже если кто-то даст готовые куски кода, ты скорей всего их просто не сможешь объединить.
Теперь по существу. все что тебя интересует, можно найти в БД чертежа. делаешь пробег по текущей базе (ну это для текущего чертежа), либо открываешь базу через readDwgFile и ищешь то, что тебя интересует в определенных разделах указанного AcDbDatabase.

и самое главное в чем писать?

ну так как вопрос задан в разделе arx, отвечу просто :) : пиши на С++ + ObjectARX
хотя если б вопрос был задан в другой ветке, тебе б ответили также в пользу того языка, которому посвящена ветка.

P.S.: для нормального понимания логики автодеска нужно угробить не один месяц кропотливой работы (ну это для среднестатистического ленивого программера).
для начала, пройди уроки из папки arxlabs(находится в папке ObjectARX для любого автокада). может и не сильно поможет, но уж точно не навредит :):):)

Re: Атрибуты файла

Привет ! нет у меня 2 месяцев, так что бегом, в подпрыге надо сделать!   :o Так что даже если кто-то даст готовые куски кода, ты скорей всего их просто не сможешь объединить.
  смогу!  просто самой  что то писать - долгое это дело!  времени маловато!!!  уроки смотрела, хорошая вещь

Re: Атрибуты файла

ну ладно. вот пример получения данных о всех листах текущего чертежа.
получаются такие данные:
- имя листа
- размер бумаги
- имя принтера для листа
- ориентация листа
- суммарное количество листов.

сразу предупреждаю, что написано корявенько. но в качестве примера пойдет :):):)

        CString firstState = acdbHostApplicationServices()->layoutManager()->findActiveLayout(true);
        AcDbDictionary *pLayoutDict;
        if (acdbCurDwg()->getLayoutDictionary(pLayoutDict,AcDb::kForRead)!= Acad::eOk) return;
        acutPrintf(_T("\n************************************"));
        acutPrintf(_T("\n*** Все листы текущего документа ***"));
        acutPrintf(_T("\n------------------------------------"));
        AcDbDictionaryIterator* pLayoutDictIter;
        pLayoutDictIter = pLayoutDict->newIterator();
        pLayoutDict->close();

        int layoutCount = -1;
        for (; !pLayoutDictIter->done(); pLayoutDictIter->next())
        {
            if (layoutCount == -1){layoutCount++;continue;} // это сделано для того, чтоб пропустить вкладку МОДЕЛЬ
            AcDbLayout * pLayout;
            if(pLayoutDictIter->getObject((AcDbObject*&)pLayout, AcDb::kForRead)!= Acad::eOk)continue;
            pLayout->close();

            ACHAR * layName;
            pLayout->getLayoutName(layName);
            acutPrintf(_T("\nИмя листа: %s\n"),layName);
            acdbHostApplicationServices()->layoutManager()->setCurrentLayout(layName);
            acutDelString(layName);

            double width, height;
            pLayout->getPlotPaperSize(width,height);
            AcDbPlotSettings::PlotRotation pltRot = pLayout->plotRotation();
            bool pbLandScape;
            if (width > height)
            {
                if (AcDbPlotSettings::k0degrees == pltRot || AcDbPlotSettings::k180degrees == pltRot)pbLandScape = true;
                else if (AcDbPlotSettings::k90degrees == pltRot || AcDbPlotSettings::k270degrees == pltRot)pbLandScape = false;
            }
            else
            {
                if (AcDbPlotSettings::k0degrees == pltRot || AcDbPlotSettings::k180degrees == pltRot)pbLandScape = false;
                else if (AcDbPlotSettings::k90degrees == pltRot || AcDbPlotSettings::k270degrees == pltRot)pbLandScape = true;
            }
            acutPrintf(_T("\nРазмер бумаги, мм (Ш x В): %.2f x %.2f"), width, height);
            if (pbLandScape)acutPrintf(_T("\nОриентация листа: альбомная"));
            else            acutPrintf(_T("\nОриентация листа: книжная"));


            const ACHAR *szBuf;
            pLayout->getPlotCfgName(szBuf);
            acutPrintf(_T("\nПринтер: %s"),szBuf);
            acutPrintf(_T("\n------------------------------------"));
            layoutCount++;
        }

        acutPrintf(_T("\n\nВсего листов: %d"),layoutCount);
        acutPrintf(_T("\n************************************\n"));
        acdbHostApplicationServices()->layoutManager()->setCurrentLayout(firstState.GetString());

с внешними ссылками чуток иначе, но принцип остается :):):)

Re: Атрибуты файла

по поводу внешних ссылок. учись пользоваться поиском. Такой вопрос уже поднимался.
>> XREF <<.