using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using System.Reflection;
namespace VDD
{
public class Class1
{
[CommandMethod("VDS")]
public void VDD()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
using (Transaction atr = doc.TransactionManager.StartTransaction())
{
// Запрос на выбор блоков, работать будем только с блоками "Общее_Отметка уровня"
PromptSelectionOptions opts1 = new PromptSelectionOptions();
opts1.MessageForAdding = "Choose blocks ";
PromptSelectionResult acSSPrompt = doc.Editor.GetSelection(opts1);
// Проверка статуса и того, что мы выбрали что-то
if (acSSPrompt.Status == PromptStatus.OK)
{
SelectionSet acSSet = acSSPrompt.Value;
// Проходим по каждому блоку из выбранных
foreach (SelectedObject acSSObj in acSSet)
{
// Проверяем, что есть выбранный элемент.
if (acSSObj != null)
{
// Открываем объект для записи
Entity acEnt = atr.GetObject(acSSObj.ObjectId, OpenMode.ForWrite) as Entity;
//Проверяем, что это BlockReference.
//Не забыть ввести проверку того, что это реально блок "Общее_Отметка уровня"
if (acEnt is BlockReference)
{
BlockReference br = acEnt as BlockReference;
BlockTableRecord btr = atr.GetObject(br.DynamicBlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
Point3d Position = br.Position.TransformBy(ed.CurrentUserCoordinateSystem);
if (btr.Name.Equals("Общее_Отметка уровня"))
{
AttributeCollection attCol = br.AttributeCollection;
foreach (ObjectId arId in attCol)
{
DBObject obj1 = atr.GetObject(arId, OpenMode.ForWrite);
AttributeReference attRef = obj1 as AttributeReference;
if (attRef.Tag.Equals("КОМЕНТАРИЙ"))
{
attRef.TextString = "";
}
if (attRef.Tag.Equals("ОТМЕТКА"))
{
double PositionOfY = Math.Round(br.Position.Y,3);
attRef.TextString = PositionOfY.ToString();
}
if (attRef.Tag.Equals("ОТМЕТКА1"))
{
double PositionOfY = Math.Round(br.Position.Y, 3);
attRef.TextString = PositionOfY.ToString();
}
}
}
else
{
continue;
}
}
}
}
}
//Подтверждаем изменения.
atr.Commit();
}
}
}
}