Стояла передо мной задача - проставить марки для 2D-семейств, представляющих собой арматурный каркас. Основная загвоздка при этом - нужно создать несколько марок, которые будут расположены в одной точке. По картинке, думаю, понятнее:
Изучив немного справку я сделал такой вот код:
using (var tr = new Transaction(_doc, "Create tags"))
{
var pt = new XYZ((filteredCageList.Last().LongitudinalReinf.AllX.Max() + filteredCageList.Last().LongitudinalReinf.AllX.Min()) / 2, allY.Max() + offset, 0.0);
tr.Start();
IndependentTag tag = _doc.Create.NewTag(_doc.ActiveView, cage.FamilyInstance, true, TagMode.TM_ADDBY_CATEGORY, TagOrientation.Horizontal, pt);
if (tag != null)
{
var bb = _doc.GetElement(tag.GetTypeId()).get_BoundingBox(_doc.ActiveView);
tag.LeaderEndCondition = LeaderEndCondition.Free;
tag.LeaderElbow = pt; var off = new XYZ(0.5 * _doc.ActiveView.Scale * (bb.Max.X - bb.Min.X), 0, 0);
tag.TagHeadPosition = tag.LeaderElbow + off;
}
tr.Commit();
}
Не обращайте внимание на код получения точки pt - это не важно в данной теме.
Примечание: Для 2018 Ревита создание марки выполняется уже немного по-другому
Однако при запуске своего плагина я получал вот такой результат:
Сначала, что логично, я пытался найти ошибку в коде, но я не мог этого сделать, так как в коде нет ошибок!
Так в чём проблема? А проблема в неправильно созданном семействе!
Когда я открыл семейство этой марки, то увидел следующее:
А точнее - не увидел. Не увидел я стандартных опорных плоскостей, которые есть в стандартном шаблоне семейства и которые пересекаются в начале координат! А в данном семействе начало координат семейства не совпадает с условным началом координат, которое мы видим в точке пересечения вспомогательных линий.
В итоге - при работе с таким семейство пользователь никаких трудностей не испытает, так как работать марка будет нормально. А вот программист испытает трудности и при этом не сможет их решить!
Подобный случай у меня был при простановке размеров у колонн - мне дали проект с колонной на которую не ставились размеры моим плагином. Когда я открыл семейство, то увидел, что в нём удалены все стандартные опорные плоскости.