Здравствуйте, уважаемые. Возникла необходимость программно задать выбранному размеру, проставленному на проекции, свои значения номинала и отклонений. После 3х дней попыток код макроса выложить на форум так и не удалось. Всё зависает напрочь. Поэтому привести его здесь не могу. На словах вопрос такой: когда я пытаюсь присвоить свойству Value класса Dimension или же свойствам TolerLowerDev, TolerUpperDev класса LinearDimension какое-либо значение - это не работает. Значения не попадают в параметры размера. Свойство ManualValue устанавливаю в true. zip-файл с текстом програмы прикладываю к посту. Смотрел примеры макросов, например пересчёт размеров в середину поля допуска. Судя по тем макросам всё элементарно. Но, тем не менее, простое присваивание не работает. Может кто-то знает, как обойти проблему и всё-таки задать размеру свои собственные значения номинала и допусков.
doc.BeginChanges("Изменение размеров");
foreach (Dimension dim in doc.Dimensions)
{
CircularDimension cdim = dim as CircularDimension;
if (cdim != null)
{
cdim.ValueType = DimensionValueType.Manual;
cdim.Value = 999;
cdim.TolerAutomatic = true;
cdim.TolerLowerDev = -3;
cdim.TolerUpperDev = 5;
}
LinearDimension ldim = dim as LinearDimension;
...
}
doc.EndChanges();
Тут есть небольшая хитрость: как вы видите, для задания отклонений объект типа Dimension приводится к типу CircularDimension. Это нужно делать, так как объект Dimension не содержит в себе таких полей, как верхнее и нижнее отклонение.
Здравствуйте, уважаемые. Работаю тут потихоньку с размерами. Заметил такую забавную странность с заданием допусков через свойства LinearDimension.TolerLowerDev и LinearDimension.TolerUpperDev. Задаю: TolerLowerDev = new Parameter(-0.2); - изменяется поле размера, соответствующее ВЕРХНЕМУ!!!! отклонению. TolerUpperDev = new Parameter(0.5); - изменяется поле размера, соответствующее НИЖНЕМУ!!!! отклонению. То же самое наблюдается при чтении: задал в размере нижнее отклонение - программно прочиталось как верхнее и наоборот. До этой простой истины дошёл за 3 часа поиска бага в своём макросе. Сначала не поверил... Потом истерически ржал Оказалось, дело не в моей проге . Надо будет проверить этот баг в 12й версии. Порой складывается ощущение, что API доделывалось в режиме "ночь перед экзаменом".