חיפוש טקסט ב-DWG C#

קובצי ציור DWG מכילים נתוני עיצוב דו-ממדיים או תלת-ממדיים. הוא נמצא בשימוש נרחב על ידי מעצבים, מהנדסים ואדריכלים. בתרחישים מסוימים, ייתכן שיהיה עליך למצוא טקסט כלשהו בקובץ DWG. בהתאם לכך, מאמר זה דן כיצד לחפש טקסט בקובץ DWG באופן פרוגרמטי ב-C#.

מצא טקסט בקובץ ציור DWG - תצורת API של C#

Aspose.CAD for .NET תומך ביצירה או מניפולציה של שרטוטי CAD שונים כמו DWG, DXF ועוד כמה פורמטים של קבצים. אתה יכול בקלות להגדיר את ה-API על ידי הורדת קבצי ה-DLL מקטע הורדות או הפעלת פקודת ההתקנה הבאה NuGet:

PM> Install-Package Aspose.CAD

כיצד לחפש טקסט בקובץ DWG באמצעות C#

השלבים הבאים מדגימים כיצד לחפש טקסט בקובץ DWG באמצעות C#:

  1. טען קובץ DWG קיים.
  2. חפש טקסט על ידי איטרציה דרך ישויות CadText.
  3. חפש טקסט בפריסה ספציפית.
  4. ייצא את הקובץ לפורמט PDF.

חיפוש טקסט בקובץ ציור DWG ב-C#

עליך לבצע את השלבים הבאים כדי לחפש טקסט בקובץ DWG באמצעות C#:

  1. טען קובץ DWG קיים עם המחלקה CadImage.
  2. חפש טקסט על ידי איטרציה דרך ישויות CadText.
  3. חפש טקסט בפריסה ספציפית.
  4. ייצא את הקובץ לפורמט PDF.

דוגמת הקוד שלהלן מראה כיצד לחפש טקסט בקובץ DWG באמצעות C#:

// טען קובץ DWG קיים כ-CadImage.
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath))
{
    // חפש טקסט בקובץ 
    foreach (CadBaseEntity entity in cadImage.Entities)
    {
        // אנו חוזרים דרך ישויות CadText, אך ישויות אחרות עשויות להכיל גם טקסט, למשל CadMText ואחרות
        IterateCADNodes(entity);
    }

    // חפש טקסט בפריסה ספציפית קבל את כל שמות הפריסה וקשר כל פריסה לבלוק מתאים עם ישויות
    CadLayoutDictionary layouts = cadImage.Layouts;
    string[] layoutNames = new string[layouts.Count];
    int i = 0;
    foreach (CadLayout layout in layouts.Values)
    {
        layoutNames[i++] = layout.LayoutName;
        System.Console.WriteLine("Layout " + layout.LayoutName + " is found");

        // מצא בלוק, מתאים ל-DWG בלבד
        CadBlockTableObject blockTableObjectReference = null;
        foreach (CadBlockTableObject tableObject in cadImage.BlocksTables)
        {
            if (string.Equals(tableObject.HardPointerToLayout, layout.ObjectHandle))
            {
                blockTableObjectReference = tableObject;
                break;
            }
        }

        if (blockTableObjectReference != null)
        {
            // Collection cadBlockEntity.Entities מכיל מידע על כל הישויות בפריסה ספציפית
            CadBlockEntity cadBlockEntity = cadImage.BlockEntities[blockTableObjectReference.BlockName];
        }
    }

    // ייצוא ל-PDF
    CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
    rasterizationOptions.PageWidth = 1600;
    rasterizationOptions.PageHeight = 1600;
    rasterizationOptions.AutomaticLayoutsScaling = true;

    // אם אוסף cadBlockEntity עבור פריסה נבחרה או אוסף ישויותOnLayouts לפי BlockTableRecordHandle של פריסה (עבור dxf) ריק
    rasterizationOptions.Layouts = new[] { "Layout1" };

    ImageOptions.PdfOptions pdfOptions = new PdfOptions();

    pdfOptions.VectorRasterizationOptions = rasterizationOptions;
    cadImage.Save("SearchText_CAD.pdf", pdfOptions);
}





public static void SearchTextInDWGAutoCADFile()
{
    // הנתיב לספריית המסמכים.            
    string sourceFilePath = "search.dwg";
    // טען קובץ DWG קיים כ-CadImage. 
    CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(sourceFilePath);

    // חפש טקסט בקטע הישויות 
    foreach (var entity in cadImage.Entities)
    {
        IterateCADNodes(entity);
    }

    // חפש טקסט בקטע הבלוק 
    foreach (CadBlockEntity blockEntity in cadImage.BlockEntities.Values)
    {
        foreach (var entity in blockEntity.Entities)
        {
            IterateCADNodes(entity);
        }
    }
}



private static void IterateCADNodes(CadBaseEntity obj)
{
    switch (obj.TypeName)
    {
        case CadEntityTypeName.TEXT:
            CadText childObjectText = (CadText)obj;

            Console.WriteLine(childObjectText.DefaultValue);

            break;

        case CadEntityTypeName.MTEXT:
            CadMText childObjectMText = (CadMText)obj;

            Console.WriteLine(childObjectMText.Text);

            break;

        case CadEntityTypeName.INSERT:
            CadInsertObject childInsertObject = (CadInsertObject)obj;

            foreach (var tempobj in childInsertObject.ChildObjects)
            {
                IterateCADNodes(tempobj);
            }
            break;

        case CadEntityTypeName.ATTDEF:
            CadAttDef attDef = (CadAttDef)obj;

            Console.WriteLine(attDef.DefaultString);
            break;

        case CadEntityTypeName.ATTRIB:
            CadAttrib attAttrib = (CadAttrib)obj;

            Console.WriteLine(attAttrib.DefaultText);
            break;
    }
}

קבל רישיון זמני בחינם

אתה יכול לבדוק את התכונות של ה-API ללא כל מגבלות הערכה על ידי בקשת [רישיון זמני חינם].

סיכום

במאמר זה, למדת כיצד לחפש טקסט בקובץ DWG באופן תכנותי ב-C#. יתר על כן, אתה יכול לחקור תכונות שונות של ה-API על ידי עיון בסעיף תיעוד. בכל מקרה של חששות, אנא כתוב לנו ב-פורום.

ראה גם

מציג קבצי DWG מבוסס על ASP.NET