Перейти к публикации

Подскажите по NX Open API


Рекомендованные сообщения

Мне нужно чтобы библиотека (dll) строила рым- болт. Болтовую основу мне удалось спрограммировать, осталось только сделать так чтобы чертилось "кольцо." Поскольку верхнее и нижнее сечения "кольца" разные, я решил их стоить заметанием. Подскажите, пожалуйста, какой процедурой можно построить заметание "заметаемая поверхность" (swept)? Возможно ли ещё какими-нибудь операциями программно посторить нужное мне "кольцо"?

post-31586-1304950355_thumb.jpg

Изменено пользователем Винт
Ссылка на сообщение
Поделиться на других сайтах


У меня схожая задача - нужно сделать скобу. Когда делал в ручную и записывал всё в журнал, то нашел команду заметания - CreateRuleCurveFeatureChain . Хэлп дает такое описание

public CurveFeatureChainRule CreateRuleCurveFeatureChain(

Feature[] features,

Curve seedCurve,

Curve endCurve,

bool isFromSeedStart,

double gapTolerance

)

Пока дальше не продвинулся. У вас есть успехи??? Давайте сообща работать.

post-31242-1305267866_thumb.png

Изменено пользователем olimp
Ссылка на сообщение
Поделиться на других сайтах

По-моему гораздо проще сначала делать подобные модели "вручную", а потом просто менять ее параметры программно.

Но это для моделей, параметры которых должны получаться в результате расчетов, например.

ЗЫ: неужели нет такой стандартной детали?

Ссылка на сообщение
Поделиться на других сайтах

Vadim_ryb_ Вручную строил. Не знаю как называется процедура выполняющая заметание. Стандартная может и есть, не знаю где её посмотреть и как программно вызвать. Подскажете?

olimp Смотря какое тебе заметание нужно. Мне нужно использовать только "заметаемая поверхность". Вроде бы нашёл саму процедуру, буду на выходных пробовать.

theUFSession.Modl.CreateSweep(

ref StringList s_guide,

ref StringList s_section,

ref StringList s_spine,

ref MethodList orientation,

ref MethodList scaling,

ref int alignment,

ref int inter,

ref int body_type,

FeatureSigns boolean,

double[] tol,

out Tag body_obj_id

)

По входным и выходным параметрам мне она кажется более похожей на то что мне нужно. Если я не прав, то поправьте меня, кто знает.

olimp И да, если у тебя скоба в сечении круглая, то проще использовать вместо заметания "трубу". Процедура простейшая:

string[] d= {"8", "0"}; // Большой и малый диаметры

int obj = 1; //ХЗ

int nb = 1; //ХЗ, но работает

// objarray4- направляющая кривая

//features1- выходное тело

ModlSweepTrimObject tube1 = new ModlSweepTrimObject();

theUFSession.Modl.CreateTrimmedTube(objarray4,obj,ref tube1,d, FeatureSigns.Positive, out features1, out nb);

Ссылка на сообщение
Поделиться на других сайтах

Ug_user Обрати внимание на рарез: верхнее сечение- круг, нижнее- овал. Трубой так можно сделать? Если да, то я пока не нашёл такой процедуры.

И да: таково задание на курсовую. Болт должен быть точно таким как на чертеже- без упрощений.

Ссылка на сообщение
Поделиться на других сайтах

olimp И да, если у тебя скоба в сечении круглая, то проще использовать вместо заметания "трубу". Процедура простейшая:

string[] d= {"8", "0"}; // Большой и малый диаметры

int obj = 1; //ХЗ

int nb = 1; //ХЗ, но работает

// objarray4- направляющая кривая

//features1- выходное тело

ModlSweepTrimObject tube1 = new ModlSweepTrimObject();

theUFSession.Modl.CreateTrimmedTube(objarray4,obj,ref tube1,d, FeatureSigns.Positive, out features1, out nb);

Большущее спасибо, получилось!!!!Долго мучился еще с направляющей.

int obj = 1; // количество объектов.

Когда было равное 1. строилось только по одному участку направляющей, поставил 10 - всё построилось.

Кстати может подскажет кто-нибудь строю я дугу

в строке

theUFSession.Csys.AskWcs(out d1_e1_wcs_tag3);

определяю плоскость

double[] d1_e1_arc3_centerpt1 = d1_e1_c3;

double d1_e1_arc3_start_ang1 = beta - gama;

double d1_e1_arc3_end_ang1 = Math.PI - beta + gama;

double d1_e1_arc3_rad1 = r2;

UFCurve.Arc d1_e1_arc3 = new UFCurve.Arc();

d1_e1_arc3.start_angle = d1_e1_arc3_start_ang1;

d1_e1_arc3.end_angle = d1_e1_arc3_end_ang1;

d1_e1_arc3.arc_center = new double[3];

d1_e1_arc3.arc_center[0] = d1_e1_arc3_centerpt1[0];

d1_e1_arc3.arc_center[1] = d1_e1_arc3_centerpt1[1];

d1_e1_arc3.arc_center[2] = d1_e1_arc3_centerpt1[2];

