• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

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

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

разрушить чертёж

Автор Thender, 09.11.16, 16:58:58

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

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

Thender

прошу помощи у знающих,
для электронного архива чертежи необюходимо разрушить, как это сделать программно?
необходимо найти все виды на чертеже и разрушить их, так же разрушить необходимо и оформление.
в принципе язык тут наверное не имеет значения, но лично мне предпочтительнее Delphi( На ней код пробовал компилить - получилось), VB,C++. Python (по уменьшению предпочтительности)

Bordes

как перебирать объекты документа см. в Step7 в примерах SDK
для разрушения объектов используйте ksDestroyObjects
+ Благодарностей: 1

Зачем их перебирать?
Выделил всё и разрушил.

Thender

спасибо буду пробовать.
а как разрушить оформление подскажите?9

Попробовать подкинуть функции ksDestroyObjects ILayoutSheet.Reference.
Пробовать функцией DecomposeObj, вроде должна оформление разрушать.

Alex152

Добрый день!
Вопрос похожий! У меня есть чертеж с привязками к 3D моделям и надо разрушить эти связи! Как это можно сделать программно?

А с ksDestroyObjects(obj) надо быть осторожнее эта функция работает но она разрушает все, в т.ч и линии разрыва из-за этого слетают со своих мест позиции ,надписи, линии выноски, линии разрезов и т.д.! так что с ней будте осторожнее!

Thender

Цитата: Sabahs от 09.11.16, 17:25:39
Зачем их перебирать?
Выделил всё и разрушил.
получилось разрушить перебором видов, но вылетает сообщении при разрушении вида имеющего зависимые виды, как избавиться или передать в функцию ссылку на коллекцию всех видов стазу( опять же без запроса на подтверждение)?.

Картинку сообщения покажите.

Thender

скорее всего это совершенно не связано ни с какими видами это скорее связано с каким то плагином хотя все библиотеки выгружены.
домашний комп - это некий полигон для испытания, на рабочем может быть такого и не будет. выйду на работу - проверю.

Пробуйте убрать свойством IApplication.HideMessage, только после разрушения его нужно вернуть в исходное состояние.

Thender

Цитата: Sabahs от 09.11.16, 22:05:22
Попробовать подкинуть функции ksDestroyObjects ILayoutSheet.Reference.
Пробовать функцией DecomposeObj, вроде должна оформление разрушать.
В первом варианте компилятор ругается на LayoutSheet.Reference - в какой библиотеке может быть на неё описание?
Во втором варианте:
function  DecomposeObj( p     : Reference;               //указатель на объект
                                    level : Byte;                       //уровень разбиения 0- отрезки,дуги,тексты,точки;
                                                                           //                  1-отрезки,тексты,точки; 2-отрезки, дуги, тексты
                                   arrow : Double;                  //стрелка прогиба
                                   _type : Byte ) : Reference;  // 0 - разбиение объекта в СК вида 1- в СК листа
так же нужно получить указатель на оформление.
непонятно что за стрелка.

Как Вы получили ILayoutSheet, если ругается только на Reference?
ILayoutSheet - модуль ksApi7.pas.

Thender

Цитата: Sabahs от 14.11.16, 09:40:05
Как Вы получили ILayoutSheet, если ругается только на Reference?
ILayoutSheet - модуль ksApi7.pas.
так и дело то в том что я не получил ссылку,
не понимаю ка это сделать
в примерах создаем итератор для хождения по объектам , а тут либо также(используя модификатор STAMP_OBJ ) либо как то совершенно по другому нужно получить этот указатель.

14.11.16, 12:56:04 #13 Последнее редактирование: 14.11.16, 13:16:50 от Sabahs
http://forum.ascon.ru/index.php/topic,28345.msg214211.html#msg214211
Справку почитать, там всё расписано.
+ Благодарностей: 1

Thender

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

Да.
Там всего две строчки лишние, т.к. решалась другая задача.
+ Благодарностей: 1

Thender

Цитата: Sabahs от 09.11.16, 17:25:39
Зачем их перебирать?
Выделил всё и разрушил.
Подскажите как можно выделить всё и разрушить,
попробовал перебирать документы, и в каждом документе перебирать Виды, - ничего не получается, MoveIterator - сбивается если менять тип объектов перебора, после перебора всех видов он  отказывается продолжать перебирать  документы.
если ничего не получится придётся после каждого документа заново перебирать виды

Вы покажите, что Вы делаете?
PS. Писать за Вас код я не буду.

Thender

взял за основу Код из примера 7 прочто добавил ksDesrtoyobjects

//-------------------------------------------------------------------------------
//хождение по документам
//----
procedure WalkFromDoc;
var
  doc   : DocumentParam;
  iDoc  : reference ;
  pDoc  : reference ;
  buf   : AnsiString;
  count : integer;
  par   : ViewParam ;
  number: integer;
begin

count := 0;
//создаем итератор для хождения по документам
iDoc := CreateIterator( DOCUMENT_OBJ , 0 );
if ( iDoc > 0 ) then
begin
   pDoc := MoveIterator( iDoc, 'F' );
   if ( pDoc > 0 ) then
   begin
     repeat
       //активизируем документ pDoc
       if ( SetObjParam( pDoc, nil, 0, DOCUMENT_STATE ) > 0 ) then
       begin
         iNc(count );
         number := count;
         buf := Format('документ %d ', [count] );
         ksMessage( PAnsiChar(buf) );
          WalkViewDoc;
       end;
       pDoc := MoveIterator(iDoc, 'N');
     until ( pDoc = 0 );
   end;
end;
end;

//----------------------------------------------------------------------------------------
//хождение по видам
//---
procedure WalkViewDoc;
var
  doc    : DocumentParam;
  i      : integer;
  par    : ViewParam ;
  number : integer;
  iView, pView : reference;
  count :  integer;
  state :  integer;
begin

  //создадим итератор для навигации по видам в документе
  iView := CreateIterator( VIEW_OBJ , 0 );
  count :=0;
  if ( iView > 0) then
  begin
    pView := MoveIterator ( iView, 'F'); //первым будет системный вид с номером 0
    if ( pView > 0 ) then
    begin
      repeat
        state := stCURRENT;
        if ( SetObjParam( pView, Addr(state), SizeOf( integer ), VIEW_LAYER_STATE ) > 0 ) then
        begin
         ksdestroyobjects(pview);
        end;
        Inc(count);
        pView := MoveIterator ( iView, 'N');
      until ( pView = 0 );
    end;
  end;
end;

до того как в первую процедуру добалил строчку
  WalkViewDoc;
документы перебирались, после добавления перестали перебираться.

Попробуйте SelectGroup, в SDK внимательно прочитайте примечание к данной функции.