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

NX Open создание таблицы в Drafting'е


AVetal

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

Есть ли в NX Open C++ функции для работы с таблицами в модуле Drafting?

Поиск в документации слов типа table, row, tabular ничего не дал.

Запись в журнал во время работы NX, вставка таблицы, изменение текста внутри нее, размеров и т.п., приводит только к описанию действий NX типа: Меню, Инструменты, Таблица, Вставить

journal.cxx

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

// Menu: Insert->Tabular Note...

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

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

// Menu: Tools->Table->Edit

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

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

// Menu: ═рчрф

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

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

// Menu: Tools->Table->Merge Cells

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

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

// Menu: Tools->Journal->Stop

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

Подозреваю, что Annotations можно сделать Таблицами.

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


Есть ли в NX Open C++ функции для работы с таблицами в модуле Drafting?

Нету

Есть в С

ищи UF_TABNOT_...

Таблица не имеет того же типа что annotation

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

UF_TABNOT нашел, а как саму таблицу инициализоровать?

Пример там нет где можно посмотреть. :wallbash: ,

Вот пример создания таблицы

double knuckled_profile_report::make_table(double offest)

{ int irc, n_rows, n_cols, num_sections, i, j, shift_row;  double pt[3];

  UF_TABNOT_section_prefs_t tabnote_section_prefs, tabnote_section_prefs_save;

  UF_TABNOT_cell_prefs_t	tabnote_cell_prefs,	tabnote_cell_prefs_save;

  tag_t work_view_tag, wcs_tag, m_tag, csys_tag;

  int mpi[100]; double mpr[70]; char rp[27+1], dp[27+1];

  UF_ATTR_value_t attr_val; char sval[UF_ATTR_MAX_STRING_LEN+1];

  double box[6], ymin, ymax;



  try

  {

  irc=UF_DRF_ask_preferences(mpi, mpr, rp, dp);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_CSYS_ask_wcs(&wcs_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_CSYS_create_matrix(matrix, &m_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_CSYS_create_temp_csys(map(0.0,-offest,pt), m_tag, &csys_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_TABNOT_ask_default_section_prefs(&tabnote_section_prefs);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  tabnote_section_prefs_save=tabnote_section_prefs;

	tabnote_section_prefs.attach_point = UF_TABNOT_attach_point_t(UF_TABNOT_attach_point_top_left);

	tabnote_section_prefs.max_height = 0L;



  irc=UF_TABNOT_ask_default_cell_prefs(&tabnote_cell_prefs);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  tabnote_cell_prefs_save=tabnote_cell_prefs;

	tabnote_cell_prefs.is_vertical = false;

	tabnote_cell_prefs.nm_fit_methods = 2;

	tabnote_cell_prefs.fit_methods[0] = UF_TABNOT_fit_method_t(UF_TABNOT_fit_method_auto_size_row);

	tabnote_cell_prefs.fit_methods[1] = UF_TABNOT_fit_method_t(UF_TABNOT_fit_method_auto_size_col);

	tabnote_cell_prefs.format = UF_TABNOT_format_t(UF_TABNOT_format_text);

	tabnote_cell_prefs.horiz_just = UF_TABNOT_just_t(UF_TABNOT_just_left);

	tabnote_cell_prefs.vert_just  = UF_TABNOT_just_t(UF_TABNOT_just_middle);

	if(flag_table_line_color)

	tabnote_cell_prefs.bottom_line_cfw[0]=tabnote_cell_prefs.right_line_cfw[0]=table_line_color;

	if(flag_table_line_font)

	tabnote_cell_prefs.bottom_line_cfw[1]=tabnote_cell_prefs.right_line_cfw[1]=table_line_font;

	if(flag_table_line_width)

	tabnote_cell_prefs.bottom_line_cfw[2]=tabnote_cell_prefs.right_line_cfw[2]=table_line_width;

	tabnote_cell_prefs.text_height = mpr[44];

	if(flag_table_text_height) tabnote_cell_prefs.text_height=table_text_height;

	if(flag_table_text_color)  tabnote_cell_prefs.text_color=table_text_color;

	if(flag_table_text_width)  tabnote_cell_prefs.text_density=table_text_width;



  irc=UF_TABNOT_set_default_section_prefs(&tabnote_section_prefs);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_TABNOT_set_default_cell_prefs(&tabnote_cell_prefs);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_CSYS_set_wcs(csys_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_TABNOT_create(&tabnote_section_prefs, pt, &tabnote_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_TABNOT_enable_automatic_update(false);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



	irc=UF_TABNOT_ask_nm_rows(tabnote_tag, &n_rows);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	for(i=0; i<n_rows; i++)

	{ tag_t row_tag;

	irc=UF_TABNOT_ask_nth_row(tabnote_tag, 0, &row_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_remove_row(row_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	irc=UF_TABNOT_ask_nm_columns(tabnote_tag, &n_cols);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	for(i=0; i<n_cols; i++)

	{ tag_t col_tag;

	irc=UF_TABNOT_ask_nth_column(tabnote_tag, 0, &col_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_remove_column(col_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	n_rows=1+((int)segments.size()<table_number_of_rows?(int)segments.size():table_number_of_rows);

	i=segments.size()/(n_rows-1);

	n_cols=5*( (double)segments.size()/(n_rows-1)-i > 0 ? i+1 : i );



	for(i=0; i<n_rows; i++)

	{ tag_t row_tag;

	irc=UF_TABNOT_create_row(10.0, &row_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_add_row(tabnote_tag, row_tag, 0);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	for(i=0; i<n_cols; i++)

	{ tag_t col_tag;

	irc=UF_TABNOT_create_column(10.0, &col_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_add_column(tabnote_tag, col_tag, 0);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	std::vector < std::vector <tag_t> > vvcells;

	vvcells.reserve(n_rows);



	for(i=0; i<n_rows; i++)

	{ std::vector <tag_t> vbuff; tag_t row_tag;

	irc=UF_TABNOT_ask_nth_row(tabnote_tag, i, &row_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

		for (j=0; j<n_cols; j++)

		{ tag_t col_tag, cell_tag;

		irc=UF_TABNOT_ask_nth_column(tabnote_tag, j, &col_tag);

		if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

		irc=UF_TABNOT_ask_cell_at_row_col(row_tag, col_tag, &cell_tag);

		if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

		vbuff.push_back(cell_tag);

		}

	vvcells.push_back(vbuff);

	}





	for(i=0; i<(int)vvcells.at(0).size(); i++)

	{

	  if(1 == i%5)

	  {

	  irc=UF_TABNOT_set_cell_text(vvcells[0][i], "Distance Base");

	  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	  }

	  if(3 == i%5)

	  {

	  irc=UF_TABNOT_set_cell_text(vvcells[0][i], "Distance Top");

	  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	  }

	  if(4 == i%5)

	  {

	  irc=UF_TABNOT_set_cell_text(vvcells[0][i], "Knuckle Angle");

	  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	  }

	irc=UF_TABNOT_set_cell_prefs(vvcells[0][i], &tabnote_cell_prefs);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	int txt_prec=-1; bool txt_tr_zer=true;

	if(flag_table_text_precision)		 txt_prec   = table_text_precision;

	if(flag_table_text_keep_trail_zeroes) txt_tr_zer = table_text_keep_trail_zeroes;

	for(i=1, j=1, shift_row=-5; i<(int)table_segments.size(); i++, j++)

	{

	if((i-1)%(n_rows-1) == 0) { shift_row+=5; j=1; }

	irc=UF_TABNOT_set_cell_text(vvcells[j][shift_row+0], table_segments[i].get_index().c_str());

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_set_cell_text(vvcells[j][shift_row+1], table_segments[i].get_dist_base(txt_prec, txt_tr_zer).c_str());

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_set_cell_text(vvcells[j][shift_row+2], table_segments[i].get_index().c_str());

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_set_cell_text(vvcells[j][shift_row+3], table_segments[i].get_dist_top(txt_prec, txt_tr_zer).c_str());

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	irc=UF_TABNOT_set_cell_text(vvcells[j][shift_row+4], table_segments[i].get_angle().c_str());

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



	if(flag_table_line_color)

	{

	irc=UF_OBJ_set_color(tabnote_tag, table_line_color);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}

	if(flag_table_line_font)

	{

	irc=UF_OBJ_set_font(tabnote_tag, table_line_font);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}

	if(flag_table_line_width)

	{

	irc=UF_OBJ_set_line_width(tabnote_tag, table_line_width);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}

	if(flag_table_text_layer)

	{

	irc=UF_OBJ_set_layer(tabnote_tag, table_text_layer);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



  irc=UF_TABNOT_enable_automatic_update(true);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_DRAW_update_tabnot(tabnote_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_CSYS_set_wcs(wcs_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_TABNOT_ask_nm_sections(tabnote_tag, &num_sections);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	attr_val.type=UF_ATTR_string; attr_val.value.string = sval;

	strcpy(sval, value_attribute_mk_type_tabnote);

	for(i=0; i<num_sections; i++)

	{ tag_t section_tag;

	irc=UF_TABNOT_ask_nth_section(tabnote_tag, i, &section_tag);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	tabnote_sections.push_back(section_tag);

	irc=UF_ATTR_assign(section_tag, name_attribute_mk_type, attr_val);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	}



  irc=UF_VIEW_ask_work_view(&work_view_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_VIEW_convert_to_model(work_view_tag, tabnote_tag);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_TABNOT_set_default_section_prefs(&tabnote_section_prefs_save);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  irc=UF_TABNOT_set_default_cell_prefs(&tabnote_cell_prefs_save);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);



  irc=UF_MODL_ask_bounding_box (tabnote_sections[0], box);

  if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

  ymin=box[1]; ymax=box[4];

	for(i=1; i<num_sections; i++)

	{

	irc=UF_MODL_ask_bounding_box (tabnote_sections[i], box);

	if(irc) throw ug_err(THIS_FILE, __LINE__, irc);

	if(box[1] < ymin) ymin=box[1];

	if(box[4] > ymax) ymax=box[4];

	}



  }

  catch(base_err &e) { e.trace(THIS_FILE, __LINE__); throw; }

  catch(...)		 { base_err e(THIS_FILE, __LINE__, "System error"); throw e; }

return ymax-ymin;

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

Таблице как объекту имя можно присвоить (помимо tag_t), чтоб найти его на листе (для проверки: есть ли такой объект или нет)?

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

Таблице как объекту имя можно присвоить (помимо tag_t), чтоб найти его на листе (для проверки: есть ли такой объект или нет)?

Да таблице можно присвоить имя или назначить ей строковый аттрибут

Это позволит ее найти для модификации

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

Имя получилось присвоить, проблема в перемещение таблицы в новую точку.

В UF TABNOT есть установка координат таблицы только при создании. Изменить координаты видимо можно, использовав UF DRF. Примение UF_DRF_set_origin(tabnot_tag, pt), где double pt[3] приводит к ошибке.

Только что....

проблему решил, применив вместо tabnot_tag section. Т.е. сначало ищем объект с необходимым именем и берем у него tag_t

UF_OBJ_cycle_by_name("MAIN_TABLE",&same_tab);

затем, если этот tag_t != NULL_TAG, определяем tag_t section

UF_TABNOT_ask_nth_section(same_tab, 0, &section);

и тут выставляем новые координаты:

pt[0]=x0;

pt[1]=y0;

pt[2]=0;

UF_DRF_set_origin (section, pt);

и табличка в необходимом месте, без её перестройки и без запоминания данных полей :)

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

А как редактировать найденную таблицу?

делаю вот так:

UF_OBJ_cycle_by_name("TABLE",&finded_table);

	if(finded_table!=NULL_TAG)

	{

		 uc1601("Табл был найден",1);

		 i =  UF_TABNOT_ask_nth_row(finded_table,1,&row);		

	}

	if(i == 0)

	{

		  uc1601("Получили row",1);		

	}

	else

	{

		uc1601("ошибка",1); 

	}
Получаю первым сообщение "табл был найден", а вторым "ошибка"

вчем проблема, :wallbash:

подскажите пожалуйста.

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

int UF_OBJ_ask_type_and_subtype

(

tag_t object_id, 

int * type, 

int * subtype 

)



int UF_TABNOT_ask_nm_rows

(

tag_t tabnote, 

int * nm_rows 

)



int UF_get_fail_message

(

int fail_code, 

char message [ 133 ] 

)

Попробуй перевести код ошибки в текст

Посмотри сколько строк в таблице и есть ли там 2 строки

Посмотри действительно ли эта таблица

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

nut888 Спасибо

Проблема была решена:

Изначально я задавал имя таблице вручную, т.е. тык п.км св-ва, ->общие имя. Думал что задаю имя таблице, а оказалось неизвестно чему.

задал имя через UF_OBJ_set_name и все стало работать.

:)

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

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

#include <stdio.h>

#include <stdlib.h>

#include <uf.h>

#include <uf_ui.h>

#include <uf_curve.h>

#include <uf_drf.h>

#include <uf_disp.h>

#include <uf_obj.h>

#include <string.h>

#include <uf_object_types.h>

#include <uf_tabnot.h>

#include <uf_disp.h>

#include <uf_view.h>

#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))

static int report_error(char *file,int line, char *call,int irc)

{

if(irc)

{

char err[133],msg[133];

sprintf(msg, "*** ERROR code %d at line %d in %s:\n+++ ",irc,line,file);

UF_get_fail_message(irc,err);

/*NOTE:UF_PRINT_SYSLOG IS NEW IN V18*/

UF_print_syslog(msg,FALSE);

UF_print_syslog(err,FALSE);

UF_print_syslog("\n",FALSE);

UF_print_syslog(call,FALSE);

UF_print_syslog(";\n",FALSE);

if(!UF_UI_open_listing_window())

{

UF_UI_write_listing_window(msg);

UF_UI_write_listing_window(err);

UF_UI_write_listing_window("\n");

UF_UI_write_listing_window(call);

UF_UI_write_listing_window(";\n");

}

}

return(irc);

}

static void do_ugopen_api(void)

{

tag_t view_tag,tabular_note,cell,col,row;

int response;

double screen_pos[3]={0};

double origin[3]={0};

char template_name[133]="123_metric.prt"

int a[2]={0,0};

UF_UI_specify_screen_position(

"Input center",

NULL,

NULL,

screen_pos,

&view_tag,

&response );

origin[0]=screen_pos[0];

origin[1]=screen_pos[1];

UF_CALL(UF_TABNOT_create_from_template(template_name,origin,&tabular_note));

UF_CALL(UF_TABNOT_ask_nth_row(tabular_note,a[0],&row));

UF_CALL(UF_TABNOT_ask_nth_column(tabular_note,a[1],&col));

UF_CALL(UF_TABNOT_ask_cell_at_row_col(row,col,&cell));

UF_CALL(UF_TABNOT_set_cell_text(cell,"UXU"));

UF_CALL(UF_TABNOT_update(tabular_note));

}

void ufusr(char *param, int *retcode, int param_len)

{

if (!UF_CALL(UF_initialize()))

{

do_ugopen_api();

UF_CALL(UF_terminate());

}

}

int ufusr_ask_unload(void)

{

return (UF_UNLOAD_IMMEDIATELY);

}

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • malvi.dp
      Так в чем проблема создать кривую и протянуть профиль? Единственная трудность это кривую сделать из дуг и отрезков, а не сплайном. Если же не использовать инструментарий сварных конструкций, то можно и сплайн использовать в качестве направляющей.  
    • Alexey0336
      Добрый день. Как то фигурировал тут вопрос с точкой в названии файла. У меня проблема, не могу захватить модель, пишет, что с этим символом нельзя. Обойти никак нельзя получается?
    • malvi.dp
      У вас там скорее всего скрыты размеры. Перетяните их дальше от штриховки, чтоб не пересекали.
    • Snake 60
      @Бестолковый С названием топика не ошиблись? Человек спрашивает: ' VBA ' 1. Open a document in SOLIDWORKS. ' 2. Run the macro below to set inch units with '     a fractional base of 16 and no rounding. Dim swApp As SldWorks.SldWorks Dim Part As SldWorks.ModelDoc2 Option Explicit Sub main()    Set swApp = Application.SldWorks    Set Part = swApp.ActiveDoc    Part.SetUnits swINCHES, swFRACTION, 16, 0, False End Sub   Код взят отсюда: https://help.solidworks.com/2019/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~setunits.html Вот еще описание всех методов: https://help.solidworks.com/2021/English/api/swconst/DP_Units.htm Ну и на вкусное, статья от Артема (см. через ВПН) https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://www.codestack.net/solidworks-api/options/document/set-units/&ved=2ahUKEwjgpL-apN6GAxU7HxAIHYO0D2IQFnoECBAQAQ&usg=AOvVaw15xq49gocoVQ5BzEA31qGf
    • Shvg
      IModelDocExtension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitSystem, swUserPreferenceOption_e.swDetailingNoOptionSpecified, swUnitSystem_e.<Value>), где swUnitSystem_e.<Value> перечисление swUnitSystem_CGS           1 = Centimeter, gram, second  swUnitSystem_Custom        4 = Lets you set length units, density units, and force  swUnitSystem_IPS           3 = Inch, pound, second  swUnitSystem_MKS           2 = Meter, kilogram, second  swUnitSystem_MMGS          5 = Millimeter, gram, second   
    • Ветерок
      Вопрос про "включение RGK". Если в модели какие-то функции сделаны с использованием RGK, эта модель будет работоспособной на другом компе, где RGK "не включен"? И вообще не понятно, получается система использует два разных ядра одновременно? Или включая RGK, автоматически выключается Прасолид? А обратно переключиться можно? Если можно итак, и так, и туда, и обратно, тогда не понятно зачем вообще это включение-выключение.
    • TVM
      Так на скорую руку строились. Ясно что такое воспроизвести в живую затруднительно. 
    • Борман
    • Shura762
      Уважаемый @mamomot  вы ошибаетесь на счет  они (топсистемы) уважают пользователей T-FLEX PLM, и им была приведена презентация нового продукта, рассказаны пути развития этого продукта и как часть всего этого интересного 18 версия када. Лично внешний вид мне понравился, осталось узнать про "плюшки" облегчающие работу конструктора.
    • mamomot
      Нужно уважать пользователей. Понимаю, что сейчас идет "охота" на госкорпорации. Но из уважения к другим пользователям, купившим ранее версии Тифлекс, можно было бы дать хоть какой-то обзор нового: Металлоконструкции, Детали Машин, другие модули...  
×
×
  • Создать...