As Sergey Alyoshin wrote:

> I have done panelization with "RS-274X Merge (Gerber)..." which use
> merge_images().

I have been using it now in order to produce a large panel.

It's indeed a very nice option, thank you!

I have one suggestion: when merging the copper layers, gerbv suddenly
told me about being unable to rotate rectangular and oval shapes,
claiming the rotation angle would be non-multiple of 90 degrees (which
is basically impossible here).

This is due to the comparison of the double value trans->rotation
against absolute numbers.  Such comparison is valid for absolute
0.0 (which always has a well-defined binary represantation), but
it's error-prone for values like M_PI etc.

The following patch makes it work as intended:

diff --git a/src/gerb_image.c b/src/gerb_image.c
index 257f055..1436702 100644
--- a/src/gerb_image.c
+++ b/src/gerb_image.c
@@ -590,20 +590,16 @@ gerbv_image_copy_all_nets (gerbv_image_t *sourceImage,
                case GERBV_APTYPE_OVAL:
                        if (trans->scaleX == trans->scaleY
                        && trans->scaleX == 1.0
-                       && (fabs(trans->rotation) == M_PI
-                        || fabs(trans->rotation) == DEG2RAD(180)))
-                               break;  /* DEG2RAD for calc error */
+                       && (fabs(trans->rotation - M_PI) < 1E-6))
+                               break;
 
                        aper = gerbv_image_duplicate_aperture (
                                        destImage->aperture[newNet->aperture]);
                        aper->parameter[0] *= trans->scaleX;
                        aper->parameter[1] *= trans->scaleY;
 
-                       if (fabs(trans->rotation) == M_PI_2
-                        || fabs(trans->rotation) == DEG2RAD(90)
-                        || fabs(trans->rotation) == (M_PI+M_PI_2)
-                        || fabs(trans->rotation) == DEG2RAD(270)) {
-                                               /* DEG2RAD for calc error */
+                       if (fabs(trans->rotation - M_PI_2) < 1E-6
+                        || fabs(trans->rotation - (M_PI+M_PI_2)) < 1E-6) {
                                double t = aper->parameter[0];
                                aper->parameter[0] = aper->parameter[1];
                                aper->parameter[1] = t;


-- 
cheers, Joerg               .-.-.   --... ...--   -.. .  DL8DTL

http://www.sax.de/~joerg/
Never trust an operating system you don't have sources for. ;-)

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Gerbv-devel mailing list
Gerbv-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gerbv-devel

Reply via email to