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

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

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

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

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

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

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

Переместить все объекты в один вид

Автор mkrz, 12.08.09, 11:27:41

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

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

mkrz

Подскажите как можно переместить все объекты с разных видов и слоев в один вид, например, системный

Starik

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

Yurok

Есть библиотеки которые позволяют выполнять такое. Они написаны кем то из пользователей компаса. До модернизации форума был раздел в котором были выложены эти библиотеки. Может уважаемая администратор подскажет где теперь их можно скачать?

mkrz

По форуму искал - ничего не нашел кроме doc.ksWriteGroupToClip(gr,true), но метод копирования через буфер вставляет снова в тот же вид даже если выбран текущим системный вид.
Может действительно что-то было до модернизации форума как пишет Yorok? Я не нашел.
Может еще кто знает где найти или хотя бы направление подскажите.

mkrz

Я тут попробовал, что можно сделать в этом случае средствами Компаса без программирования. Так вот если объект с любого вида вырезать и вставить то он вставится в текущий вид. Это подходит. Вот как теперь это реализовать программно? Нашел ksCopyObj(); , но это не то. Есть еще ksChangeObjectLayer();, но это смена слоя. Вот если бы такую команду да применительно к видам! Есть еще мысли на этот счет?

Yurok

насчет как програмно реализовать не подскажу, а готовый файл библиотеки выслать могу. Скинте в личку адрес электронной почты.

Yurok


mkrz

Yurok, большое спасибо. Правда библиотека не подключилась, да и исходников нет. Но зато есть адрес эл. почты автора. Может ответит. Поделюсь со всеми, если интересно

Yurok

Странно почему не подключилась :?: У меня на v9.2 прекрасно работает. Ну а насчет исходников это действительно лучше к разработчику

mkrz

Жду ответа от автора. А пока приходят в голову глупые мысли типа: последовательно считать и сохранить все параметры объекта, удалить объект, установить текущим системный вид, создать объект по сохраненным параметрам. Да вот только трудоемко это для каждого типа (отрезок, дуга, окружность и т. д.) писать свой обработчик.

lect

Я просто беру, два раза открываю в один чертеж и копирую из одного в другой.

mkrz

Lect. А можно в виде программы как это выглядит. Какие команды используете?

lect

Цитата: mkrz от 12.08.09, 14:11:54
Lect. А можно в виде программы как это выглядит. Какие команды используете?
1. Открываете чертеж.
2. Делаете копию, открываете её, выделяете в не то, что хотите скопировать, копируете, переключаетель на оригинал, вставляете. В оригинале удалете из другого вида то, что перенесли из копии.
Что-то я лишние проблемы себе создаю: можно и в одном чертеже вырезать, преключить вид, вставить.
Со слоями ещё проще - в свойствах переключить слой.

mkrz

Lect. Это все можно сделать средствами Компас. Как сделать программно? Пробовал в помощи SDK набрать "вырезать". Кроме "вырезать выдавливанием" ничего не нашел. Может не так ищу.

lect

mkrz, 3D моделирование что ли? Там я не знаю, я моделированием почти не занимался.

Maxagg

В данном коде вставляется вид с модели и переносится на системный слой
другого метода кроме как через ksWriteGroupToClip просто не нашел
var
  FN:string;
  i,numb,view:integer;
  a:array[1..3]of string;
  vid,macro1:reference;
  str_3DFileName:widestring;
  ksAVP:ksAssociationViewParam;
  ksDocumentParamPtr:ksDocumentParam;
  ksSheetParPtr:ksSheetPar;
  ksStandartSheetPtr:ksStandartSheet;
  ksViewParamPtr:ksViewParam;
  par :ksPlacementParam ;
  p,obj,tmpgroup,macro:reference;
  frag :ksFragment;
  iter:ksiterator;
  ksAVP1:ksAssociationViewParam;
  iRectParam:ksRectParam;
  iBotPt,iTopPt:ksMathPointParam;
  obj1,tmpgroup1:reference;
  s3d:ksdocument3d;
  spart:ksPart;
  sVariableCollection:ksVariableCollection;
  sVar_D:ksVariable;
  rn,rm:integer;
  ff,fr:textfile;


  ksAVP:=ksAssociationViewParam(kompas.GetParamStruct(ko_AssociationViewParam));
  ksavp.Init;
  ksavp.fileName:='C:\windows\vid'+inttostr(rn)+'.m3d';
  ksavp.projectionName:=position;
  ksViewParamPtr:=ksViewParam(ksAVP.GetViewParam);
  ksViewParamPtr.Init;
  ksViewParamPtr.scale_:= 1;
  ksViewParamPtr.x:=0;
  ksViewParamPtr.y:=0;
  ksViewParamPtr.state:=stINVISIBLE;
  ksViewParamPtr.name:=pname;
  ksAVP.projBodies:= true;
  ksAVP.visibleLinesStyle:= 1;
  numb:=0;
  view:= d2D.ksCreateSheetArbitraryView(ksAVP,numb);
  d2d.ksDestroyObjects(view);
  tmpgroup:= D2d.ksNewGroup(0);
  D2d.ksEndGroup;
  iter:=ksiterator(kompas.GetIterator);
  iter.ksCreateIterator(ALL_OBJ,view);
  obj1:=iter.ksMoveIterator('F');
  while obj1<>0  do
  begin
    D2d.ksAddObjGroup(tmpgroup,obj1);
    obj1:=iter.ksMoveIterator('N');
  end;
  iter.ksDeleteIterator;
  iter:=ksiterator(kompas.GetIterator);
  iter.ksCreateIterator(TEXT_OBJ,tmpgroup);
  obj1:=iter.ksMoveIterator('F');
  if obj1<>0  then
  D2d.ksDeleteObj(obj1);
  iter.ksDeleteIterator;
  iter:=nil;
  d2d.ksWriteGroupToClip(tmpgroup,false);
  D2d.ksClearGroup(tmpgroup, true);
  d2d.ksDeleteObj(tmpgroup);
  d2d.ksOpenView(0);
  tmpgroup1:=d2d.ksReadGroupFromClip;
  gp:=tmpgroup1;
  d2d.ksDeleteObj(view);
  s3d.close;

mkrz

Максимилиан. Пытаюсь проверить Ваш метод. Прошу пояснить по коду:
  d2d.ksOpenView(0);                                   //установили текущим системный слой. тут понятно
  tmpgroup1:=d2d.ksReadGroupFromClip;      //считали данные из буфера обмена во временную группу. понятно
  gp:=tmpgroup1;                                         //что за переменная gr? для чего временную группу присваиваем переменной gr? как временная группа записывается в чертеж?


mkrz

Максимилиану.
Нашел. Есть метод для вставки временной группы в документ
ksStoreTmpGroup();
Буду пытать.
Спасибо за информацию

Maxagg

извиняюсь, код выдрал из функции, gp это ее результат
вставляю в основной программе затем так
D2d.ksMacro(0);
macro1:= D2d.ksEndObj;
macro1:=d2d.ksCopyObj(gp,0,0,dx,dy,1,da); //полученное gp здесь использую.
D2d.ksMacro(0);
obj:= D2d.ksEndObj;
D2d.ksAddObjectToMacro(obj, macro1);
может и криво написано но в макрообъект объединяет

mkrz

Ура! Все получилось!
gr:=doc.ksNewGroup(1); //создаем группу
doc.ksAddObjGroup(gr,obj);//добавляем в группу объект
doc.ksEndGroup; //закрываем группу
doc.ksWriteGroupToClip(gr,false);//сохраняем группу в буфер обмена с удалением объекта
doc_t.ksOpenView(0); //устанавливаем системный вид в другом чертеже. Здесь doc_t указатель на другой чертеж
gr1:=doc_t.ksReadGroupFromClip;//считываем данные из буфера во временную группу g1
doc_t.ksStoreTmpGroup(gr1);//записываем временную группу в чертеж doc_t. Вот моя ошибка!!! Раньше я это не нашел и естественно объекты не записывались в новый чертеж!
doc.ksClearGroup(gr, true);//очищаем группу
doc.ksClearGroup(gr1, true);//очищаем группу

Максимилиан. Большое спасибо!