Тема: Объект HATCH - импорт из AutoCAD Boundaries

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

В справке написано, что при создании штриховки надо использовать метод AppendOuterLoop
куда передать ссылки на объекты, образующие замкнутый контур. Но непонятно, как эти объекты получить, если я их не создавал.

Re: Объект HATCH - импорт из AutoCAD Boundaries

Для получения контура штриховки пользуйся методами NumberOfLoops, GetLoopAt. С какими-то типами штриховок это будет работать, с какими-то нет. Средствами ActiveX-модели AutoCAD (которую только и можно использовать в Delphi) в общем случае контур не получить.

Re: Объект HATCH - импорт из AutoCAD Boundaries

Александр Ривилис пишет:

Средствами ActiveX-модели AutoCAD (которую только и можно использовать в Delphi) в общем случае контур не получить.

Зависит от паттерна или от набора Boundaries?
Надеюсь, хоть с заливками пройдет.

И несовсем понятно, где там Inner а, где Outer если на входе они по отдельности, а на выходе все в кучу(((

Re: Объект HATCH - импорт из AutoCAD Boundaries

ttiger t пишет:

Зависит от паттерна или от набора Boundaries?

Зависит от набора границ.

Re: Объект HATCH - импорт из AutoCAD Boundaries

Вы можете вспомнить какой-то конкретный пример набора границ?
Удалось ли выявить какую-то систему?

(изменено: ttiger t, 15 апреля 2011г. 15:06:18)

Re: Объект HATCH - импорт из AutoCAD Boundaries

Картинка:
Объект HATCH - импорт из AutoCAD Boundaries

Сделал экспорт GetLoopAt
Это массив из наборов областей.
Каждое из возвращаемых значений есть массив из объектов акада (Entity)

Но возникает следующий вопрос:
есть три пересекающихся треугольника(см.картинку). И две области штриховки. Заштрихованы разные места на рисунке, а набор в GetLoopAt один и тот же.

Вопрос: какие еще свойства, кроме GetLoopAt  шарактеризуют конкретную область штриховки?



Вот код, если кому-то интересно (как убрать его под спойлер?):

function TAcadHatch.PropertiesText: string;
var
  sl, LoopEntityProperties: TStringList;
  i, j: integer;
  s: string;
  LoopEntOle: OleVariant;
  LoopOle: OleVariant;
  Ent: TAcadEntity;
begin
  Result := '';
  sl := TStringList.Create;
  try
    sl.Add('I am a Hatch object');
    sl.Add('ObjectId='+IntToStr(self.ObjectID));
    sl.Add('OwnerId='+IntToStr(self.OwnerID));
    sl.Add('Pattern name: '+Self.PatternName);
    sl.Add('LoopCount: '+IntToStr(self.NumberOfLoops));
    for i := 0 to NumberOfLoops-1 do
    begin
      fEntityOle.GetLoopAt(i, LoopOle);
      sl.Add('Loop #'+intToStr(i));
      j := VarArrayLowBound(LoopOle,1);
      while ( j<=VarArrayHighBound(LoopOle,1) ) do
      begin
        try
          LoopEntOle := LoopOle[j];
          Ent := TEntityFactory.EntityFactory(LoopEntOle);
          s := Ent.PropertiesText;
          Ent.Free; Ent := nil;
          AddTabulation(s);
          sl.Add(s);
          j := j + 1;
        except
          on Exception do
          begin
            sl.Add('Loop #'+IntToStr(i)+' ObjCount='+IntToStr(j) );
            Break;//полагаю, нас послали потому, что мы за рамки массива вышли
          end;
        end;
      end;//while true do
      sl.Add('Loop #'+IntToStr(i)+' ObjCount='+IntToStr(j) );
      sl.Add('');
    end;//for i := 0 to NumberOfLoops-1 do
    Result := sl.Text;
  finally
    sl.Add('end;');
    Result := sl.Text;
    sl.Free;
  end;
end;