@j@y123 Ответов: 1

Этот код дает мне вывод всех штриховок на моем чертеже, но текст перезаписан означает, что выход перезаписан, как я могу преодолеть эту проблему?


[CommandMethod("FindAllHatches")]
public static void FindAllHatches()
{
    Document acDoc = Application.DocumentManager.MdiActiveDocument;

    acDoc.Editor.WriteMessage("\nSearching for Hatches");

    var db = acDoc.Database;
    using (Transaction transaction = db.TransactionManager.StartTransaction())
    {
        ObjectId idModelSpace = SymbolUtilityServices.GetBlockModelSpaceId(db);

        BlockTableRecord modelSpace = transaction.GetObject(idModelSpace, OpenMode.ForRead) as
            BlockTableRecord;

        foreach (var objId in modelSpace)
        {
            var entity = transaction.GetObject(objId, OpenMode.ForRead);
            Hatch hatch = entity as Hatch;
            if (hatch == null)
                continue; //not hatch

            acDoc.Editor.WriteMessage("\nFound Hatch Area={0}", hatch.Area);
        }            
    }
}


Что я уже пробовал:

Попробуйте сгенерировать выходные данные вертикально, чтобы каждая область отображалась отдельно

@j@y123

пространство имен allhatch
{
публичный класс Class1
{
[CommandMethod ("ха")]
public static void FindAllHatches()
{
Документ acDoc = приложение.Класс documentmanager.MdiActiveDocument;

acDoc.Редактор.Метода writemessage("\nSearching для люков");

var db = acDoc. Database;
используя (транзакций = дБ.Вопросы.Starttransaction тогда())
{
ObjectId idModelSpace = SymbolUtilityServices.GetBlockModelSpaceId(db);

BlockTableRecord modelSpace = транзакция.GetObject(idModelSpace, OpenMode.ForWrite) как
BlockTableRecord;

по каждому элементу (ВАР, находящемуся в моделях)
{
var entity = транзакция.Функция getobject (, находящемуся, параметр openmode.ForRead);
Люк Люк = сущность как Люк;
if (hatch = = null)
продолжить; / / не Люк
MText actext = новый MText();
actext.SetDatabaseDefaults();
actext.Высота = 16;
actext.Ширина = 2;

actext. Contents = ("\n область штриховки = " + hatch. Area);
acDoc.Редактор.WriteMessage ("\n область штриховки: "+ hatch. Area);

модельное пространство.AppendEntity(actext);
операция.AddNewlyCreatedDBObject(actext, true);
}
операция.Совершать();
}
}
}
}

@j@y123

Это весь код для того же самого

1 Ответов

Рейтинг:
8

Ehsan Skardu

попробовать это

[CommandMethod("FindAllHatches")]
public static void FindAllHatches()
{
    Document acDoc = Application.DocumentManager.MdiActiveDocument;
 var str=new StringBuilder();
    str.Append("\nSearching for Hatches");
 
    var db = acDoc.Database;
    using (Transaction transaction = db.TransactionManager.StartTransaction())
    {
        ObjectId idModelSpace = SymbolUtilityServices.GetBlockModelSpaceId(db);
 
        BlockTableRecord modelSpace = transaction.GetObject(idModelSpace, OpenMode.ForRead) as
            BlockTableRecord;
 
        foreach (var objId in modelSpace)
        {
            var entity = transaction.GetObject(objId, OpenMode.ForRead);
            Hatch hatch = entity as Hatch;
            if (hatch == null)
                continue; //not hatch

           str.Append("\nFound Hatch Area={0}", hatch.Area);
        } 
 acDoc.Editor.WriteMessage(str.ToString());           
    }
}


@j@y123

это дает мне ошибку подавления ошибок CS1503 Аргумент 1: не удается преобразовать из 'string' в 'char' и 'double' в 'int'.

@j@y123

А во-вторых, я хочу, чтобы вывод на моем чертеже был не на подсказке.