d1_e1_arc3.radius = d1_e1_arc3_rad1;

theUFSession.Csys.AskWcs(out d1_e1_wcs_tag3);

theUFSession.Csys.AskMatrixOfObject(d1_e1_wcs_tag3,

out d1_e1_matrix_tag3);

d1_e1_arc3.matrix_tag = d1_e1_matrix_tag3;

theUFSession.Curve.CreateArc(ref d1_e1_arc3, out d1_e1_objarray1[6]);

Вопрос! Как мне нарисовать дугу в другой плоскости?

post-31242-1305455959_thumb.jpg

Изменено пользователем olimp
Ссылка на сообщение
Поделиться на других сайтах

Ug_user Обрати внимание на рарез: верхнее сечение- круг, нижнее- овал. Трубой так можно сделать? Если да, то я пока не нашёл такой процедуры.

И да: таково задание на курсовую. Болт должен быть точно таким как на чертеже- без упрощений.

Я про скобу - там труба в чистом виде.

Ссылка на сообщение
Поделиться на других сайтах
olimp да, это, к сожалению, и для меня достаточно большая проблема. есть процедура wcs.rotate, только не могу пока разобраться как с ней работать. она из NXOpen и через theUFsession не объявляется. Кто-нибудь помогите.
Ссылка на сообщение
Поделиться на других сайтах

Винт Я догнал как чертить дуги/окружности в другой плоскости

double[] matrix = { 1, 0, 0, 0, 1, 0 , 0, 1, 0}; //ориентация

// что конкретно каждая цифра означает можно определить методом тыка

Tag matrix_tag;

theUFSession.Csys.CreateMatrix(matrix, out matrix_tag);

d1_e1_arc3.matrix_tag = matrix_tag;

theUFSession.Curve.CreateArc(ref d1_e1_arc3, out d1_e1_objarray1[6]);

Изменено пользователем olimp
Ссылка на сообщение
Поделиться на других сайтах

olimp Поначалу операция выдавала ошибку, но после того как применил нормализацию, всё стало отлично, большое спасибо за помощь. Если кому понадобится- нормализация реализуется:

double[] matrix = { 1, 0, 0, 0, 1, 0, 0, 1, 0 };

Tag matrix_tag2;

theUFSession.Mtx3.OrthoNormalize(matrix);

theUFSession.Csys.CreateMatrix(matrix, out matrix_tag2);

arc2.matrix_tag = matrix_tag2;

theUFSession.Curve.CreateArc(ref arc2, out

objarray4[1]);

Изменено пользователем Винт
Ссылка на сообщение
Поделиться на других сайтах

в матрице скорее небольшая неточность, 1,0,0,0,0,-1,0,1,0. здесь можно посмотреть как получить эти матрицы <noindex>http://ru.wikipedia.org/wiki/Матрица_поворота</noindex>

Ссылка на сообщение
Поделиться на других сайтах

Мне удалось построить 2 необходимых эскиза и направляющую. Подскажите кто-нибудь как сделать заметание. Пробовал theUFsession.Modl.CreateSweep. но процедура не работает. Да и вообще ту ли я использую? Вопросов много, а ответов нет...

post-31586-1305818821_thumb.jpg

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

Заметание не понадобилось. Построил кольцо двумя вытягиваниями с булевой операцией пересечение. Потом построил скругления на рёбрах. Если кому надо - пишите в личку, выложу код.

Ссылка на сообщение
Поделиться на других сайтах

Люди добрые подскажите, как посчитать массу и запихнуть в атрибуты. как присваивать значения атрибутам я впрочем разобрался, а вот как посчитать массу?

Ссылка на сообщение
Поделиться на других сайтах

Так она, вроде, автоматом считается, если задана плотность или материал...

Это если открыть свойства детали. А я пишу програмку для заполнения основной надписи и мне надо сделать так чтоб не лазить по разным дополнительным окошкам.
Ссылка на сообщение
Поделиться на других сайтах

Это если открыть свойства детали. А я пишу програмку для заполнения основной надписи и мне надо сделать так чтоб не лазить по разным дополнительным окошкам.

Может это как то поможет <noindex>http://fsapr2000.ru/index.php?s=&showt...st&p=403397</noindex>
Ссылка на сообщение
Поделиться на других сайтах

Вот нашел у себя что то древнее, мож поможет:

//возвращает массу части (вес) как свойство части

double get_weight(tag_t part_tag)

{

// UF_WEIGHT_units_type_t unit=UF_WEIGHT_units_gm; // в граммах

UF_WEIGHT_properties_t properties; // структура свойств, связанных с массой

UF_WEIGHT_exceptions_t exceptions; // какие то исключения (если указатель - ошибка записи)

// UF_CALL(UF_WEIGHT_assert_part_props (part_tag,properties)); // не надо

UF_CALL(UF_WEIGHT_init_exceptions (&exceptions)); // инициализация исключений

//вычислить массу - без этого не возвращает UF_WEIGHT_ask_props

UF_CALL(UF_WEIGHT_estab_part_props (part_tag,0.99,0,UF_WEIGHT_units_gm,&properties,&exceptions));

//UF_WEIGHT_ask_props - можно не делать - уже есть и так масса

// UF_CALL(UF_WEIGHT_ask_props(part_tag,unit,&properties));

// printf("\nves=%f",properties.mass);

UF_CALL(UF_WEIGHT_free_exceptions(&exceptions)); // очистить исключения

return properties.mass;

}//get_weight

