Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
AutoCAD .NET API / Re: Вставка блока мышкой
« Последний ответ от Александр Пекшев aka Modis 24-02-2018, 21:18:30 »
он рабочий на 100%
Он на 100% НЕ РАБОЧИЙ! И вам уже объяснили почему
2
AutoCAD .NET API / Re: Вставка блока мышкой
« Последний ответ от avk561 24-02-2018, 21:17:05 »
С 1 по 39 строку- Это создаётся блок, он рабочий на 100%. Теперь его надо вставить мышкой . ************** Текст исключения **************
Autodesk.AutoCAD.Runtime.Exception: eKeyNotFound
   в Autodesk.AutoCAD.DatabaseServices.SymbolTable.get_Item(String key)
   в RibbonElektro.Form1.BlockJigCmds.BlockJig()
3
AutoCAD .NET API / Re: Вставка блока мышкой
« Последний ответ от Александр Пекшев aka Modis 24-02-2018, 20:56:41 »
В строке 33 не хватает tr.Commit();
Могу предположить, что в 55 строке NullReferenceException eKeyNotFound, так как в методе TEST() не создается блока по причине отсутствия tr.Commit()
4
AutoCAD .NET API / Re: Вставка блока мышкой
« Последний ответ от Александр Ривилис 24-02-2018, 20:54:27 »
Код жуткий. Бездумно надергано из разных функций. В строке 33 не хватает tr.Commit();
5
AutoCAD .NET API / Re: Вставка блока мышкой
« Последний ответ от Александр Пекшев aka Modis 24-02-2018, 20:46:59 »
Показывает на эту строку
Повторяю вопрос - ошибка какая???
6
AutoCAD .NET API / Re: Вставка блока мышкой
« Последний ответ от avk561 24-02-2018, 20:44:59 »
Показывает на эту строку, а вообще код брал из примера для вставки блока из пространства чертежа в этот же чертёж.
7
AutoCAD .NET API / Re: Вставка блока мышкой
« Последний ответ от Александр Пекшев aka Modis 24-02-2018, 20:30:06 »
Так ошибка-то какая?
8
AutoCAD .NET API / Вставка блока мышкой
« Последний ответ от avk561 24-02-2018, 15:11:56 »
Есть блок   TEST(), его надо вставить мышкой, при этом он должен отображаться при перемещении мышки. Ошибка в строке  55.  Какой метод использовать?

 
Код - C# [Выбрать]
  1. public Db.ObjectId TEST()
  2.         {
  3.             Db.ObjectId newBtrId19 = new Db.ObjectId();
  4.  
  5.             using (Db.Transaction tr = db.TransactionManager.StartTransaction())
  6.             {
  7.                 Db.BlockTable bt = (Db.BlockTable)(tr.GetObject(db.BlockTableId, Db.OpenMode.ForWrite));// Открытие Таблицы Блоков (BlockTable) для записи                  
  8.                 if ((bt.Has("Однолинейная")))
  9.                 {
  10.                     newBtrId19 = bt["Однолинейная"];
  11.                 }
  12.                 else
  13.                 {
  14.                     // расставляем блоки с аппаратами в соответствии с DataGridView1
  15.                     //  using (Db.Transaction tr = db.TransactionManager.StartTransaction())
  16.                     {
  17. ------код-------
  18.  
  19.                         acadApp.SetSystemVariable("LWDISPLAY", 1);//включение отображения толщины линий
  20.                         Doc.SendStringToExecute("._zoom _all ", true, false, false);// Увеличить до границ или пределов чертежа                                                                              
  21.                         tr.Commit();
  22.                     }                    
  23.                     // создаем новое определение блока
  24.                     Db.BlockTableRecord Btr = new Db.BlockTableRecord
  25.                     {
  26.                         Name = "Однолинейная"
  27.                     };
  28.                     newBtrId19 = bt.Add(Btr); //Добавьте блок, и установить идентификатор в качестве возвращаемого значения нашей функции
  29.                     tr.AddNewlyCreatedDBObject(Btr, true);
  30.                     // добавляем в определение блока примитивы
  31.                       Btr.AppendEntity(LineL1); tr.AddNewlyCreatedDBObject(LineL1, true);
  32.                       Btr.AppendEntity(LineL2); tr.AddNewlyCreatedDBObject(LineL2, true);
  33. -------код-----
  34.                    
  35.                 }
  36.             }
  37.             return newBtrId19;
  38.         }
  39.  
  40.  
  41.        public class BlockJigCmds
  42.        {
  43.             //  Попросите пользователя разместить блок с именем «TEST», показывая его во время перетаскивания.
  44.             //  Убедитесь, что блок с этим именем существует в чертеже.
  45.             [Rt.CommandMethod("BlockJig")]
  46.            static  public void BlockJig()
  47.             {
  48.                 Ed.Editor ed = acadApp.DocumentManager.MdiActiveDocument.Editor;//Получить доступ к редактору  
  49.                 Db.Database db = ed.Document.Database;
  50.                 try
  51.                 {                  
  52.                     using (Db.Transaction tr = db.TransactionManager.StartTransaction())
  53.                     {                  
  54.                         Db.BlockTable bt = (Db.BlockTable)(tr.GetObject(db.BlockTableId, Db.OpenMode.ForRead));
  55.                         Db.BlockTableRecord btr = (Db.BlockTableRecord)tr.GetObject(bt["Однолинейная"], Db.OpenMode.ForRead);                        
  56.                         // Создайте Jig и попросите пользователя разместить блок
  57.                         MyBlockJig blockJig = new MyBlockJig();
  58.                         Gm.Point3d point;
  59.                         Ed.PromptResult res = blockJig.DragMe(btr.ObjectId, out point);
  60.                         if (res.Status == Ed.PromptStatus.OK)
  61.                         {
  62.                             // Теперь нужно сделать обычные шаги, чтобы вставить блок в точку, в котором пользователь сделал щелчок
  63.                             Db.BlockTableRecord curSpace = (Db.BlockTableRecord)tr.GetObject(db.CurrentSpaceId, Db.OpenMode.ForWrite);                        
  64.                         Db.BlockReference insert = new Db.BlockReference(point, btr.ObjectId);
  65.                         curSpace.AppendEntity(insert); tr.AddNewlyCreatedDBObject(insert, true);
  66.                         }
  67.                         tr.Commit();
  68.                     } // using          
  69.                 }
  70.  
  71.                 catch (System.Exception ex)
  72.                 {
  73.                     ed.WriteMessage(ex.ToString());
  74.                 }
  75.             } // BlockJig()
  76.         } // class BlockJigCmds
  77.           //  Этот Jig покажет данный блок во время перетаскивания.
  78.         public class MyBlockJig : Ed.DrawJig
  79.         {
  80.             public Gm.Point3d _point;
  81.             private Db.ObjectId _blockId = Db.ObjectId.Null;
  82.             // Показывает блок, пока пользователь не нажмет на него. Первый параметр - это идентификатор определения блока.
  83.             // Второй - это щелчок.      
  84.             public Ed.PromptResult DragMe(Db.ObjectId i_blockId, out Gm.Point3d o_pnt)
  85.             {
  86.                 _blockId = i_blockId;
  87.                 Ed.Editor ed = acadApp.DocumentManager.MdiActiveDocument.Editor;//Получить доступ к редактору                                                                                
  88.                 Ed.PromptResult jigRes = ed.Drag(this);
  89.                 o_pnt = _point;
  90.                 return jigRes;
  91.             }
  92.             // Необходимо переопределить этот метод. Обновление текущей позиции блока.
  93.             protected override Ed.SamplerStatus Sampler(Ed.JigPrompts prompts)
  94.             {
  95.                 Ed.JigPromptPointOptions jigOpts = new Ed.JigPromptPointOptions();
  96.                 jigOpts.UserInputControls = (Ed.UserInputControls.Accept3dCoordinates | Ed.UserInputControls.NullResponseAccepted);
  97.                 jigOpts.Message = "Выбор точки вставки:";
  98.                 Ed.PromptPointResult jigRes = prompts.AcquirePoint(jigOpts);
  99.                 Gm.Point3d pt = jigRes.Value;
  100.                 if (pt == _point)
  101.                     return Ed.SamplerStatus.NoChange;
  102.                 _point = pt;
  103.                 if (jigRes.Status == Ed.PromptStatus.OK)
  104.                     return Ed.SamplerStatus.OK;
  105.                 return Ed.SamplerStatus.Cancel;
  106.             }
  107.             //Необходимо переопределить этот метод. Мы показываем наш блок в его текущей позиции здесь.
  108.             protected override bool WorldDraw(Autodesk.AutoCAD.GraphicsInterface.WorldDraw draw)
  109.             {
  110.                 Db.BlockReference inMemoryBlockInsert = new Db.BlockReference(_point, _blockId);
  111.                 draw.Geometry.Draw(inMemoryBlockInsert);
  112.                 inMemoryBlockInsert.Dispose();
  113.                 return true;
  114.             } // WorldDraw()
  115.         } // class BlockJig
9
ObjectARX / Re: вирус/не вирус в arx
« Последний ответ от Александр Ривилис 24-02-2018, 02:13:19 »
А вдруг это не дежурное: "Мы очень благодарны Вам за Ваше сообщение"?
Очень вероятно, т.к. Яндекс должен быть заинтересован в том, чтобы хранящиеся на его сайтах файлы не считались вирусами/троянами.
10
ObjectARX / Re: вирус/не вирус в arx
« Последний ответ от Debalance 23-02-2018, 22:08:16 »
После которого обычно можно забывать о своем вопросе.
Это такая вежливая корпоративная этика...  ;)
Страницы: [1] 2 3 ... 10