CDW в PDF КОМПАС V14

Автор AndreySt, 12.11.13, 15:25:41

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.



Цитата: Умка от 03.10.17, 06:11:28
Pdf2d.dll положил в папку "Bin"
Пишет Недопустимая строка с указанием класса, ProgID: "KSINVISIBLE.Application.5"
Пишет, что нет файла ksinvisible.exe, которого в Компас-3D V13, если память не изменяет, тоже не было.

Умка


Там же, где и Pdf2d.dll, но нужна будет регистрация класса "KSINVISIBLE.Application.5", которую Компас-3D V13 не делает, а также, я думаю, что вылезут и другие технические проблемы, из за несовместимости версий.

ТрындецЪ

Цитата: pr0100 от 02.10.17, 22:14:09
А просто обычный saveAs с расширением файла pdf не работает?
Как оказалось, не работает. Сохраняет в формате исходных файлов, только с расширением *.pdf.

pr0100

Цитата: ТрындецЪ от 03.10.17, 08:08:33
Как оказалось, не работает. Сохраняет в формате исходных файлов, только с расширением *.pdf.


Странно, но у меня все работает, правда компас 17 и на 16м тоже все работало без проблем.
Вот код последней строки
kompas_document.SaveAs(r'Путь до файла\Имя файла.pdf')

Evgenii

Добрый день!

Подскажите, пожалуйста, как пользоваться параметрами IPdf2dParam? Программирую на С#.

Использовал конветер
var iConverter = kompas7.get_Converter(pathBinFile + @"\Pdf2d.dll");

Далее брал параметры конвертирования
IPdf2dParam param = iConverter.ConverterParameters(0);

Однако изменение каких-либо параметров IPdf2dParam  не влияет на результат сохранения в pdf (Исключением является PageRange и PageOddEven).

Основное, что меня интересует - сохранение цветного документа и сохранение каждого листа в отдельный pdf-документ. Изменение свойств MultiPageOutput и ColorType, опять таки не влияют на результат сохранения. Подскажите, использовал ли кто параметры конвертирования?

П.С. Задачей является автоматическое конвертирование группы чертежей в pdf с заранее известными параметрами конвертирования. То есть, чтобы не вызывать компасовское окно ввода параметров сохранения.




Умка

Очень нужный конвертер! Его можно реализовать для компас 13 ?

EKosarev

есть кто разбирается господа? нужно чертеж сохранить в DXF но не просто Document2D.ksSaveToDXF('имя.dxf') а так что бы я еще мог выбрать версию формата или выбрать заранее определенную версию 

Использовать интерфейс конвертера IСonverter, для DXF - это библиотека dwgdxfExp.rtw.
https://forum.ascon.ru/index.php?topic=32761.msg270587#msg270587 - показан код и чему соответствуют константы.
ACAD_TLB.png

EKosarev

Не хватает знаний что бы понять. Как использовать библиотеку? нужно просто ссылаться на нее при работе с IConverter или с ней нужно выполнить махинации какие то, и сделать свою библиотеку для exe. я просто уже начитался что в голове каша, можно мне объяснение для чайника.

p.s. уважаемый Sabahs вы частные курсы случайно не проводите, по работе с API в Delphi ?

Нет, не провожу.
Что непонятного, вот готовый код только для PDF, для DXF всё тоже самое, только вместо значения ключа реестра C:\Program Files\ASCON\KOMPAS-3D v19\Bin\Pdf2d.dll, использовать путь к библиотеке c:\Program Files\ASCON\KOMPAS-3D v19\Libs\ImpExp\dwgdxfExp.rtw.

EKosarev

а что делает этот код, как он работает? у меня ошибки всяческие выдает, и я не понимаю где в этом коде, версию DXF выбирать

Я, кода не вижу, ошибок не вижу, для понимания предлагаю почитать книги по языку программирования.
Что, Вы делаете я не вижу, как можно помочь?

EKosarev

я вообщем опробовать этот код создал себе отдельную кнопку
ругается на эту строчку изначально pconverter:=newkompasapi.Converter[path2];
var
  newkompasapi:IApplication;
  disp:IDispatch;
  registry:TRegistry;
  pconverter:IConverter;
  pconverterptr:IUnknown;
  path2:string;
  Kompas: KompasObject;

  begin
    Registry:=TRegistry.Create;
    Registry.RootKey:=HKEY_LOCAL_MACHINE;
    if Registry.OpenKeyReadOnly('C:\Program Files\ASCON\KOMPAS-3D v19\Libs\ImpExp\dwgdxfExp')  then
    path2:=Registry.ReadString('path');
          Kompas:= KompasObject(CreateOleObject('Kompas.Application.5'));
          newkompasapi:=GetActiveOleObject('Kompas.Application.7') as IApplication;
          disp:=IDispatch(newkompasapi);
          newKompasAPI:=disp As IApplication;
              pconverter:=newkompasapi.Converter[path2];
              pconverterptr:=pconverter.ConverterParameters(0);
              if pconverter.Convert('','ffff.dxf',0,false)=1 then
              ShowMessage('true')
              else
              ShowMessage('false');
  end;

Где проверки, получен интерфейс или нет?
Как, ругается?
API7, получить нужно от API5, т.к. у Вас приложение.
КОМПАС, какой версии?
Цитата: undefinednewkompasapi:=GetActiveOleObject('Kompas.Application.7') as IApplication;
disp:=IDispatch(newkompasapi);
newKompasAPI:=disp As IApplication;
Что, Вы этим делаете?

EKosarev

я думал этим я как раз получаю API7 от API5
компас v19


Тут, на картинке показано, как получить API7 от API5.
Можно и так, как Вы делаете, но эти две строчки, мне кажутся лишними:
disp:=IDispatch(newkompasapi);
newKompasAPI:=disp As IApplication;

EKosarev

я снова вернулся к изучению этой темы, все начинается с создания регистра, потом выбирается секция, потом указываю путь к библиотеки.
следом появляется патч он используется при конвертации, в нем как и в примере надо просто написать path или тут то как раз и указывается версия будущего DXF? 

Приведите код и если, Вам нетрудно, небольшой комментарий к нему.
Можно у Вас спросить, для чего Вам необходимо сделать данный функционал?

EKosarev

ну я все про тот же код что сверху начинаеться все с этого
Registry:=TRegistry.Create;
Registry.RootKey:=HKEY_LOCAL_MACHINE;
if Registry.OpenKeyReadOnly('C:\Program Files\ASCON\KOMPAS-3D v19\Libs\ImpExp\dwgdxfExp')  then
path2:=Registry.ReadString('path');

path2 потом в конверторе используется

pconverter:=newkompasapi.Converter[path2];

и сердце мне подсказывает что в нем как раз и секрет того как заставить сохранять в определенной версии.


Ну есть прорграмма которая для станков пишет код из формата DXF,  в новой версии он ведет себя неправильно, или совсем не получается  или может например окружность точками нарисовать  или двумя полуокружностями. Чуть поздняя версия DXF решает проблему.
а то что я пишу получается он берет 3д модель делает из нее развёртку и сохраняет в DXF