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

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

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




  • Сообщения

    • gudstartup
      в некоторых случаях проще сделать геометрическую компенсацию чем выравнивать например поворотный стол прикрепленный к станине весом в полтонны в плоскости zy или xz .  замена на компенсацию бывает еще и по временным и финансовым обстоятельствам и это никак нельзя не учитывать.
    • lem_on
      Я бы с удовольствием посмотрел как без параметрирования башка на интегрексе выставляется. Но думаю ответ был бы, станок неправильно спроектирован и из все надо на металлолом и  переплавить в сковородки. Да и вообще где только параметрами геометрию не выходишь.    "Извиняюсь заранее что подлизнул"  Тема ведь про смешное и клоун даже есть )))
    • USSR_Nic
      Дык посмотреть то я посмотрел. Я не понимаю как тулбокс перестроить. Как разделить наименование в тулбоксе  на Наименование ВП и Обозначение ДНП... В этом и состоит проблема.... Хоть в макросе их дербань....
    • gudstartup
      @Killerchik думаю хватит цитат про то что только механически может быть выравнена геометрия станка. советую выровнять направляющуб где на 5см 1мм отклонения от прямолинейности или она как сам@Guhl пишет винтом. 
    • Jesse
      да, так и делайте. Мне тоже кажется это самый оптимальный вариант)
    • Amiandar
      Народ, а подскажите, почему не получается редактировать (1 раз только получилось спустя 100500 попыток, поэтому я не уловил причину) вот эти значения в момент нанесения линии в эскизе?   
    • Alex1986
      Коллеги, подскажите, пожалуйста, как в имеющемся Компас 3D v20 в как-то сопряженных деталях сделать в одной детали отверстие, а во второй детали отверстие завязать на центр отверстия первой детали, чтоб при перемещении первого и перестроении, автоматически перестраивалось отверстие во второй?
    • Cas
      Это поможет в изготовлении? Вы в этом уверены? Я думаю, что Вы сильно ошибаетесь. Я бы с Вами согласился - если бы Вы мне написали - что вот - фирма по производству отличных мелкомодульных шестеренок. Но Ваши чертежи они понять не могут. Ладно, даже могут, но им дико неприятно (прям фу), потому что там действительно есть некорректная простановка базы, неправильные геометрические допуски и т.д. НО... ситуация то не такая. Чертеж поправить - не сложно, но от этого производитель не найдется, к сожалению.  
    • Shoker
      Конструктора поменяйте на нормального, может будет делаться то, что надо
    • Liga
      Разобрался, реакции можно вытянуть и из МКЭ расчета, но только после правильного закрепления. Сверху - снизу Спс за наводку    
×
×
  • Создать...