Расстановка атрибутов

Автор Тема: Расстановка атрибутов  (Прочитано 6525 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Расстановка атрибутов
« : 13-05-2018, 20:22:38 »
Здравствуйте!

При создании атрибутов блока не удается задать их положение-все оказываются в одной точке. Хотя базовая точка различна. В чем может быть проблема?
Код - C# [Выбрать]
  1. AttributeDefinition developer = new AttributeDefinition
  2.                     {
  3.                         Position = new Point3d(-167, 0, 0),
  4.                         Prompt = "Developer",
  5.                         Tag = "Developer",
  6.                         TextString = "Гусаров",
  7.                         WidthFactor = 0.7,
  8.                         Height = 3.5,
  9.                         Justify = AttachmentPoint.BottomLeft
  10.                     };
  11.                     acBlkTblRec.AppendEntity(developer);
  12.                     acTrans.AddNewlyCreatedDBObject(developer, true);
  13.                     blkRecId = acBlkTblRec.Id;
  14.  
  15.                     AttributeDefinition сhecker = new AttributeDefinition
  16.                     {
  17.                         Position = new Point3d(-162, 0, 0),
  18.                         LockPositionInBlock=true,
  19.                         Prompt = "Checker",
  20.                         Tag = "Checker",
  21.                         TextString = "Магненков",
  22.                         WidthFactor = 0.7,
  23.                         Height = 3.5,
  24.                         Justify = AttachmentPoint.BottomLeft
  25.                     };
  26.                     acBlkTblRec.AppendEntity(сhecker);
  27.                     acTrans.AddNewlyCreatedDBObject(сhecker, true);
  28.                     blkRecId = acBlkTblRec.Id;
  29.  
  30.                     AttributeDefinition issuer = new AttributeDefinition
  31.                     {
  32.                         Position = new Point3d(-157, 0, 0),
  33.                         Prompt = "Issuer",
  34.                         Tag = "Issuer",
  35.                         TextString = "Самоленков",
  36.                         WidthFactor=0.7,
  37.                         Height = 3.5,
  38.                         Justify = AttachmentPoint.BottomLeft
  39.                     };
  40.                     acBlkTblRec.AppendEntity(issuer);
  41.                     acTrans.AddNewlyCreatedDBObject(issuer, true);
  42.                     blkRecId = acBlkTblRec.Id;


Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расстановка атрибутов
« Ответ #1 : 13-05-2018, 20:26:08 »
Кроме Position у AttributeDefinition нужно задать еще и AlignmentPoint.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Расстановка атрибутов
« Ответ #2 : 13-05-2018, 21:14:34 »
AlignmentPoint.
это свойство отвечает за положение внутри блока? Ведь по сути это выравнивание? или я неправ?

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расстановка атрибутов
« Ответ #3 : 13-05-2018, 21:21:31 »
AlignmentPoint.
это свойство отвечает за положение внутри блока? Ведь по сути это выравнивание? или я неправ?
Это свойство задаёт точку выравнивания.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Расстановка атрибутов
« Ответ #4 : 13-05-2018, 21:23:32 »
задаёт точку выравнивания
а относительно этой точки будет происходить позиционирование внутри блока-верно?

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расстановка атрибутов
« Ответ #5 : 13-05-2018, 22:01:41 »
задаёт точку выравнивания
а относительно этой точки будет происходить позиционирование внутри блока-верно?

Да. Я думаю, что за это время уже можно было и проверить и поискать готовые примеры.
Пример: http://adn-cis.org/forum/index.php?topic=8006.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Расстановка атрибутов
« Ответ #6 : 14-05-2018, 21:30:18 »
Предложенный вариант изучил, у меня почему-то не срабатывает. код не компилируется.

Код - C# [Выбрать]
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Autodesk.AutoCAD.Runtime;
  6. using Autodesk.AutoCAD.ApplicationServices;
  7. using Autodesk.AutoCAD.DatabaseServices;
  8. using Autodesk.AutoCAD.Geometry;
  9. using Autodesk.AutoCAD.EditorInput;
  10.  
  11. namespace ITAT_Autocad
  12. {
  13.     struct Formats
  14.     {
  15.         public string format;
  16.         public int height;
  17.         public int width;
  18.         public string orientation;
  19.         public string baseFormat;
  20.         public int multiplier;
  21.     };
  22.  
  23.  
  24.     public class yyy
  25.     {
  26.         public static void number()
  27.         {
  28.             Formats a1;
  29.             Formats a3;
  30.             Formats a4;
  31.  
  32.             a1.format = "A1";
  33.             a1.height = 891;
  34.             a1.width = 1143;
  35.             a1.orientation = "h";
  36.             a1.multiplier = 1;
  37.         }
  38.     }
  39.     public class FormatsHandler
  40.     {
  41.  
  42.  
  43.  
  44.  
  45.         protected void DrawFormat()
  46.         {
  47.             throw new System.NotImplementedException();
  48.         }
  49.  
  50.         protected void MakeBlock()
  51.         {
  52.             throw new System.NotImplementedException();
  53.         }
  54.  
  55.  
  56.         [CommandMethod("2title")]
  57.         public void DrawMainTitle()
  58.         {
  59.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  60.             Database acCurDb = acDoc.Database;
  61.             using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  62.             {
  63.                 BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;
  64.  
  65.                 ObjectId blkRecId = ObjectId.Null;
  66.  
  67.                 if (!acBlkTbl.Has("MainTitle"))
  68.                 {
  69.                     BlockTableRecord acBlkTblRec = new BlockTableRecord();
  70.                     acBlkTblRec.Name = "MainTitle";
  71.  
  72.                     // Set the insertion point for the block
  73.                     acBlkTblRec.Origin = new Point3d(5, 5, 0);
  74.                     acBlkTbl.UpgradeOpen();
  75.                     acBlkTbl.Add(acBlkTblRec);
  76.                     acTrans.AddNewlyCreatedDBObject(acBlkTblRec, true);
  77.  
  78.                     Polyline acPoly = new Polyline();
  79.                     acPoly.SetDatabaseDefaults();
  80.                     acPoly.AddVertexAt(0, new Point2d(0, 55), 0, 0, 0);
  81.                     acPoly.AddVertexAt(1, new Point2d(-185, 55), 0, 0, 0);
  82.                     acPoly.AddVertexAt(2, new Point2d(-185, 0), 0, 0, 0);
  83.                     acBlkTblRec.AppendEntity(acPoly);
  84.                     acTrans.AddNewlyCreatedDBObject(acPoly, true);
  85.  
  86.                     Polyline acPoly1 = new Polyline();
  87.                     acPoly1.SetDatabaseDefaults();
  88.                     acPoly1.AddVertexAt(0, new Point2d(-178, 55), 0, 0, 0);
  89.                     acPoly1.AddVertexAt(1, new Point2d(-178, 30), 0, 0, 0);
  90.                     acBlkTblRec.AppendEntity(acPoly1);
  91.                     acTrans.AddNewlyCreatedDBObject(acPoly1, true);
  92.  
  93.                     Polyline acPoly2 = new Polyline();
  94.                     acPoly2.SetDatabaseDefaults();
  95.                     acPoly2.AddVertexAt(0, new Point2d(-168, 55), 0, 0, 0);
  96.                     acPoly2.AddVertexAt(1, new Point2d(-168, 0), 0, 0, 0);
  97.                     acBlkTblRec.AppendEntity(acPoly2);
  98.                     acTrans.AddNewlyCreatedDBObject(acPoly2, true);
  99.  
  100.                     Polyline acPoly3 = new Polyline();
  101.                     acPoly3.SetDatabaseDefaults();
  102.                     acPoly3.AddVertexAt(0, new Point2d(-145, 55), 0, 0, 0);
  103.                     acPoly3.AddVertexAt(1, new Point2d(-145, 0), 0, 0, 0);
  104.                     acBlkTblRec.AppendEntity(acPoly3);
  105.                     acTrans.AddNewlyCreatedDBObject(acPoly3, true);
  106.  
  107.                     Polyline acPoly4 = new Polyline();
  108.                     acPoly4.SetDatabaseDefaults();
  109.                     acPoly4.AddVertexAt(0, new Point2d(-130, 55), 0, 0, 0);
  110.                     acPoly4.AddVertexAt(1, new Point2d(-130, 0), 0, 0, 0);
  111.                     acBlkTblRec.AppendEntity(acPoly4);
  112.                     acTrans.AddNewlyCreatedDBObject(acPoly4, true);
  113.  
  114.                     Polyline acPoly5 = new Polyline();
  115.                     acPoly5.SetDatabaseDefaults();
  116.                     acPoly5.AddVertexAt(0, new Point2d(-120, 55), 0, 0, 0);
  117.                     acPoly5.AddVertexAt(1, new Point2d(-120, 0), 0, 0, 0);
  118.                     acBlkTblRec.AppendEntity(acPoly5);
  119.                     acTrans.AddNewlyCreatedDBObject(acPoly5, true);
  120.  
  121.                     Polyline acPoly6 = new Polyline();
  122.                     acPoly6.SetDatabaseDefaults();
  123.                     acPoly6.AddVertexAt(0, new Point2d(-50, 40), 0, 0, 0);
  124.                     acPoly6.AddVertexAt(1, new Point2d(-50, 0), 0, 0, 0);
  125.                     acBlkTblRec.AppendEntity(acPoly6);
  126.                     acTrans.AddNewlyCreatedDBObject(acPoly6, true);
  127.  
  128.                     Polyline acPoly7 = new Polyline();
  129.                     acPoly7.SetDatabaseDefaults();
  130.                     acPoly7.AddVertexAt(0, new Point2d(-35, 40), 0, 0, 0);
  131.                     acPoly7.AddVertexAt(1, new Point2d(-35, 20), 0, 0, 0);
  132.                     acBlkTblRec.AppendEntity(acPoly7);
  133.                     acTrans.AddNewlyCreatedDBObject(acPoly7, true);
  134.  
  135.                     Polyline acPoly8 = new Polyline();
  136.                     acPoly8.SetDatabaseDefaults();
  137.                     acPoly8.AddVertexAt(0, new Point2d(-18, 40), 0, 0, 0);
  138.                     acPoly8.AddVertexAt(1, new Point2d(-18, 20), 0, 0, 0);
  139.                     acBlkTblRec.AppendEntity(acPoly8);
  140.                     acTrans.AddNewlyCreatedDBObject(acPoly8, true);
  141.  
  142.                     Polyline acPoly9 = new Polyline();
  143.                     acPoly9.SetDatabaseDefaults();
  144.                     acPoly9.AddVertexAt(0, new Point2d(-30, 20), 0, 0, 0);
  145.                     acPoly9.AddVertexAt(1, new Point2d(-30, 15), 0, 0, 0);
  146.                     acBlkTblRec.AppendEntity(acPoly9);
  147.                     acTrans.AddNewlyCreatedDBObject(acPoly9, true);
  148.  
  149.                     Polyline acPoly10 = new Polyline();
  150.                     acPoly10.SetDatabaseDefaults();
  151.                     acPoly10.AddVertexAt(0, new Point2d(-120, 40), 0, 0, 0);
  152.                     acPoly10.AddVertexAt(1, new Point2d(-0, 40), 0, 0, 0);
  153.                     acBlkTblRec.AppendEntity(acPoly10);
  154.                     acTrans.AddNewlyCreatedDBObject(acPoly10, true);
  155.  
  156.                     Polyline acPoly11 = new Polyline();
  157.                     acPoly11.SetDatabaseDefaults();
  158.                     acPoly11.AddVertexAt(0, new Point2d(-120, 15), 0, 0, 0);
  159.                     acPoly11.AddVertexAt(1, new Point2d(-0, 15), 0, 0, 0);
  160.                     acBlkTblRec.AppendEntity(acPoly11);
  161.                     acTrans.AddNewlyCreatedDBObject(acPoly11, true);
  162.  
  163.                     Polyline acPoly12 = new Polyline();
  164.                     acPoly12.SetDatabaseDefaults();
  165.                     acPoly12.AddVertexAt(0, new Point2d(-50, 35), 0, 0, 0);
  166.                     acPoly12.AddVertexAt(1, new Point2d(-0, 35), 0, 0, 0);
  167.                     acBlkTblRec.AppendEntity(acPoly12);
  168.                     acTrans.AddNewlyCreatedDBObject(acPoly12, true);
  169.  
  170.                     Polyline acPoly13 = new Polyline();
  171.                     acPoly13.SetDatabaseDefaults();
  172.                     acPoly13.AddVertexAt(0, new Point2d(-50, 20), 0, 0, 0);
  173.                     acPoly13.AddVertexAt(1, new Point2d(-0, 20), 0, 0, 0);
  174.                     acBlkTblRec.AppendEntity(acPoly13);
  175.                     acTrans.AddNewlyCreatedDBObject(acPoly13, true);
  176.  
  177.                     Polyline acPoly14 = new Polyline();
  178.                     acPoly14.SetDatabaseDefaults();
  179.                     acPoly14.AddVertexAt(0, new Point2d(-185, 50), 0, 0, 0);
  180.                     acPoly14.AddVertexAt(1, new Point2d(-120, 50), 0, 0, 0);
  181.                     acBlkTblRec.AppendEntity(acPoly14);
  182.                     acTrans.AddNewlyCreatedDBObject(acPoly14, true);
  183.  
  184.                     Polyline acPoly15 = new Polyline();
  185.                     acPoly15.SetDatabaseDefaults();
  186.                     acPoly15.AddVertexAt(0, new Point2d(-185, 45), 0, 0, 0);
  187.                     acPoly15.AddVertexAt(1, new Point2d(-120, 45), 0, 0, 0);
  188.                     acBlkTblRec.AppendEntity(acPoly15);
  189.                     acTrans.AddNewlyCreatedDBObject(acPoly15, true);
  190.  
  191.                     Polyline acPoly16 = new Polyline();
  192.                     acPoly16.SetDatabaseDefaults();
  193.                     acPoly16.AddVertexAt(0, new Point2d(-185, 40), 0, 0, 0);
  194.                     acPoly16.AddVertexAt(1, new Point2d(-120, 40), 0, 0, 0);
  195.                     acBlkTblRec.AppendEntity(acPoly16);
  196.                     acTrans.AddNewlyCreatedDBObject(acPoly16, true);
  197.  
  198.                     Polyline acPoly17 = new Polyline();
  199.                     acPoly17.SetDatabaseDefaults();
  200.                     acPoly17.AddVertexAt(0, new Point2d(-185, 35), 0, 0, 0);
  201.                     acPoly17.AddVertexAt(1, new Point2d(-120, 35), 0, 0, 0);
  202.                     acBlkTblRec.AppendEntity(acPoly17);
  203.                     acTrans.AddNewlyCreatedDBObject(acPoly17, true);
  204.  
  205.                     Polyline acPoly18 = new Polyline();
  206.                     acPoly18.SetDatabaseDefaults();
  207.                     acPoly18.AddVertexAt(0, new Point2d(-185, 30), 0, 0, 0);
  208.                     acPoly18.AddVertexAt(1, new Point2d(-120, 30), 0, 0, 0);
  209.                     acBlkTblRec.AppendEntity(acPoly18);
  210.                     acTrans.AddNewlyCreatedDBObject(acPoly18, true);
  211.  
  212.                     Polyline acPoly19 = new Polyline();
  213.                     acPoly19.SetDatabaseDefaults();
  214.                     acPoly19.AddVertexAt(0, new Point2d(-185, 25), 0, 0, 0);
  215.                     acPoly19.AddVertexAt(1, new Point2d(-120, 25), 0, 0, 0);
  216.                     acBlkTblRec.AppendEntity(acPoly19);
  217.                     acTrans.AddNewlyCreatedDBObject(acPoly19, true);
  218.  
  219.                     Polyline acPoly20 = new Polyline();
  220.                     acPoly20.SetDatabaseDefaults();
  221.                     acPoly20.AddVertexAt(0, new Point2d(-185, 20), 0, 0, 0);
  222.                     acPoly20.AddVertexAt(1, new Point2d(-120, 20), 0, 0, 0);
  223.                     acBlkTblRec.AppendEntity(acPoly20);
  224.                     acTrans.AddNewlyCreatedDBObject(acPoly20, true);
  225.  
  226.                     Polyline acPoly21 = new Polyline();
  227.                     acPoly21.SetDatabaseDefaults();
  228.                     acPoly21.AddVertexAt(0, new Point2d(-185, 15), 0, 0, 0);
  229.                     acPoly21.AddVertexAt(1, new Point2d(-120, 15), 0, 0, 0);
  230.                     acBlkTblRec.AppendEntity(acPoly21);
  231.                     acTrans.AddNewlyCreatedDBObject(acPoly21, true);
  232.  
  233.                     Polyline acPoly22 = new Polyline();
  234.                     acPoly22.SetDatabaseDefaults();
  235.                     acPoly22.AddVertexAt(0, new Point2d(-185, 10), 0, 0, 0);
  236.                     acPoly22.AddVertexAt(1, new Point2d(-120, 10), 0, 0, 0);
  237.                     acBlkTblRec.AppendEntity(acPoly22);
  238.                     acTrans.AddNewlyCreatedDBObject(acPoly22, true);
  239.  
  240.                     Polyline acPoly23 = new Polyline();
  241.                     acPoly23.SetDatabaseDefaults();
  242.                     acPoly23.AddVertexAt(0, new Point2d(-185, 5), 0, 0, 0);
  243.                     acPoly23.AddVertexAt(1, new Point2d(-120, 5), 0, 0, 0);
  244.                     acBlkTblRec.AppendEntity(acPoly23);
  245.                     acTrans.AddNewlyCreatedDBObject(acPoly23, true);
  246.  
  247.                    
  248.                     AttributeDefinition developer = new AttributeDefinition
  249.                     {
  250.                         Position = new Point3d(-170, 0, 0),
  251.                         AlignmentPoint = new Point3d(-170, 0, 0),
  252.                         AdjustAlignment(acBlkTbl.Database),
  253.                         Prompt = "Developer",
  254.                         Tag = "Developer",
  255.                         TextString = "Гусаров",
  256.                         WidthFactor = 0.7,
  257.                         Height = 3.5,
  258.                         Justify = AttachmentPoint.BottomLeft
  259.                     };
  260.                     acBlkTblRec.AppendEntity(developer);
  261.                     acTrans.AddNewlyCreatedDBObject(developer, true);
  262.                     blkRecId = acBlkTblRec.Id;
  263.  
  264.                     AttributeDefinition сhecker = new AttributeDefinition
  265.                     {
  266.                         Position = new Point3d(-162, 0, 0),
  267.                         //AlignmentPoint=new Point3d(-167,45,0),
  268.                         LockPositionInBlock=true,
  269.                         Prompt = "Checker",
  270.                         Tag = "Checker",
  271.                         TextString = "Магненков",
  272.                         WidthFactor = 0.7,
  273.                         Height = 3.5,
  274.                         Justify = AttachmentPoint.BottomLeft
  275.                     };
  276.                     acBlkTblRec.AppendEntity(сhecker);
  277.                     acTrans.AddNewlyCreatedDBObject(сhecker, true);
  278.                     blkRecId = acBlkTblRec.Id;
  279.  
  280.                     AttributeDefinition issuer = new AttributeDefinition
  281.                     {
  282.                         Position = new Point3d(-162, 0, 0),
  283.                         //AlignmentPoint = new Point3d(-167, 40, 0),
  284.                         Prompt = "Issuer",
  285.                         Tag = "Issuer",
  286.                         TextString = "Самоленков",
  287.                         WidthFactor=0.7,
  288.                         Height = 3.5,
  289.                         Justify = AttachmentPoint.BottomLeft
  290.                     };
  291.                     acBlkTblRec.AppendEntity(issuer);
  292.                     acTrans.AddNewlyCreatedDBObject(issuer, true);
  293.                     blkRecId = acBlkTblRec.Id;
  294.                 }
  295.                 else
  296.                 {
  297.                     blkRecId = acBlkTbl["MainTitle"];
  298.                 }
  299.  
  300.                 // Insert the block into the current space
  301.                 if (blkRecId != ObjectId.Null)
  302.                 {
  303.                     BlockTableRecord acBlkTblRec;
  304.                     acBlkTblRec = acTrans.GetObject(blkRecId, OpenMode.ForRead) as BlockTableRecord;
  305.  
  306.                     // Create and insert the new block reference
  307.                     BlockReference acBlkRef = new BlockReference(acBlkTblRec.Origin, blkRecId);
  308.                     acBlkRef.SetDatabaseDefaults();
  309.  
  310.                     BlockTableRecord acCurSpaceBlkTblRec;
  311.                     acCurSpaceBlkTblRec = acTrans.GetObject(acCurDb.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
  312.  
  313.                     acCurSpaceBlkTblRec.AppendEntity(acBlkRef);
  314.                     acTrans.AddNewlyCreatedDBObject(acBlkRef, true);
  315.  
  316.                     // Verify block table record has attribute definitions associated with it
  317.                     if (acBlkTblRec.HasAttributeDefinitions)
  318.                     {
  319.                         // Add attributes from the block table record
  320.                         foreach (ObjectId objID in acBlkTblRec)
  321.                         {
  322.                             DBObject dbObj = acTrans.GetObject(objID, OpenMode.ForRead) as DBObject;
  323.  
  324.                             if (dbObj is AttributeDefinition)
  325.                             {
  326.                                 AttributeDefinition acAtt = dbObj as AttributeDefinition;
  327.  
  328.                                 if (!acAtt.Constant)
  329.                                 {
  330.                                     AttributeReference acAttRef = new AttributeReference();
  331.                                     acAttRef.SetAttributeFromBlock(acAtt, acBlkRef.BlockTransform);
  332.                                     //acAttRef.Position = acAtt.Position.TransformBy(acBlkRef.BlockTransform);
  333.                                     acAttRef.TextString = acAtt.TextString;
  334.                                     acBlkRef.AttributeCollection.AppendAttribute(acAttRef);
  335.                                     acTrans.AddNewlyCreatedDBObject(acAttRef, true);
  336.                                 }
  337.                             }
  338.                         }
  339.                     }
  340.                 }
  341.  
  342.                 // Save the new object to the database
  343.                 acTrans.Commit();
  344.  
  345.             }
  346.  
  347.         }
  348.     }
  349. }


               

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расстановка атрибутов
« Ответ #7 : 15-05-2018, 00:15:01 »
код не компилируется.
Какая ошибка? На какой строке? Подозреваю, что это всё от невнимательности...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Расстановка атрибутов
« Ответ #8 : 15-05-2018, 07:00:29 »
боже, что за портянка

Код - C# [Выбрать]
  1.                     Polyline acPoly = new Polyline();
  2.                     acPoly.SetDatabaseDefaults();
  3.                     acPoly.AddVertexAt(0, new Point2d(0, 55), 0, 0, 0);
  4.                     acPoly.AddVertexAt(1, new Point2d(-185, 55), 0, 0, 0);
  5.                     acPoly.AddVertexAt(2, new Point2d(-185, 0), 0, 0, 0);
  6.                     acBlkTblRec.AppendEntity(acPoly);
  7.                     acTrans.AddNewlyCreatedDBObject(acPoly, true);

  • Зачем  Polyline - хватит и отрезка?
  • Почему не сделать отделной функцией, а точки положить в массив и скормить этой функции?

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Расстановка атрибутов
« Ответ #9 : 15-05-2018, 18:53:53 »
боже, что за портянка
Полностью согласен-оочень длинно. Проблема в том, что я только начинаю осваивать программирование и много чего пока не умею. Ваше предложение считаю правильным, но не знаю как записать разные координаты для разных линий в массив. Для координат одной линии все понятно, но как объяснить программе какие точки из массива ей брать за начала и концы отрезков?

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Расстановка атрибутов
« Ответ #10 : 15-05-2018, 18:58:35 »
Какая ошибка? На какой строке?
Ошибка в AdjustAlignment(acBlkTbl.Database)-IDE ругается что acBlkTbl не применимо в данном контексте, но почему я не знаю-вроде бы она в области видимости и должна быть доступна.
Я думаю, что за это время уже можно было и проверить и поискать готовые примеры.
Я как раз и пытался осознать что пошло не так-пока не разобрался.

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расстановка атрибутов
« Ответ #11 : 15-05-2018, 19:14:58 »
Ошибка в AdjustAlignment(acBlkTbl.Database)-IDE ругается что acBlkTbl не применимо в данном контексте, но почему я не знаю-вроде бы она в области видимости и должна быть доступна.
AdjustAlignment - это метод, а не свойство. Его нельзя туда вставлять. Должно быть как-то так:
Код - C# [Выбрать]
  1.       AttributeDefinition developer = new AttributeDefinition
  2.       {
  3.         Position = new Point3d(-170, 0, 0),
  4.         AlignmentPoint = new Point3d(-170, 0, 0),
  5.         Prompt = "Developer",
  6.         Tag = "Developer",
  7.         TextString = "Гусаров",
  8.         WidthFactor = 0.7,
  9.         Height = 3.5,
  10.         Justify = AttachmentPoint.BottomLeft
  11.       };
  12.       developer.AdjustAlignment(acBlkTbl.Database);
  13.  
  14.  
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расстановка атрибутов
« Ответ #12 : 15-05-2018, 19:18:18 »
Полностью согласен-оочень длинно. Проблема в том, что я только начинаю осваивать программирование и много чего пока не умею. Ваше предложение считаю правильным, но не знаю как записать разные координаты для разных линий в массив. Для координат одной линии все понятно, но как объяснить программе какие точки из массива ей брать за начала и концы отрезков?
Еще раз. Не нужно это всё делать. Создай dwg-файл со штампом и вставляй его программно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Расстановка атрибутов
« Ответ #13 : 15-05-2018, 20:16:04 »
AdjustAlignment - это метод, а не свойство. Его нельзя туда вставлять. Должно быть как-то так:
Все равно не срабатывает.

Application does not support just-in-time (JIT)
debugging. See the end of this message for details.

************** Exception Text **************
Autodesk.AutoCAD.Runtime.Exception: eNotApplicable
   at Autodesk.AutoCAD.DatabaseServices.DBText.set_AlignmentPoint(Point3d param0)
   at ITAT_Autocad.FormatsHandler.DrawMainTitle() in C:\Users\PARAGON\source\repos\ITAT_Autocad\ITAT_Autocad\FormatsHandler.cs:line 248
   at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.Invoke()

Похоже придется рисовать блоки руками и затем вставлять.




 

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расстановка атрибутов
« Ответ #14 : 15-05-2018, 20:25:23 »
Все равно не срабатывает.

Application does not support just-in-time (JIT)
debugging. See the end of this message for details.

************** Exception Text **************
Autodesk.AutoCAD.Runtime.Exception: eNotApplicable
   at Autodesk.AutoCAD.DatabaseServices.DBText.set_AlignmentPoint(Point3d param0)
   at ITAT_Autocad.FormatsHandler.DrawMainTitle() in C:\Users\PARAGON\source\repos\ITAT_Autocad\ITAT_Autocad\FormatsHandler.cs:line 248
   at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.Invoke()
Еще раз посмотри пример, который я давал. Там объяснена эта ошибка:
Пример: http://adn-cis.org/forum/index.php?topic=8006.0
Если непонятно, то поясню. Сначала должно быть задано выравнивание Justify, а только потом задана точка выравнивания AlignmentPoint
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Расстановка атрибутов
« Ответ #15 : 15-05-2018, 21:30:40 »
Там объяснена эта ошибка
Прошу пояснить в чем была ошибка. В порядке следования записей? Я в тупике. Код переписал по образцу.
Код - C# [Выбрать]
  1. using (AttributeDefinition developer = new AttributeDefinition())
  2.                     {
  3.                         developer.SetDatabaseDefaults(acBlkTbl.Database);
  4.                         developer.Verifiable = true;
  5.                         developer.Prompt = "Developer";
  6.                         developer.Tag = "Developer";
  7.                         developer.TextString = "Гусаров";
  8.                         developer.WidthFactor = 0.7;
  9.                         developer.Height = 3.5;
  10.                         developer.Justify = AttachmentPoint.MiddleCenter;
  11.                         developer.Position = new Point3d(-170, 0, 0);
  12.                         developer.AlignmentPoint = new Point3d(-170, 0, 0);
  13.                         developer.AdjustAlignment(acBlkTbl.Database);
  14.                         developer.Layer = "0";
  15.  
  16.                         acBlkTblRec.AppendEntity(developer);
  17.                         acBlkTbl.UpgradeOpen();
  18.                         acBlkTbl.Add(acBlkTblRec);
  19.                         acTrans.AddNewlyCreatedDBObject(acBlkTblRec, true);
  20.                     }
У меня код по прежнему не срабатывает. Изменилась ошибка:

************** Exception Text **************
Autodesk.AutoCAD.Runtime.Exception: eDuplicateRecordName
   at Autodesk.AutoCAD.DatabaseServices.SymbolTable.Add(SymbolTableRecord value)
   at ITAT_Autocad.FormatsHandler.DrawMainTitle() in C:\Users\PARAGON\source\repos\ITAT_Autocad\ITAT_Autocad\FormatsHandler.cs:line 265
   at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi, Boolean bLispFunction)
   at Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.Invoke()



Отмечено как Решение Atomohod 16-05-2018, 20:48:39

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Расстановка атрибутов
« Ответ #16 : 15-05-2018, 21:35:09 »
Прошу пояснить в чем была ошибка. В порядке следования записей?
Да.
У меня код по прежнему не срабатывает. Изменилась ошибка:
Ошибка же изменилась! Ты бездумно копируешь код. Ошибка из-за этой строки:
Код - C# [Выбрать]
  1.  acBlkTbl.Add(acBlkTblRec);
Ты повторно пытаешься добавить BlockTableRecord с тем же именем, которое уже есть в базе. О чем и говорит код ошибки: eDuplicateRecordName
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение