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

Nxopen


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

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

До создания Extrude в общем то и не доходит, не получается создать Section.

Проблема видимо в создании CurveFeatureRule (так я и не понял в точности что же это такое), оно то и не создается. Привожу один их вариантов

NXOpen::Point3d point3d1(x,y,z);

NXOpen::Point3d point3d2(40,40,z);

Point *point1;

point1 = workPart->Points()->CreatePoint(point3d1);

NXOpen::Line *line1;

line1 = workPart->Curves()->CreateLine(point3d1, point3d2);

NXOpen::Features::ExtrudeBuilder *Extrude1;

Extrude1=workPart->Features()->CreateExtrudeBuilder(NULL);

Point *point0 = workPart->Points()->CreatePoint(NXOpen::Point3d(0,0,0));

Direction *Direction1=workPart->Directions()->CreateDirection(point0,NXOpen::Vector3d(0,0,1));

Extrude1->SetDirection(Direction1);

NXOpen::Section *Section1=workPart->Sections()->CreateSection(0.00095, 0.001, 0.5);

std::vector<NXOpen::SelectionIntentRule *> rules;

std::vector<NXOpen::Features::Feature *> Feature1;

CurveFeatureRule curveFeatureRule1(line1); //?????????????????

curveFeatureRule1.GetData(Feature1); //проверка Feature1 нулевой, зачит не получилось

rules.insert(rules.end(),&curveFeatureRule1); //?????????????????

Section1>AddToSection(rules,line1,NULL,NULL,NXOpen::Point3d(x,y,z),NXOpen::Section::ModeCreate); //?????????????????

Extrude1->SetSection(Section1);

Extrude1->CommitFeature();

Extrude1->SetVisibility(NXOpen::SmartObject::VisibilityOptionVisible);

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


Ух, UGSPLMовцы, панимаешь, наворотили в NX4 классов :).

Попробуй так ( для NX4 ) ( правда, обработку ошибок / проверки в коде я не делал вообще никакие - лень :) ) :

#include <vector>



#include <uf.h>



#include <NXOpen/session.hxx>

#include <NXOpen/nxexception.hxx>

#include <NXOpen/listingwindow.hxx>



#include <NXOpen/ugmath.hxx>

#include <NXOpen/section.hxx>

#include <NXOpen/line.hxx>



#include <NXOpen/features_extrudefeaturebuilder.hxx>

#include <NXOpen/features_featurecollection.hxx>



#include <NXOpen/directioncollection.hxx>

#include <NXOpen/sectioncollection.hxx>

#include <NXOpen/partcollection.hxx>

#include <NXOpen/curvecollection.hxx>

#include <NXOpen/linecollection.hxx>



#include <NXOpen/scrulefactory.hxx>

#include <NXOpen/curvedumbrule.hxx>







//--------------------------------------------------------------------

extern DllExport void ufusr( char *parm, int *returnCode, int rlen ) {



	//// initialize license environment

	NXOpen::Session * sess = NXOpen::Session::GetSession();

	try {



		//// obtain work part

		NXOpen::Part * wp = sess->GetParts()->GetWork();



		//// create lines and push them into vector

		std::vector <NXOpen::Curve*> section_curves;

		{

			NXOpen::Line * l1 = wp->Curves()->CreateLine ( NXOpen::Point3d ( 0,   0, 0 ), NXOpen::Point3d (100,   0, 0) );

			NXOpen::Line * l2 = wp->Curves()->CreateLine ( NXOpen::Point3d ( 100, 0, 0 ), NXOpen::Point3d (100, 100, 0) );



			section_curves.push_back( l1 );

			section_curves.push_back( l2 );

		}



		//// create extrude feature builder

		NXOpen::Features::ExtrudeFeatureBuilder * efb = wp->Features()->CreateExtrudeFeatureBuilder ( NULL );

		{ //// fill extrude feature builder data



			//// extrude direction 

			NXOpen::Direction * dir = 

				wp->

					Directions()->

						CreateDirection ( 

							NXOpen::Point3d  (0, 0, 0), 

							NXOpen::Vector3d (0, 0, 1), 

							NXOpen::SmartObject::UpdateOptionAfterModeling 

							);

			efb->SetDirection  ( dir   );



			//// start / end limits

			efb->SetStartLimit ( "0"   );

			efb->SetEndLimit   ( "100" );



			//// rules of the section

			//// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ->

			std::vector <NXOpen::SelectionIntentRule*> rules;

			{

				NXOpen::ScRuleFactory rule_factory ( wp );

				NXOpen::CurveDumbRule * rule = rule_factory.CreateRuleCurveDumb ( section_curves );

				rules.push_back( rule );

			}

			//// <- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



			//// section

			NXOpen::Section * section = NULL;

			{

				section = wp->GetSections()->CreateSection();

				section->AddToSection ( rules, NULL, NULL, NULL, NXOpen::Point3d(0, 0, 0), NXOpen::Section::ModeEdit );

			}

			efb->SetSection ( section );

		}





		//// finally :)

		efb->CommitFeature();



	}

	catch ( const NXOpen::NXException & erc ) {

		sess->GetListingWindow()->Open();

		sess->GetListingWindow()->WriteLine ( erc.what() );

	}

	catch (...) {

		sess->GetListingWindow()->Open();

		sess->GetListingWindow()->WriteLine ( "Unhandled exception" );

	}

}

Regardzzz ...

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

К сожалению не получилось, на строке

NXOpen::CurveDumbRule * rule = rule_factory.CreateRuleCurveDumb ( section_curves );

