Объект CATVertex - что с ним можно сделать?

Средства работы с базами знаний.

Объект CATVertex - что с ним можно сделать?

Сообщение SeSl » 24 авг 2013 12:46

Уважаемые гуру. Прошу помочь в решении такой задачи.

Существует не некой поверхности кривая (в контексте примера interect_curve1). Есть набор точек, относительно которых делаются некоторые построения в привязке к этой кривой. Точки объединены в список, построения выполняются средствами Knowledge pattern. Основной инструмент построения - CreateOrModifyDatum.

Относительно каждой точки строится некая кривая (для простоты пусть окружность), которая проецируется на заданную целевую поверхность (в моем случае target_surf). Ищется пересечение заданной кривой с каждой такой проекцией. Код на этом этапе выглядит так:
Код: Выделить всё
for p inside `Points Lo `
{
   /*
   set l=CreateOrModifyDatum("Line", gs2  , `Relations\Knowledge Pattern.1\Lines`  , i)
   l.Name = "Line." + ToString(i)
   l.Show = false             */
   l = linenormal(target_surf ,p,0mm,2mm,true)

   
   /*   
   set Crc = CreateOrModifyDatum("Circle",gs2,`Relations\Knowledge Pattern.1\circles` ,i)
   Crc.Show = false
   Crc.Name = "Crc." + ToString(i)      */
   Crc = circleCtrAxis(l, p, 0.825mm , 0, 0, false , 1)
   
   
   set Proj_curve = CreateOrModifyDatum("Curve",gs2, `Relations\Knowledge Pattern.1\ProjCurvs`  ,i)
   Proj_curve .Name = "Proj_curve." + ToString(i)   
   Proj_curve = project(Crc , target_surf , direction(l) )

   Interect_point = intersect(Proj_curve, interect_curve1)

Закомментированные фрагменты служат отладочным целям. На данном этапе я получаю множественное пересечение. Оно может состоять из двух CATVertex-ов, одного, может вообще не иметь пересечения. В моем случае необходимо выделить все такие точки (вершины) для создания дальнейших построений. На самом деле мне удалось это сделать при помощи
Код: Выделить всё
near_point = near(Interect_point, zero_point)

,где zero_point - некая наперед заданная точка. Понятно, что невозможно найти (придумать) 2-х универсальных точек, чтоб функционал near "цеплял" каждый раз разные вершины в таком наборе. Соответственно, для корректной работы такого алгоритма требуется:
  • дополнительная проверка на количество полученных вершин
  • дополнительное формирование пары точек, для которых near будет возвращать разные вершины

Намного более приятным подходом к решению мне видится конструкция с перебором полученных вершин, которые, как оказалось, располагаются в списке GetSubElements(0)
Код: Выделить всё
For v inside Interect_point.GetSubElements(0)
{
   
   Trace(1," v = #",v.Name)
   w = extract(v)
   Trace(1," w = #",w.Name)
   
}


Трассировки для отладки. В данном контексте определены v (CATVertex), w (wireframe). Собственно, не работает этот метод extract. Я его пробовал с аргументами и без. Прямое (set p1= ) создание точки результатов также не дает. Дополнительных субэлементов не содержит :
Код: Выделить всё
Message(" SubElements_Size= #",w.GetSubElements(0)->Size() )

-возвращает 0. В качестве параметра пробовал
Код: Выделить всё
let g_e (GSMExtract)
....
set g_e = extract(v)

Тоже по нулям.
Катя выдает две ошибки:
Update failed :
Not Connex Specification
A BRep has become not connex.
Please, edit the related Extract in update error,
and redefine the specification.

Update failed :
Invalid, empty or missing input element.
One mandatory input element is invalid, empty or missing.
There is no solution for this operation.

Вторая, видимо, при попытке использовать не инициализированной точки в дальнейшем построении. Так что ключевая ошибка - в первом сообщении.

Файл не прикрепляю, ситуацию можно смоделировать построением любой пары кривых на некоторой поверхности с дальнейшим извлечением их пересечения. Я пробовал, результат тот же. Вертексы есть, Катя исправно их укладывает в виде субэлементов, Их можно извлечь, прочесть параметры, а хотелось бы получить точки. С Катей работаю второй месяц, увы оф. документация на эту тему очень скудная. Других источников информации пока не нашел. С VBA пока не связывался. Надеюсь, моя задача решается средствами Knowledge языка. Заранее спасибо!
SeSl
Новичок
Новичок
 
Сообщения: 14
Зарегистрирован: 10 авг 2013 22:24

Re: Объект CATVertex - что с ним можно сделать?

Сообщение SeSl » 26 авг 2013 08:48

Вдогонку вариант решения найден. Помог метод disassemble, который замечательным образом дробит множественное пересечение на отдельные объекты, с которыми уже можно работать. Привожу код, который мне помог:
Код: Выделить всё
for Cur_point  inside `Points Lo `
{
   /*
   set l=CreateOrModifyDatum("Line", gs2  , `Relations\Knowledge Pattern.1\Lines`  , i)
   l.Name = "Line." + ToString(i)
   l.Show = false             */
   Cur_line = linenormal(target_surf ,Cur_point ,0mm,2mm,true)
   Cur_direct = direction(Cur_line )
   
   
   
   /*   
   set Crc = CreateOrModifyDatum("Circle",gs2,`Relations\Knowledge Pattern.1\circles` ,i)
   Crc.Show = false
   Crc.Name = "Crc." + ToString(i)      */
   Crc = circleCtrAxis(Cur_line , Cur_point  , 0.85mm , 0, 0, false , 1)
   
   /*
   set Proj_curve = CreateOrModifyDatum("Curve",gs2, `Relations\Knowledge Pattern.1\ProjCurvs`  ,i)
   Proj_curve .Name = "Proj_curve." + ToString(i)   */
   Proj_curve = project(Crc , target_surf , Cur_direct )
   
   For crvs inside   int_curves
   {      
      For CC_point  inside disassemble(project(intersect(Proj_curve, crvs), corner_surf , Cur_direct ), true)
      {
         
         set Crc = CreateOrModifyDatum("Circle",gs2,`Relations\Knowledge Pattern.1\Cyrcls`  ,j)
         Crc.Name = "Crcle." + ToString(j)      
         Crc = circleCtrAxis(Cur_line , CC_point, 0.2mm , 0, 0, false , 1)
         j = j + 1
      }
   }
   
   i=i+1
}


Тему на этом можно было бы закрыть, но основной вопрос остался. Есть ли у кого опыт работы с субобъектами и с извлечением таковых extract - ом? Интересует именно Knowledge реализация. Спасибо заранее, если что сам накопаю, выложу в этой ветке.
SeSl
Новичок
Новичок
 
Сообщения: 14
Зарегистрирован: 10 авг 2013 22:24

Re: Объект CATVertex - что с ним можно сделать?

Сообщение deNSe » 26 авг 2013 16:40

V5R23? =-O
know how vs how know
Аватара пользователя
deNSe
Участник
Участник
 
Сообщения: 115
Зарегистрирован: 24 сен 2010 19:00

Re: Объект CATVertex - что с ним можно сделать?

Сообщение SeSl » 26 авг 2013 23:24

deNSe писал(а):V5R23? =-O

V5-6R2013
SeSl
Новичок
Новичок
 
Сообщения: 14
Зарегистрирован: 10 авг 2013 22:24


Вернуться в Knowledge

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron