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

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 пользователей

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




  • Сообщения

×
×
  • Создать...