Я понимаю, что канпас-православный продукт созданый во славу... Но хоть одно логическое объяснение есть, почему код написаный для 19го не работает в 18.Я не понимаю, как зарубежные загнивающие солидописцы и альтиум писцы умудрились организовать полную поддержку своих продуктов, без оглядки на версию. Наверно это тайные темные знания полученные бгмерзким способом. Но код, едрить его, код. Как код приложений может меняться на абсолютно, с виду и не только, может меняться? Примеры. В 19 работает, в 18-нет.
begin
showMessage('')
EntityCollection := ksEntityCollection(iPart.EntityCollection(o3d_face));
EntityConcentric := ksEntity(phantom.GetDefaultEntity(o3d_axisOZ));
EntityConcidence := ksEntity(phantom.GetDefaultEntity(o3d_planeXOY));
strPromt := 'Укажите отверстие';
strPromt1 := 'Укажите плоскость совпадения';
EntityConcentric2 := ksEntity(iDoc3D.UserSelectEntity(nil,
'SELECTFILTERPROC', strPromt, hinstance, nil));
EntityConcidence2 := ksEntity(iDoc3D.UserSelectEntity(nil,
'SELECTFILTERPROC', strPromt1, hinstance, nil));
if iDoc3D.UserGetPlacementAndEntity(2) then
begin
iPart.SetPlacement(iRequestInfo3D.GetPlacement);
iDoc3D.SetPartFromFile(path + filename, iPart, true);
iDoc3D.AddMateConstraint(mc_Concentric, EntityConcentric,
EntityConcentric2, integer(StUnit.direction), 0, 0);
iDoc3D.AddMateConstraint(0, EntityConcidence, EntityConcidence2,
integer(StUnit.direction), 0, 0);
iPart.UpdatePlacement;
end;
iPart.SetUserParam(iUserParam);
iPart.marking := design;
ColorParam := ksColorParam(iPart.ColorParam);
ColorParam.Color := StUnit.ColorVar; // 15387420-голубой;//16744448-синий;
iPart.SetAdvancedColor(ColorParam.Color, ColorParam.ambient,
ColorParam.diffuse, ColorParam.specularity, ColorParam.shininess,
ColorParam.transparency, ColorParam.emission);
iPart.Update;
part := kspart(doc3d.GetPart(1));
entitycollection := ksEntityCollection(Part.EntityCollection(o3d_face));
EntityFace2 := ksEntity(part.GetDefaultEntity(o3d_planeYOZ));
// if EntityFace2 = nil then ShowMessage('nil2');
doc3d.AddMateConstraint(0,EntityFace1,EntityFace2,1,2,0);
EntityFace2 := ksEntity(entityCollection.GetByName('Concidience',true,true));
if EntityFace2 = nil then ShowMessage('nil2');
part := kspart(doc3d.GetPart(2));
entitycollection := ksEntityCollection(Part.EntityCollection(o3d_face));
EntityFace2 := ksEntity(entityCollection.GetByIndex(2));
doc3d.AddMateConstraint(5,EntityFace1,EntityFace2,-1,1,StrToInt(L_Shell.Text));
doc3d.RebuildDocument();
doc3d.SaveAs(ExtractFilePath(ParamStr(0)) + 'Result\part.a3d');
Внезапно. Если в этой строке EntityFace2 := ksEntity(entityCollection.GetByIndex(2)); 2 заменить на 1. Не работает в 19, но работает в 17. Значит они индексы от 0 считают, но иногда.
PS: Я очень хочу, чтобы мне стало стыдно за этот пост. Пока пошел проверять все ранее написанное. Предлагаю в этой теме выкладывать ловушки от аскон, чтобы по граблям не ходить.
Добрый день!
Очень информативный заголовок в теме.)
Не ругайтесь Вы так. Эмоции в сторону. У SW тоже не все гладко бывает. Ветка с макросами от Lenon завалена ошибками "Run-time error 62 "Input past end of file". Причем для разных версий SW разные ошибки.
https://cccp3d.ru/topic/6622-%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F-%D0%B4%D0%BB%D1%8F-sw-%D0%BF%D0%BE-%D0%B3%D0%BE%D1%81%D1%82/page/197/#comments (https://cccp3d.ru/topic/6622-%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F-%D0%B4%D0%BB%D1%8F-sw-%D0%BF%D0%BE-%D0%B3%D0%BE%D1%81%D1%82/page/197/#comments)
API Компаса меняется, т. к. меняется функционал, не все возможно оттестировать. Пишите в техподдержку, они поправят, если это реальная ошибка. Я писал запросы по API, Аскон исправлял APi. Например, писал запрос SD#7259559, что при экспорте в TIFF через APi "Отсутствует возможность управления свойством - "Весь документ в один файл". Оказалось, просто в справке по APi недостаточно описана работа с этим свойством. В новых версиях библиотека из-за этого работала не правильно. Пообщались с техподдержкой, разобрались. Обещали справку поправить.
Цитата: Дмитрий22 от 03.06.21, 16:05:34Не ругайтесь Вы так. Эмоции в сторону.
Просто полгода работы. Все было здорово. Начали тестить и крашится. 2 дня убил на изучение проблемы и как водой окатило. Счас починил временные сопряжения, воевал с цветом, выяснилось, что модели стали кривыми. А именно размеры с внешними переменными. Спасибо за совет, пойду ТП терзать.
Цитата: graphdark от 03.06.21, 16:38:35Просто полгода работы. Все было здорово. Начали тестить и крашится. 2 дня убил на изучение проблемы и как водой окатило. Счас починил временные сопряжения, воевал с цветом, выяснилось, что модели стали кривыми. А именно размеры с внешними переменными. Спасибо за совет, пойду ТП терзать.
Правильно, что вылетает.
Где проверки?
Цитата: graphdark от 03.06.21, 15:37:22if iDoc3D.UserGetPlacementAndEntity(2) then
begin
iPart.SetPlacement(iRequestInfo3D.GetPlacement);
iDoc3D.SetPartFromFile(path + filename, iPart, true);
iDoc3D.AddMateConstraint(mc_Concentric, EntityConcentric,
EntityConcentric2, integer(StUnit.direction), 0, 0);
iDoc3D.AddMateConstraint(0, EntityConcidence, EntityConcidence2,
integer(StUnit.direction), 0, 0);
iPart.UpdatePlacement;
end;
iPart.SetUserParam(iUserParam);
iPart.marking := design;
Эти ошибки поправил, расскажу как.
if iDoc3D.UserGetPlacementAndEntity(2) then
begin
iPart.SetPlacement(iRequestInfo3D.GetPlacement);
iDoc3D.SetPartFromFile(path + filename, iPart, true);
iDoc3D.AddMateConstraint(mc_Concentric, EntityConcentric,
EntityConcentric2, integer(StUnit.direction), 1, 0);
iDoc3D.AddMateConstraint(0, EntityConcidence, EntityConcidence2,
integer(StUnit.direction), 1, 0);
iPart.UpdatePlacement;
end;
Пытался вспомнить. Выходит, что я просто зафиксировал 1 деталь.
Цитата: graphdark от 03.06.21, 15:37:22ColorParam := ksColorParam(iPart.ColorParam);
ColorParam.Color := StUnit.ColorVar; // 15387420-голубой;//16744448-синий;
iPart.SetAdvancedColor(ColorParam.Color, ColorParam.ambient,
ColorParam.diffuse, ColorParam.specularity, ColorParam.shininess,
ColorParam.transparency, ColorParam.emission);
iPart.Update;
Просто добавить ipart.UseColor := 0;
Все обошлось малой кровью.
Удивительный нюанс. Вставка в сборку у всех +- одинаковая, до сих пор не знал, как отключить редактирование по 2му клику. В смысле я нашел, как это сделать, однако данный способ срабатывал через раз. И что-то мне кажется версия компаса в этом замешана.
iRequestInfo3D.CreatePhantom;
phantom := ksPart(iRequestInfo3D.GetIPhantom);
phantom.standardComponent := true;
Для фантома назначить тру для стандарт компонент, просто гадание. И ведь помогло. Редактирование по 2му клику не работает теперь всегда.
Цитата: graphdark от 03.06.21, 15:37:22PS: Я очень хочу, чтобы мне стало стыдно за этот пост.
Не стало стыдно, но я поработал в T-Flex и прям мое увожение разработчикам из Аскона.