Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 2 Días
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 216
Poder: 14
compuin Va por buen camino
Evitar overlapping o sobreposicion

Saludos,

Estoy utilizando TImage y Canvas y necesito colocar 2 valores que estan en un array occupied: array[0..359] of integer;. Lo estoy intentando asi, sin exito

Código:
procedure WriteAtDeg(Image: TImage; deg: integer; what: string; isplanet, hasglyph: boolean;
  PlanetPos: double; Retro: boolean; GlyphColor: tColor);
var
  x, y: extended;
  l, lplus: integer;
  level: byte;
  space: tSize;
  CenterX, CenterY: Integer;

  procedure SetFont(c: tCanvas; FontSizeBase: integer);
  begin
    with c do
    begin
      if hasglyph then
      begin
        Font.Name := 'StarFont Sans'; //'HamburgSymbols';
        Font.Size := FontSizeBase div 18;
      end
      else
      begin
        Font.Name := 'Arial';
        Font.Size := FontSizeBase div 18;
      end;
    end;
  end;

begin
  // Calcular el centro del TImage dinámicamente
  CenterX := Image.Width div 2;
  CenterY := Image.Height div 2;

  // El radio de colocación siempre es el mismo para evitar que suban o bajen
  if isplanet then
    l := round(RadiusDiff * 1.65)
  else
    l := round(RadiusDiff / 2);

  lplus := round(RadiusDiff * 0.7);

  // Convertir el ángulo a coordenadas cartesianas
  SinCos(degtorad(deg), y, x);
  deg := (deg + 360) mod 360;

  // Establecer la fuente
  SetFont(Image.Canvas, RadiusInner);

  //if not ((GlyphColor = clBlack) and ((what = 'AC') or (what = 'MC'))) then
  // Dibujar el texto en la posición calculada con una separación entre capas
    with Image.Canvas do
    begin
      Pen.Color := GlyphColor;
      Font.Color := GlyphColor;
      space := TextExtent(what);

      TextOut(round(-x * (RadiusOuter - l - lplus * occupied[deg])) + CenterX - space.cx div 2,
        round(y * (RadiusOuter - l - lplus * occupied[deg]) + CenterY - space.cy div 2), what);
       ...
Mi intencion es evitar que 2 valores proximos tengan sobreposicion o overlapping.

Agradecido de antemano cualquier ayuda
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Evitar modificación Malau Conexión con bases de datos 2 29-11-2010 06:08:16
Evitar nulos HectorMendez SQL 3 24-11-2007 17:16:03
Evitar Pegado nemesio Varios 9 03-12-2005 03:53:41
Evitar duplicados hectorin Conexión con bases de datos 2 29-10-2004 16:37:25
Evitar Parpadeo yusnerqui Varios 2 18-09-2004 17:10:16


La franja horaria es GMT +2. Ahora son las 05:19:29.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi