две проблемы первая пытался в компасе вывести с помощью 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, все это делается для определения расстояния от точки принадлежащей детали(заданному с помощью треугольников) до другой детали в сборке, может есть другой способ это реализовать?
спасибо