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

Подскажите по 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 пользователей

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




  • Сообщения

    • Guhl
      Но ведь токовый сигнал надо  для начала в цифровой преобразовать Поэтому полный цикл преобразования не может быть быстрее аналоговой части У тиристорных приводов частота отклика не более 30Гц, но это не из-за ОУ, а из-за принципа работы приводов Да у обычного 741 частота 1Мгц Насколько это быстрее 32нс?     @gudstartup Аналоговая цепь всегда быстрее цифровой Так и живем Честно говоря я обескуражен Ведь тут же даже житейская логика говорит о том, что цифровая цепь привода не может быть быстрее аналоговой, просто потому что аналоговая является подсистемой цифровой цепи   Аналоговый вычислитель всегда выиграет по скорости у цифрового аналога Точность может быть ниже, но скорость всегда выше Сравните скорость работы сумматора на ОУ и на процессоре И оставьте свои ужимки, противно смотреть Или вы продолжатель дела "короля саркастических ужимок" (с)?
    • gudstartup
      с люфтами эта функция никак не борется она их пропускает гася резонанс ни насколько обработка контура тока длится 32нс попробуйте это сделать на ваших оу. @Guhl отдыхайте вы явно перегрелись у вас аналоговый процессор
    • Guhl
      Вы хотя бы в курсе насколько быстрее аналоговая цепь, чем цифровая?  
    • gudstartup
      вы хотя бы в курсе сколько длится в сигнальном поцессоре servo фанук обработка контура тока и сколько это было на ваших допотопных приводах и какие скорости и точность контура сейчас достижимы ,благодаря этому. добейтесь этого на ваших аналоговых схемах с оу и я сниму перед вами шляпу. полностью некорректное сравнение.
    • Ветерок
      Можно заменить гнутый швеллер на прямоугольную тонкостенную трубу. Если не стоит задача всё гнуть самостоятельно.
    • Guhl
      Большие люфты вызывают колебания. Причем эти люфты возникают не только при смене направления движения, а при других условиях. Путем борьбы с люфтами, борятся с колебаниями Для этого и есть dual position feedback  Ну вот видите, уже лучше. Борьба с люфтами - борьба с колебаниями Так для чего нужен dual position feedback? Назовите вы ее хоть чертом лысым, но она как боролась с люфтами, так и борется 
    • gudstartup
      а вам для чего писать то вы все равно читать не можете. для кого я   приводил описание функции и раздел к которым она отнесена уважаемыми вами японцами.   потому что он приводит к вибрациям!!!! я от вас просто офигиваю ну нельзя же так упорствовать в очевидном!!
    • Guhl
      А зачем же они упоминают люфт? 
    • gudstartup
      а где ваши аргументы? я вам приводил и формулы и выдержки из текста но вы адепт собственных измышлений и упорно называете функцию подавления резонанса функцией  компенсации люфта. контуры тока были у всех  без него вы не сможете мотором управлять а вот скорости другое дело. как всегда все путаете.
    • Guhl
      Это глава из книги по настройке приводов В ней еще хорошо расписаны принципы построения приводов. Контуры скорости, контуры тока.   Кстати не у всех приводов были контуры тока, умели обходиться без них. Это в мезоматиках кажется   Смею вас уверить, что принципы остались те же. Так что, вперед в прошлое! Авторы Чернов, Кузьмин, Синичкин Добротность.pdf
×
×
  • Создать...