Ссылка на сообщение
Поделиться на других сайтах

Вот нашел у себя что то древнее, мож поможет:

//возвращает массу части (вес) как свойство части

double get_weight(tag_t part_tag)

{

// UF_WEIGHT_units_type_t unit=UF_WEIGHT_units_gm; // в граммах

UF_WEIGHT_properties_t properties; // структура свойств, связанных с массой

UF_WEIGHT_exceptions_t exceptions; // какие то исключения (если указатель - ошибка записи)

// UF_CALL(UF_WEIGHT_assert_part_props (part_tag,properties)); // не надо

UF_CALL(UF_WEIGHT_init_exceptions (&exceptions)); // инициализация исключений

//вычислить массу - без этого не возвращает UF_WEIGHT_ask_props

UF_CALL(UF_WEIGHT_estab_part_props (part_tag,0.99,0,UF_WEIGHT_units_gm,&properties,&exceptions));

//UF_WEIGHT_ask_props - можно не делать - уже есть и так масса

// UF_CALL(UF_WEIGHT_ask_props(part_tag,unit,&properties));

// printf("\nves=%f",properties.mass);

UF_CALL(UF_WEIGHT_free_exceptions(&exceptions)); // очистить исключения

return properties.mass;

}//get_weight

в функции EstabPartProps ( Tag part, double accuracy, bool recurse,UFWeight.UnitsType units, out UFWeight.Properties properties,out UFWeight.Exceptions exceptions) что такое recurse? Чему оно должно быть равно? Я так понимаю оно что-то проверяет, но что?
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • filsan
      Вот сюда коллаж выложил. Надеюсь смог донести свой вопрос. 
    • mannul
      Ну видимо это величина отвода и так называемый "подбор ступенек", когда после прохода резец движется эквидистантно контуру и подчищает уступ. Настраивается наверное в дополнительных параметрах. И резец перемещается не на 7мм, а на 3.5мм, не забывайте что на токарном X задается как диаметр.
    • gudstartup
      вы сначала определитесь нужны батарейки или нет. для этого посмотрите что у васв параметре 1815 в битах apz apc если apc=1 то у вас абсолютная система позиционирования. далее посмотрите маркировку красных датчиков моторов если там перед цифрой есть большая буква А aiA1000 b и т.д. тогда датчик абсолютный и вам точно нужна батарейка 6в она может подключаться как к каждому приводу та и быть общей для всех и подключаться на разъем cxa2a в этом случае ставят отдельный контейнер для батареек типоразмера D час счетчик держится за счет  внутренних ионисторов в датчиках. значит напряжение батареи не доходит до ваших датчиков и
    • Guhl
      Вы убедились в том, что датчик цанги "разжато/зажато" корректно работает? Или не смотрели в диагностику? Пробовали ли вы пошаговое выполнение цикла смены. Обычно такой режим предусмотрен, как правило, активируется М-кодом. В пошаговом режиме удобно проверять все датчики и кулачки. Инструкция на станок и схема имеются?  
    • gudstartup
      тогда в худшем случае неисправна главная плата где то там проблемы с корпусами bga или переходными межслойнымит отверстиями
    • gudstartup
      предположение что цикл смены инструмента прописан в pmc без разжима цанги не может иметь место. если положение руки отслеживается по кулачкам копира то возможно сигнал приходит слишком поздно а цикл руки непрерывный и из за этого происходит рывок. если же рука позиционируется приводом по датчику положения то до того как начать движение из под шпинделя должна прийти команда на разжим и сработать датчик что инструмент разжат иначе цикл смены закончится ошибкой
    • Rainbow7
      В этом смысле в таком случае ваше утверждение верно. После перетыкания этого разъёма ничего не меняется.
    • Artas28
      Добрый день! Может кто поделиться постами для 5 осей, стол-стол AC и BC? И у спрутов есть какая нибудь библиотека постов, которую можно скачать, имея оплаченную тех-поддержку?
    • gudstartup
      я имел ввиду что она рядом с чпу. а где вы нашли такой разъем на плате чпу? mdi клавиатура подключается к этому разъему и это явно не db9
    • Rainbow7
      Здравствуйте, вопрос по приводу, на станке случилась ситуация, после чего сбились все референтные позиции, чтобы запустить станок, было решено выставить их, но при проверке батарей привода, они не были обнаружены, установили новую батарею в привод, выставили точки, после чего, при включении станка более чем на час, все сбивается. Вопрос, каким способом настраивается привод без батареи, и почему сейчас с батареей, после включения сбрасывается и жалуется на напряжение батареи, хотя она новая.
×
×
  • Создать...