Происходит ошибка.

В окне NX пишется:

First parameter is invalid

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

Хм.. забавно ...

Начнём от печки :

1. Какая версия NX установлена?

2. Какой компилятор?

3. Какая STL установлена?

Regardzzz ...

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

Спасибо за пример!

Кажется разобрался, не работает debug версия.

Очень жаль, попытаюсь исправить.

Может что-то посоветуете?

Стоить NX4,пример в сделан в MVS++ 2005.

Работаю в MVS++ 2002, но не уверен что все будет работать(данный пример работает в debug и в release), так как библиотеки в NX cделаны в MVS++ 2003

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

Ааа... понятно в чём дело :)

п.1 RTFM по совместимым с UG-ами компиляторам. И исрользуй только тот, который рекомендован. Например для NX4 ( см аттач ). Если хочешь весёлых и непонятных глюков - можешь использовать любой :)

п.2 Всегда используй Release версию ( #define NDEBUG ) иначе можно получить AV в деструкторах

контейнеров. Память для них аллоцируется UG-ами ( которые сами по себе в Release версии собраны ) - а уничтожается контейнер - у тебя в dll-ке. И если у тебя Debug версия то уничтожение скорее всего и вызовет Access Violation.

Regardzzz ...

post-646-1153917564_thumb.png

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

To niki

По п1. Где же его взять то. А рекомендации эти я читал.

По п2. Без отладки бывает тяжело. Но с MS VC++ 7.0 вроде работает. Но вызыватся по видимому будут библиотеки и MFC70 и MFC71

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • Amiandar
      Народ, а подскажите, почему не получается редактировать (1 раз только получилось спустя 100500 попыток, поэтому я не уловил причину) вот эти значения в момент нанесения линии в эскизе?   
    • Alex1986
      Коллеги, подскажите, пожалуйста, как в имеющемся Компас 3D v20 в как-то сопряженных деталях сделать в одной детали отверстие, а во второй детали отверстие завязать на центр отверстия первой детали, чтоб при перемещении первого и перестроении, автоматически перестраивалось отверстие во второй?
    • Cas
      Это поможет в изготовлении? Вы в этом уверены? Я думаю, что Вы сильно ошибаетесь. Я бы с Вами согласился - если бы Вы мне написали - что вот - фирма по производству отличных мелкомодульных шестеренок. Но Ваши чертежи они понять не могут. Ладно, даже могут, но им дико неприятно (прям фу), потому что там действительно есть некорректная простановка базы, неправильные геометрические допуски и т.д. НО... ситуация то не такая. Чертеж поправить - не сложно, но от этого производитель не найдется, к сожалению.  
    • Shoker
      Конструктора поменяйте на нормального, может будет делаться то, что надо
    • Liga
      Разобрался, реакции можно вытянуть и из МКЭ расчета, но только после правильного закрепления. Сверху - снизу Спс за наводку    
    • Cas
      Вот это дельное предложение. Спасибо. Боюсь, что так и придется делать. Т.к. найти изготовителей мелкомодульных шестерней - прям проблема оказалась. Насчет терпеливого оператора - то точно нет. Не на мелкосерийке. Насчет таблицы - не понял. Ее на чертеже специально нет - она отдельная, что указано в требованиях. Насчет прогресса - то откуда ему взяться то?
    • roiman
      Переделайте конструкцию валов-шестерен, раз проблема с изготовлением. Сделайте шестерни съёмными, на шпонках, хоть с прессовой посадкой. После этого шестерни можно будет изготовить в любой конторе с проволочником. Или тем же проволочником при помощи такой-то матери и терпеливого оператора - с перестановом, с технологическим шестигранником на конце вала для закрепления в тисах, к примеру. Шестигранник после прожига обрезается. Ну или хоть прошивной электроэрозией, если содержимое кошелька позволяет. Но нужна приспособа с поворотом, которая не у каждого есть.   Конструктора найдите другого. Это весёлые картинки, а не чертежи. Хоть бы таблицу с параметрами зацепления привели. Может и дело  было не в разбитом станке, а в способностях конструктора... И кто-то мне говорит, что всё нормально и прогресс. Ни чертежи уже не можем сделать, ни изготовить наипростейшее прямозубое цилиндрическое зацепление...
    • Chuvak
      Я не занимаюсь изготовлением) Но конструктор должен сразу делать нормальные чертежи изделий и знать как их будут изготавливать
    • mmaag
      Допуски на размеры толщины зуба s, w, M имеют допуски в два минуса, т.е. задают гарантированный боковой зазор. Это противоречит требованию об отсуствии люфта. Требование об отсутствии люфта в свою очередь противоречит работоспособности. Оформление сырое. Правильно оформленный чертёж поможет более адекватно оценить трудозатраты и риски и, следовательно, может помочь найти изготовителя. Совет: если у вас есть функциональные требования, то оформляйте их. Это может упростить требования к точности.
    • Cas
      Ну лично я не оформлял.  Соглашусь, что перпендикулярность некорректно поставлена.  Может еще что-то.  Но мне детали нужны для нашего изделия, а не чертежи идеально правильные.  Я себе слабо представляю технолога, который не поймет по этому чертежу, что от него хотят. Я согласен с Вами полностью, что надо оформлять все правильно по ЕСКД. Если Вы мне поможете в изготовлении детали, то заставлю я своего конструктора поставить правильно Базу и перпендикулярность на биение заменить.
×
×
  • Создать...