Autodesk Design Automation API извлекает текст из файла DWG - PullRequest
0 голосов
/ 04 июня 2018

Я бы хотел использовать API Autodesk Design Automation для извлечения всей информации Text и Header из файла .dwg в ​​объект json.Возможно ли это с API автоматизации проектирования?

Любой пример поможет.

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

@ Калиф, да, без плагина в коде .NET / C ++ / Lisp невозможно извлечь атрибуты блока только скриптом.Я бы порекомендовал .NET.Вам будет легче начать, если вы не знакомы с C ++.

Во-первых, я бы посоветовал вам взглянуть на учебные лаборатории AutoCAD .NET API:

https://www.autodesk.com/developer-network/platform-technologies/autocad

выбрать последнюю версию, если вы установили последнюю версиюверсия AutoCAD.Тем не менее, основной рабочий процесс API одинаков для разных версий.Вы также можете выбрать C ++ (ObjectARX), если хотите.

В приведенных выше руководствах демонстрируется, как работать с блоком.А в блоге ниже рассказывается, как получить атрибуты:

http://through -the-interface.typepad.com / through_the_interface / 2006/09 / getting_autocad.html

Я скопировал здесь для удобства:

using Autodesk.AutoCAD;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.EditorInput;


namespace MyApplication

{

  public class DumpAttributes

  {

    [CommandMethod("LISTATT")]

    public void ListAttributes()

    {

      Editor ed =

        Application.DocumentManager.MdiActiveDocument.Editor;

      Database db =

        HostApplicationServices.WorkingDatabase;

      Transaction tr =

        db.TransactionManager.StartTransaction();


      // Start the transaction

      try

      {

        // Build a filter list so that only

        // block references are selected

        TypedValue[] filList = new TypedValue[1] {

          new TypedValue((int)DxfCode.Start, "INSERT")

        };

        SelectionFilter filter =

          new SelectionFilter(filList);

        PromptSelectionOptions opts =

          new PromptSelectionOptions();

        opts.MessageForAdding = "Select block references: ";

        PromptSelectionResult res =

          ed.GetSelection(opts, filter);


        // Do nothing if selection is unsuccessful

        if (res.Status != PromptStatus.OK)

          return;


        SelectionSet selSet = res.Value;

        ObjectId[] idArray = selSet.GetObjectIds();

        foreach (ObjectId blkId in idArray)

        {

          BlockReference blkRef =

            (BlockReference)tr.GetObject(blkId,

              OpenMode.ForRead);

          BlockTableRecord btr =

            (BlockTableRecord)tr.GetObject(

              blkRef.BlockTableRecord,

              OpenMode.ForRead

            );

          ed.WriteMessage(

            "\nBlock: " + btr.Name

          );

          btr.Dispose();


          AttributeCollection attCol =

            blkRef.AttributeCollection;

          foreach (ObjectId attId in attCol)

          {

            AttributeReference attRef =

              (AttributeReference)tr.GetObject(attId,

                OpenMode.ForRead);


            string str =

              ("\n  Attribute Tag: "

                + attRef.Tag

                + "\n    Attribute String: "

                + attRef.TextString

              );

            ed.WriteMessage(str);

          }

        }

        tr.Commit();

      }

      catch (Autodesk.AutoCAD.Runtime.Exception ex)

      {

        ed.WriteMessage(("Exception: " + ex.Message));

      }

      finally

      {

        tr.Dispose();

      }

    }

  }

}

У меня есть образец для создания знаков на чертеже.Он охватывает получение атрибутов и изменение атрибутов:

https://forge.autodesk.com/cloud_and_mobile/2016/02/sign-title-block-of-dwg-file-with-autocad-io-view-data-api.html

И у меня также есть пример получения ячеек таблицы чертежа:

https://forge.autodesk.com/blog/get-cell-data-autocad-table-design-automation-api

Надеюсь, это поможет вам создать плагин для ваших требований.

0 голосов
/ 04 июня 2018

Что вы подразумеваете под информацией «Заголовок»?Можете ли вы привести пример?

Найти извлечение всех текстовых объектов относительно легко, если вы знакомы с AutoCAD .NET API (или C ++ или Lisp).

Вот пример, который извлекает блокии названия слоев: https://github.com/Autodesk-Forge/design.automation-.net-custom.activity.sample

...