Solved

large  radius circle problem

Posted on 1997-07-16
3
343 Views
Last Modified: 2012-05-04
Windows has a limit drawing circles with a large
radius, where the center point is beyond a certain limit.  Try the following
code:

ScaleLeft = 15500
ScaleTop = 15500
rad = 61317
Circle (61420, 61420), rad, RGB(0, 0, 0)


This sample will draw a curve.  BUT if you increase the radius (rad) from
61317 to 61318 it will no longer work.  Interesting.

There are possibley things one can do, like changing the scalemethod but this requires a lot of extra design work
0
Comment
Question by:genej
  • 2
3 Comments
 
LVL 5

Accepted Solution

by:
y96andha earned 100 total points
Comment Utility
I am not sure what API calls the Circle function uses, but many graphics API calls are limited to 16-bit values under Windows 95. This is the reason for your function not working. I run Windows NT so when I tested your code, it worked with 61318 too.

I think that this could be the function used:

The Arc function draws an elliptical arc.

BOOL Arc(
    HDC  hdc,      // handle to device context
    int  nLeftRect,      // x-coordinate of bounding rectangle's upper-left corner
    int  nTopRect,      // y-coordinate of bounding rectangle's upper-left corner  
    int  nRightRect,      // x-coordinate of bounding rectangle's lower-right corner  
    int  nBottomRect,      // y-coordinate of bounding rectangle's lower-right corner    
    int  nXStartArc,      // first radial ending point
    int  nYStartArc,      // first radial ending point
    int  nXEndArc,      // second radial ending point
    int  nYEndArc       // second radial ending point
   );      
Parameters
hdc
Identifies the device context where drawing takes place.
nLeftRect
Specifies the logical x-coordinate of the upper-left corner of the bounding rectangle.
Windows 95: The sum of nLeftRect plus nRightRect must be less than 32768.
nTopRect
Specifies the logical y-coordinate of the upper-left corner of the bounding rectangle.
Windows 95: The sum of nTopRect plus nBottomRect must be less than 32768.
nRightRect
Specifies the logical x-coordinate of the lower-right corner of the bounding rectangle.
Windows 95: The sum of nLeftRect plus nRightRect must be less than 32768.
nBottomRect
Specifies the logical y-coordinate of the lower-right corner of the bounding rectangle.
Windows 95: The sum of nTopRect plus nBottomRect must be less than 32768.
nXStartArc
Specifies the logical x-coordinate of the ending point of the radial line defining the starting point of the arc.
nYStartArc
Specifies the logical y-coordinate of the ending point of the radial line defining the starting point of the arc.
nXEndArc
Specifies the logical x-coordinate of the ending point of the radial line defining the ending point of the arc.
nYEndArc
Specifies the logical y-coordinate of the ending point of the radial line defining the ending point of the arc.

Return Value
If the arc is drawn, the return value is TRUE; otherwise, it is FALSE.

Remarks
The points (nLeftRect, nTopRect) and (nRightRect, nBottomRect) specify the bounding rectangle. An ellipse formed by the specified bounding rectangle defines the curve of the arc. The arc extends in the current drawing direction from the point where it intersects the radial from the center of the bounding rectangle to the (nXStartArc, nYStartArc) point. The arc ends where it intersects the radial from the center of the bounding rectangle to the (nXEndArc, nYEndArc) point. If the starting point and ending point are the same, a complete ellipse is drawn.
The arc is drawn using the current pen; it is not filled.
The current position is neither used nor updated by Arc.

Windows 95: The drawing direction is always counterclockwise.

Windows NT: Use the GetArcDirection and SetArcDirection functions to get and set the current drawing direction for a device context. The default drawing direction is counterclockwise.

Windows 95 only: The sum of the coordinates of the bounding rectangle cannot exceed 32,767. The sum of nLeftRect and nRightRect or nTopRect and nBottomRect parameters cannot exceed 32,767.



0
 

Author Comment

by:genej
Comment Utility
I wish that the response had offered a solution to the large arc problem of at least a direction towards a solution.
0
 
LVL 5

Expert Comment

by:y96andha
Comment Utility
What are you going to use the arcs for? I would have tried to create them myself, by plotting single pixels.
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

When designing a form there are several BorderStyles to choose from, all of which can be classified as either 'Fixed' or 'Sizable' and I'd guess that 'Fixed Single' or one of the other fixed types is the most popular choice. I assume it's the most p…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now