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

TCComponentTcFile.getFile() возвращает старую версию файла


alexeytur

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

Добрый день.

Дано: плагин для TeamCenter на Java, в нём у ревизии CAM-проекта получаю дочерний узел MENCProgram, а у него - узел CAM dataset, содержащий управляющую программу. Эту управляющую программу извлекаю в файловую систему.

Проблема: мой код почему-то извлекает старую версию УП - если перед этим сохранить prt  в NX, то будет извлечена УП из предыдущего сохранения, отстающего на несколько минут. Но если встать на CAM dataset и вручную извлечь через именованные ссылки, то сохранится актуальная версия. В отладке смотрю, всё правильно до метода TCComponentTcFile.getFile(), он почему-то сохраняет файл, отстающий на несколько минут. В чем может быть ошибка?

			if (comp.getTypeComponent().toString().contains("MENCProgram")) 
			{
				try 
				{
					String itemRevId = "error", itemId = "error";
					AIFComponentContext[] compUsed = comp.whereReferenced(); //где используется компонент MENCProgram
					for (AIFComponentContext compU : compUsed) 
					{
						InterfaceAIFComponent compI = compU.getComponent();
						TCComponent compTC = (TCComponent)compI; //преобразование в TCComponent compTC
						if (compTC.getTypeComponent().toString().contains("MEActivity")) 
						{
							AIFComponentContext[] compTCUsed = compTC.whereReferenced(); //где используется компонент TCComponent compTC
							for (AIFComponentContext compTCU : compTCUsed) 
							{
								InterfaceAIFComponent compTCI = compTCU.getComponent();
								TCComponent compTC2 = (TCComponent)compTCI; //преобразование в TCComponent compTC2
								TCComponentItemRevision itemRev = (TCComponentItemRevision)compTC2; //преобразование в TCComponentItemRevision itemRev
								if (compTC2.getTypeComponent().toString().contains("RH5_CAMProjectRevision")) 
								{
									itemRevId = itemRev.getProperty("item_revision_id"); //получение item_revision_id
									TCComponentItem item = itemRev.getItem(); //получение самого item
									itemId = item.getProperty("item_id"); //получение item_id
								}
							}
						}
					}
					String sFirstPartPath = "D:\\Siemens\\NCF_Projects\\";
					String sPath = sFirstPartPath + itemId + "\\" + itemRevId + "\\UP";
					path = Paths.get(sPath);
					if (!Files.exists(path)) 
					{
						File dir = new File(sPath);
					    dir.mkdirs();
					}
					/* else 
					{
						File dir = new File(sPath);
						ClearLocalFolder.recursiveDelete(dir);
						Thread.sleep(1000);
						dir.mkdirs();
					}*/
					DownloadUPo(comp, sPath);
				} 
				catch (TCException e/* | InterruptedException e*/) 
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

	protected void DownloadUPo(TCComponent activityComp, String folder) 
	{
		try 
		{
			TCComponent[] achPrComps = activityComp.getRelatedComponents();		 //все объекты в отношениях с TCComponent activityComp
			for (TCComponent achPrComp : achPrComps) 
			{
				if (achPrComp.getTypeComponent().toString().contains("UGCAMPTP")) 
				{ //если объект нужного типа
					TCComponentDataset cam_dataset = (TCComponentDataset)achPrComp;
					TCComponentTcFile tc_files[] = cam_dataset.getTcFiles(); //получаем файлы TCComponentDataset cam_dataset
					for (TCComponentTcFile tc_file : tc_files)
					{
						SaveTcFile(tc_file, folder);
					}
				}
			}
		} 
		catch (TCException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();//
		}
	}
	
	// Сохраняет объект tc_file в папку
	protected void SaveTcFile(TCComponentTcFile tc_file, String folder)
	{
		try
		{
			String file_path = folder + "\\"+ tc_file.toString();
			File file = new File(file_path);
			Path fp = Paths.get(file_path);
			if (Files.exists(fp)) 
			{
				boolean answer_rewrite = MessageDialog.openQuestion(window.getShell(),"Файл уже существует", "Перезаписать файл\n\n" + file_path + "\n\n?");
				if (answer_rewrite) 
				{ 
					file.delete();
					tc_file.getFile(folder);
					file.setLastModified(System.currentTimeMillis());
				}
			}
			else 
			{
				tc_file.getFile(folder);											
				file.setLastModified(System.currentTimeMillis());
			}	
		}
		catch (TCException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

img.jpg

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


@koner

Я сделал

TCComponentDataset cam_dataset = (TCComponentDataset)achPrComp;
cam_dataset.clearCache();

Вроде работает. Это правильное решение?

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • ДОБРЯК
      Ты до сих пор не понял, что тебе уже три-четыре раза сказали. Все кроме тебя поняли и успокоились.:=) Копирую для тебя еще раз, что нужно сделать. Или ты опять не понял. :=) Напиши как ты будешь решать эту задачу методом Ланцоша или методом итераций подпространства.  Матрицу масс найдешь выше по тексту. Только не пиши много лишних букв и слов. А в прочем пиши. Интересно наблюдать как ты подгораешь...;=) Сам себя заводишь, пяткой себя в грудь бьешь доказывая, что все знаешь и умеешь  и при этом еще глубже себя закапываешь и подгораешь.
    • Maxim.Oi TF
      Биение есть это точно. Фреза режет не равномерно, слышно по звуку
    • AlexKaz
      Нагуглил старый список отличий профкарт от GTX, кому интересно   А тут - полный список важных для производительности карты настроек на потыцкать https://www.goengineer.com/blog/optimizing-solidworks-for-faster-performance Если солид жёстко привязан к OpenGL - логично поискать любую доступную карту с наилучшим быстродействием в OpenGL.
    • AlexKaz
      @eljer0n, в настройках драйвера и графики игровой карты попробуйте вручную выставить на максимум все видеоэффекты и привязать карту к приложению принудительно (а то у Вас симптомы как софтверного рендера на CPU). Пример: https://www.mlc-cad.com/solidworks-help-center/how-to-force-solidworks-to-use-your-graphics-card/ По дефолту там что-то среднее, скорее всего. Не поможет - установить дрова к профкартам и там покрутить настройки, сменить версию Windows с 11 на 10. И только потом можно смотреть на профкарты. Также потестить опции в самом солиде. Вот тут ниже рекомендуют включить Enable petformance pipeline и не юзать SW 2018 https://www.engineering.com/story/20-to-30-times-faster-graphics-response-with-solidworks-2019s-new-graphics-engine
    • Killerchik
      Лихой Вы, однако....   Да, это уже сильно сложнее.
    • neon0404
      Да, действительно, огромное спасибо! Ошибка новичка) Не тот режим визуализации был
    • Максим604
      @Killerchik ну да, пишу реальную и стойка переправит, а если пишу руками, то считать для центра.  Просто резьбу писал или через переменные или через turn. И подачу считал как на обычную фрезеровку.   Ещё раз спасибо) 
    • gudstartup
      100% taxid - это не совершенно секретная инфа.  а вот корпоративный ящичек у этой же фирмы посложнее  
    • Killerchik
      Скорость я бы поставил метров 15-20. Подача - лучше измерить биение зубьев прям индикатором на станке. В идеале, если биение между соседними зубьями менее трети подачи на зуб, то эту самую подачу я бы поставил порядка 2-3 соток на зуб. Фрезеруйте так же, за 2 прохода, если это не прям супер критично для времени выполнения УП.
    • Alexejswt
      Все работает.  Job-1.inp
×
×
  • Создать...