gstof
Зарегистрирован: 26.01.2007 Сообщения: 70 Откуда: Vladivostok-Kurgan
|
Добавлено: Пн 18 Июн 2007 15:17 Заголовок сообщения: |
|
|
Я так и понял, что метод Closed определяет замыкание части контура.
Однако в моем коде, сделанном на основе Вашего почему-то не происходит замыкания. А в ручную когда их много тоскливо
Код: | procedure TForm1.Button4Click(Sender: TObject);
var x0,y0:Double;
begin
aNewObjects:= FInGEOApp.ActiveDb.MapObjects;
aNewObject:=aNewObjects.AddObject(Edit1.Text);
NewContour:=aNewObject.Shapes.Insert(0,Edit2.Text).Contour;
theObjID := FInGEOApp.Selection.IDs[0];
aMapObjects := FInGEOApp.ActiveDb.MapObjects;
aMapObject := aMapObjects.GetObject(theObjID);
for i := 0 to aMapObject.Shapes.Count - 1 do begin
aShape := aMapObject.Shapes[i];
// Информация о стиле отрисовки фигуры
Memo1.Lines.Add(Format('ShapeStyleName: %s',[aShape.Style.Name]));
// Если фигура не определяет геометрию пространственного объекта,
// то ее пропускаем
if not aShape.DefineGeometry then
Continue;
for j := 0 to aShape.Contour.Count - 1 do begin
aNewPart:= NewContour.Insert(-1); //Создание новой части
aPart := aShape.Contour[j];
// Общая информация о части контура
Memo1.Lines.Add(Format(' Part %d',[j]));
if aPart.Closed then
Memo1.Lines.Add(' Эта часть контура замкнута.')
else
Memo1.Lines.Add(' Эта часть контура разомкнута.');
Memo1.Lines.Add(Format(' Площадь: %g мм.', [aPart.Square]));
Memo1.Lines.Add(Format(' Периметр: %g мм.', [aPart.Perimeter]));
for k := 0 to aPart.VertexCount - 1 do
begin
aPart.GetVertex(k,aX,aY,aC);
{ if k=0 then
begin
x0:=aX;
y0:=aY;
end; }
Memo1.Lines.Add(Format(' Vertex %d: x = %g, y = %g, convexity = %g', [k,aX,aY,aC])); // Информация о вершинах
aNewPart.InsertVertex(-1,aX,aY,0);
end; //end vertex
// aNewPart.InsertVertex(-1,x0,y0,0);
aNewPart.Closed; //закрытие новой части
end; //end Part
end; //end Shape
aNewObjects.UpdateChanges;
Memo2.Lines.Add('Закончено');
end; |
|
|