не вижу своих ошибок:(

Автор gin, 17.08.07, 09:37:54

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

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

gin

две проблемы первая пытался в компасе вывести с помощью OpenGl трехмерное тело заданное треугольниками но что то не догоняю при вызове процедуры Компас ругается что лист неактивен, хотя вроде бы все сделал как в файле примера
  //вывод результата моделирования
  procedure DrawBillet;
  var
    i: Integer;

  begin
      glClearColor( 1.0, 1.0, 1.0, 1.0 );
      glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );
      glDisable( GL_LIGHTING );
      glEnable( GL_DEPTH_TEST );
      iPart := ksPart( iDocument3D.GetPart(pTop_Part) );
      if iPart <> nil then
      begin
        iPart._Release;
        if iDocument3D.IsDetail then
        begin
          for i := 1 to High(Polygon) do
          begin
            //первая вершина
            glColor3d( 1.0, 0.0, 0.0 );
            glVertex3d( BEMBillet[Polygon.Vertex[1]].x, BEMBillet[Polygon.Vertex[1]].y, BEMBillet[Polygon.Vertex[1]].z );
            glNormal3d( BEMBillet[Polygon.Vertex[1]].NormalX, BEMBillet[Polygon.Vertex[1]].NormalY, BEMBillet[Polygon.Vertex[1]].NormalZ );

            //вторая вершина
            glColor3d( 0.0, 1.0, 0.0 );
            glVertex3d( BEMBillet[Polygon.Vertex[2]].x, BEMBillet[Polygon.Vertex[2]].y, BEMBillet[Polygon.Vertex[2]].z );
            glNormal3d( BEMBillet[Polygon.Vertex[2]].NormalX, BEMBillet[Polygon.Vertex[2]].NormalY, BEMBillet[Polygon.Vertex[2]].NormalZ );

            //третья вершина
            glColor3d( 0.0, 0.0, 1.0 );
            glVertex3d( BEMBillet[Polygon.Vertex[3]].x, BEMBillet[Polygon.Vertex[3]].y, BEMBillet[Polygon.Vertex[3]].z );
            glNormal3d( BEMBillet[Polygon.Vertex[3]].NormalX, BEMBillet[Polygon.Vertex[3]].NormalY, BEMBillet[Polygon.Vertex[3]].NormalZ );
          end;
        end
      end;
      iDocument3D := nil;
      glEnable( GL_LIGHTING );
  end;

вторая проблема
при вызове свойств или методов ksPolyLineVertexParam компас закрывается с ошибкой что не может память прочесть
          iKompasObject.ksMessage('1');
          iPointParam.buildingType := ksLineBuildingType(ksLBTByPoint);
iKompasObject.ksMessage('2');
          if iPointParam.SetParamVertex(x, y, z, 0) then
          begin

          end;
iKompasObject.ksMessage('3');
          iMeasurer.SetObject1(iPart1);
iKompasObject.ksMessage('4');
          iMeasurer.SetObject2(iPointParam);
iKompasObject.ksMessage('5');
          iMeasurer.Calc;
          dist := iMeasurer.Distance;
          memo1.Lines.Add(FloatToStr(dist));
вылетает на любой строке с iPointParam он описан как ksPolylineVertexParam, все это делается для определения расстояния от точки принадлежащей детали(заданному с помощью треугольников) до другой детали в сборке, может есть другой способ это реализовать?
спасибо