• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Наложение радиальных размеров

Автор Mihonius, 27.04.13, 14:23:28

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

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

Mihonius

Здравствуйте в построении чертежа есть несколько дуг окружности, нужно проставить размеры, написал процедуру с параметрами, все работает на отлично, кроме наложения радиальных размеров в местах показанных на картинке, можно учесть и поправить в моей процедуре?
procedure RazmerRad(cir : Reference);
var
  obj  : Reference;
  aDim      : ksRDimParam;
  textLine  : ksTextLineParam;
  textItem  : ksTextItemParam;
  tPar      : ksDimTextParam;
  font      : ksTextItemFont;
  arr, arr1 : ksDynamicArray;
  sPar      : ksRDimSourceParam;
  dPar      : ksRDimDrawingParam;
  param1    : ksArcByAngleParam;
begin
  iDynamicArray := ksDynamicArray(iKompas.GetDynamicArray( POINT_ARR ));
  iMathPointParam := ksMathPointParam(iKompas.GetParamStruct( ko_MathPointParam ));
  iMathematic2D := ksMathematic2D(iKompas.GetMathematic2D);
  if (iMathematic2D = nil) then exit;
// считываем параметры
  param1 := ksArcByAngleParam(iKompas.GetParamStruct(ko_ArcByAngleParam));
  if (cir<>0) then
  begin
  idoc.ksGetObjParam(cir, param1, ANGLE_ARC_PARAM);
  aDim     := ksRDimParam    ( ikompas.GetParamStruct(ko_RDimParam)       );
  textLine := ksTextLineParam( ikompas.GetParamStruct( ko_TextLineParam ) );
  textItem := ksTextItemParam( ikompas.GetParamStruct(ko_TextItemParam)   );
  if ( (aDim = nil) Or (textLine = nil) Or (textItem = nil) ) then
      Exit;
   textLine.Init;
   textItem.Init;
   tPar := ksDimTextParam( aDim.GetTPar );
   font := ksTextItemFont( textItem.GetItemFont );
  arr  := ksDynamicArray( textLine.GetTextItemArr );
   sPar := ksRDimSourceParam( aDim.GetSPar );
   dPar := ksRDimDrawingParam( aDim.GetDPar );
   if ( (tPar = nil) Or (font = nil) Or (sPar = nil) Or (dPar = nil) ) then
      Exit;
   tPar.Init( true );
   tPar.SetBitFlagValue( _AUTONOMINAL, true );
  tPar.sign := 3;
  font.Init;
   font.height   := 5;
   font.ksu      := 1;
   font.fontName := 'GOST type A';
   font.SetBitVectorValue( NEW_LINE, true );
   arr.ksAddArrayItem( -1, textItem );
  arr1 := ksDynamicArray( tPar.GetTextArr );
   if ( arr1 = nil ) then
      Exit;
   arr1.ksAddArrayItem( -1, textLine );
   sPar.Init;
   sPar.xc  := param1.xc;
   sPar.yc  := param1.yc;
   sPar.rad := param1.rad;
  dPar.Init;
  dpar.ang := (param1.ang1+param1.ang2)/2; // это делалось специально с целью размещения размера по центру дуги
  idoc.ksRadDimension( aDim );
end;
end;

27.04.13, 14:31:01 #1 Последнее редактирование: 27.04.13, 14:54:33 от Sabahs
Учитывайте ширину текста размера при расчёте угла dpar.ang := (param1.ang1+param1.ang2)/2; или на полку вынесите.
Цитировать// это делалось специально с целью размещения размера по центру дуги
Только нужно учесть, что несколько размеров могут иметь тот же угол расположения, на центре дуги.