Electronics & Programming

develissimo

Open Source electronics development and programming

  • You are not logged in.
  • Root
  • » KiCAD
  • » [Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output [RSS Feed]

#1 Dec. 6, 2010 21:15:42

Dick H.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

[Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output


On 12/06/2010 12:37 PM, Marco Mattila wrote:
> === modified file 'common/common_plotGERBER_functions.cpp'
> --- common/common_plotGERBER_functions.cpp 2010-11-12 16:36:43 +0000
> +++ common/common_plotGERBER_functions.cpp 2010-12-06 17:43:56 +0000
> @@ -504,3 +504,11 @@
> set_current_line_width( -1 );
> poly( 5, &polygon.x, aTrace_Mode==FILLED ? FILLED_SHAPE : NO_FILL );
> }
> +
> +void GERBER_PLOTTER::SetLayerPolarity( bool aPositive )
> +{
> + if( aPositive )
> + fprintf( output_file, "%%LPD*%%\n" );
> + else
> + fprintf( output_file, "%%LPC*%%\n" );
> +}
>
> === modified file 'include/plot_common.h'
> --- include/plot_common.h 2010-11-12 16:59:16 +0000
> +++ include/plot_common.h 2010-12-06 17:41:21 +0000
> @@ -169,6 +169,13 @@
> bool aBold );
> void marker( const wxPoint& position, int diametre, int
> aShapeId );
>
> + /** Function SetLayerPolarity
>


No, see the coding standard for proper formatting of the function header.



> + * sets current Gerber layer polarity to positive or negative
> + * by writing \%LPD*\% or \%LPC*\% to the Gerber file, respectively.
> + * param @aPositive = layer polarity, true for positive
> + */
> + virtual void SetLayerPolarity( bool aPositive ) = 0;
> +
> protected:
> /* These are marker subcomponents */
> void center_square( const wxPoint& position, int diametre,
> FILL_T fill );
> @@ -272,6 +279,8 @@
> virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners,
> int aPadOrient, GRTraceMode aTrace_Mode );
>
> + virtual void SetLayerPolarity( bool aPositive ) {};
> +
> protected:
> void pen_control( int plume );
>
> @@ -321,6 +330,8 @@
> virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners,
> int aPadOrient, GRTraceMode aTrace_Mode );
>
> + virtual void SetLayerPolarity( bool aPositive ) {};
> +
> protected:
> double plot_scale_adjX, plot_scale_adjY;
> };
> @@ -379,6 +390,8 @@
> virtual void flash_pad_trapez( wxPoint aPadPos,
> wxPoint aCorners,
> int aPadOrient,
> GRTraceMode aTrace_Mode );
>
> + virtual void SetLayerPolarity( bool aPositive );
> +
> protected:
> void select_aperture( const wxSize&
> size,
> APERTURE::Aperture_Type
> type );
> @@ -439,6 +452,8 @@
> virtual void flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners,
> int aPadOrient, GRTraceMode aTrace_Mode );
>
> + virtual void SetLayerPolarity( bool aPositive ) {};
> +
> protected:
> int current_color;
> };
>


_______________________________________________
Mailing list:https://launchpad.net/~kicad-developersPost to : kicad-developers@lists.launchpad.net
Unsubscribe :https://launchpad.net/~kicad-developersMore help :https://help.launchpad.net/ListHelp

Offline

#2 Dec. 6, 2010 22:20:22

Dick H.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

[Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output


Hi,
> Board manufacturers typically do not print silkscreen on areas without
> soldermask. Nevertheless, it would be nice to have proper gerbers to
> begin with, i.e., gerbers with no silkscreen in soldermaskless areas.
> Of course, most of the problem can be taken care of by drawing the
> footprints properly. However, sometimes the silkscreen of one
> footprint ends up on the pads of another one (think components under a
> so-dimm card, for example). The attached patch adds an option to
> subtract the soldermask from the silkscreen when doing gerber output.
>
> marco
>

Committed in version 2644.

Fixed in version 2645.

Fixes: function header, space above single line comments, expandable
dialog box problems.

Dick


_______________________________________________
Mailing list:https://launchpad.net/~kicad-developersPost to : kicad-developers@lists.launchpad.net
Unsubscribe :https://launchpad.net/~kicad-developersMore help :https://help.launchpad.net/ListHelp

Offline

#3 Dec. 6, 2010 22:49:08

Dick H.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

[Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output


On 12/06/2010 04:20 PM, Dick Hollenbeck wrote:
> Hi,
>
>> Board manufacturers typically do not print silkscreen on areas without
>> soldermask. Nevertheless, it would be nice to have proper gerbers to
>> begin with, i.e., gerbers with no silkscreen in soldermaskless areas.
>> Of course, most of the problem can be taken care of by drawing the
>> footprints properly. However, sometimes the silkscreen of one
>> footprint ends up on the pads of another one (think components under a
>> so-dimm card, for example). The attached patch adds an option to
>> subtract the soldermask from the silkscreen when doing gerber output.
>>
>> marco
>>
>>
> Committed in version 2644.
>
> Fixed in version 2645.
>
> Fixes: function header, space above single line comments, expandable
> dialog box problems.
>
> Dick
>

Marco,

Did you test the gerber output with gerbview?

I am not sure that gerbview can display a file created with the negative
layer.

If it cannot, I think we should reverse the default setting that you
chose, or I would ask you to see if you can patch gerbview. I think it
would be bad for pcbnew to generate a gerber that gerbview cannot display.

Thanks,

Dick


_______________________________________________
Mailing list:https://launchpad.net/~kicad-developersPost to : kicad-developers@lists.launchpad.net
Unsubscribe :https://launchpad.net/~kicad-developersMore help :https://help.launchpad.net/ListHelp

Offline

#4 Dec. 7, 2010 09:09:45

Marco M.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

[Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output


I tested the output with gerbview and gerbv. In gerbv everything's ok.
Now that I checked again with gerbview the negative layer kind of
works. However, since negative layers in gerbview are taken care of by
drawing them in background color, the negative stuff will be
"subtracted" from all layers below the negative layer. Fixing this
probably requires that the drawing of a layer is first done onto a
temporary device context/bitmap and blitting the result to the main
window. I can take a look at this. Anyways, the default value of
subtractMaskFromSilk can be changed to false.

By the way, there's still a problem with the function header in
plot_common.h. The third patch I submitted is correct, I think.

marco

On Tue, Dec 7, 2010 at 12:48 AM, Dick Hollenbeck <d***@*oftplc.com> wrote:
> On 12/06/2010 04:20 PM, Dick Hollenbeck wrote:
>> Hi,
>>
>>> Board manufacturers typically do not print silkscreen on areas without
>>> soldermask. Nevertheless, it would be nice to have proper gerbers to
>>> begin with, i.e., gerbers with no silkscreen in soldermaskless areas.
>>> Of course, most of the problem can be taken care of by drawing the
>>> footprints properly. However, sometimes the silkscreen of one
>>> footprint ends up on the pads of another one (think components under a
>>> so-dimm card, for example). The attached patch adds an option to
>>> subtract the soldermask from the silkscreen when doing gerber output.
>>>
>>> marco
>>>
>>>
>> Committed in version 2644.
>>
>> Fixed in version 2645.
>>
>> Fixes:  function header, space above single line comments, expandable
>> dialog box problems.
>>
>> Dick
>>
>
> Marco,
>
> Did you test the gerber output with gerbview?
>
> I am not sure that gerbview can display a file created with the negative
> layer.
>
> If it cannot, I think we should reverse the default setting that you
> chose, or I would ask you to see if you can patch gerbview.  I think it
> would be bad for pcbnew to generate a gerber that gerbview cannot display.
>
> Thanks,
>
> Dick
>
>
> _______________________________________________
> Mailing list:https://launchpad.net/~kicad-developers> Post to     : kicad-develop***@*ists.launchpad.net
> Unsubscribe :https://launchpad.net/~kicad-developers> More help   :https://help.launchpad.net/ListHelp>

_______________________________________________
Mailing list:https://launchpad.net/~kicad-developersPost to : kicad-developers@lists.launchpad.net
Unsubscribe :https://launchpad.net/~kicad-developersMore help :https://help.launchpad.net/ListHelp

Offline

#5 Dec. 7, 2010 14:41:43

Dick H.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

[Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output


On 12/07/2010 03:08 AM, Marco Mattila wrote:
> I tested the output with gerbview and gerbv. In gerbv everything's ok.
> Now that I checked again with gerbview the negative layer kind of
> works. However, since negative layers in gerbview are taken care of by
> drawing them in background color, the negative stuff will be
> "subtracted" from all layers below the negative layer. Fixing this
> probably requires that the drawing of a layer is first done onto a
> temporary device context/bitmap and blitting the result to the main
> window. I can take a look at this.

Just having a single bitmap will not change anything that I can see.
You did not mention having multiple layer specific bitmaps and then
doing combinational logic on their bits into a final destination. What
if you just draw the negative layer last onto the screen? Or is the
problem a matter of "looking ahead" to detect the negative layer before
beginning drawing? Is gerbview losing the "sequence" of operations
established in the gerber file? If so, the way the gerber file loading
takes place could be an issue, and the container that holds the drawing
primitives.


> Anyways, the default value of
> subtractMaskFromSilk can be changed to false.
>

I agree, but: at one time there were retentative preferences for all
these gerber output settings. I had at one time gone through and added
most if not all the settings to a "save to disk mechanism". I don't
know that I got all of them, and I don't know that some have been added
that recently that did not make it into that savable category.

You are familiar with this code now. It was 2 years since I looked at
it. It would be wonderful if we could save all the settings. The
non-conforming issue there is the layer choices, since they are board
specific. Most the other settings are not necessarily board specific.
I had once argued for putting more of these kinds of board specific
settings into the BOARD, but that was never truly fulfilled. When we
get to redoing the BOARD format, we should take a long hard look at this
again.


> By the way, there's still a problem with the function header in
> plot_common.h. The third patch I submitted is correct, I think.
>

I just saw that 3rd this morning, missed it yesterday because I reacted
to the original patch too quickly.

Thanks,

Dick


> marco
>
> On Tue, Dec 7, 2010 at 12:48 AM, Dick Hollenbeck <d***@*oftplc.com> wrote:
>
>> On 12/06/2010 04:20 PM, Dick Hollenbeck wrote:
>>
>>> Hi,
>>>
>>>
>>>> Board manufacturers typically do not print silkscreen on areas without
>>>> soldermask. Nevertheless, it would be nice to have proper gerbers to
>>>> begin with, i.e., gerbers with no silkscreen in soldermaskless areas.
>>>> Of course, most of the problem can be taken care of by drawing the
>>>> footprints properly. However, sometimes the silkscreen of one
>>>> footprint ends up on the pads of another one (think components under a
>>>> so-dimm card, for example). The attached patch adds an option to
>>>> subtract the soldermask from the silkscreen when doing gerber output.
>>>>
>>>> marco
>>>>
>>>>
>>>>
>>> Committed in version 2644.
>>>
>>> Fixed in version 2645.
>>>
>>> Fixes: function header, space above single line comments, expandable
>>> dialog box problems.
>>>
>>> Dick
>>>
>>>
>> Marco,
>>
>> Did you test the gerber output with gerbview?
>>
>> I am not sure that gerbview can display a file created with the negative
>> layer.
>>
>> If it cannot, I think we should reverse the default setting that you
>> chose, or I would ask you to see if you can patch gerbview. I think it
>> would be bad for pcbnew to generate a gerber that gerbview cannot display.
>>
>> Thanks,
>>
>> Dick
>>
>>
>> _______________________________________________
>> Mailing list:https://launchpad.net/~kicad-developers>> Post to : kicad-develop***@*ists.launchpad.net
>> Unsubscribe :https://launchpad.net/~kicad-developers>> More help :https://help.launchpad.net/ListHelp>>
>>
> _______________________________________________
> Mailing list:https://launchpad.net/~kicad-developers> Post to : kicad-develop***@*ists.launchpad.net
> Unsubscribe :https://launchpad.net/~kicad-developers> More help :https://help.launchpad.net/ListHelp>
>


_______________________________________________
Mailing list:https://launchpad.net/~kicad-developersPost to : kicad-developers@lists.launchpad.net
Unsubscribe :https://launchpad.net/~kicad-developersMore help :https://help.launchpad.net/ListHelp

Offline

#6 Dec. 7, 2010 16:41:24

Lorenzo M.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

[Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output


On Tue, 7 Dec 2010, Dick Hollenbeck wrote:On 12/07/2010 03:08 AM, Marco Mattila wrote:I tested the output with gerbview and gerbv. In gerbv everything's ok.
Now that I checked again with gerbview the negative layer kind of
works. However, since negative layers in gerbview are taken care of by
drawing them in background color, the negative stuff will be
"subtracted" from all layers below the negative layer. Fixing this
probably requires that the drawing of a layer is first done onto a
temporary device context/bitmap and blitting the result to the main
window. I can take a look at this.I'm not suprised. There are even fabs services which don't handle
negative layers out there... layers are an 'advanced' gerber feature (even if
it's in the standard!) and not everything handle them correctly. The
most portable way to subtract the pads from the silk is, indeed,
computing the subtraction in core and outputting only the remaing parts.
Which is, of course, a PITA (kbool would help and in facts it's very
similar to the clearance check in the DRC). Well, there is a whole
business in gerber postprocessors, there must be a reason for this :D

I am *expecting* problem using negative layer, but since it's an
optional feature I'd just say something like "warning: this function
need a complete gerber implementation and could fail with most other
ones out there :D"

--
Lorenzo Marcantonio
Logos Srl

_______________________________________________
Mailing list:https://launchpad.net/~kicad-developersPost to : kicad-developers@lists.launchpad.net
Unsubscribe :https://launchpad.net/~kicad-developersMore help :https://help.launchpad.net/ListHelp

Offline

#7 Dec. 7, 2010 17:36:36

jean-pierre c.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

[Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output


Le 07/12/2010 17:41, Lorenzo Marcantonio a écrit :On Tue, 7 Dec 2010, Dick Hollenbeck wrote:On 12/07/2010 03:08 AM, Marco Mattila wrote:I tested the output with gerbview and gerbv. In gerbv everything's ok.
Now that I checked again with gerbview the negative layer kind of
works. However, since negative layers in gerbview are taken care of by
drawing them in background color, the negative stuff will be
"subtracted" from all layers below the negative layer. Fixing this
probably requires that the drawing of a layer is first done onto a
temporary device context/bitmap and blitting the result to the main
window. I can take a look at this.I'm not suprised. There are even fabs services which don't handle
negative layers out there... layers are an 'advanced' gerber feature (even if
it's in the standard!) and not everything handle them correctly. The
most portable way to subtract the pads from the silk is, indeed,
computing the subtraction in core and outputting only the remaing parts.
Which is, of course, a PITA (kbool would help and in facts it's very
similar to the clearance check in the DRC). Well, there is a whole
business in gerber postprocessors, there must be a reason for this :D

I am *expecting* problem using negative layer, but since it's an
optional feature I'd just say something like "warning: this function
need a complete gerber implementation and could fail with most other
ones out there :D"First, note a layer in Gerber world have nothing to do with a board layer (the
near object is a Gerber image).

Now, Gerbview has a decent support of most of Gerber commands including
negative layers.
Only the obscure KNOCKOUT command is not handled.
So a better way to draw Gerber images when including negative objects is
welcome.And draw an image onto a memory bitmap and combining (ORing)the resulting bitmap with the screen bitmap (for each image) is anintersting approach.(Gerbv does a similar thing, but this is a feature supported by the graphic
library used by Gerbv)

Having said this, I am also thinking negative objects create problems in Gerber
software,
mainly for "DRC" at Gerber level that is very difficult if an image has
negative areas.

Therefore, for copper layers, negative objects are not used in Pcbnew.

Perhaps, this DRC problem is acceptable for technical layers like silk screen.Note also boost::polygon is used in Kicad and is more easy to use and faster than kbool in many cases (not all), and could replacekbool.--
Jean-Pierre CHARRAS


_______________________________________________
Mailing list:https://launchpad.net/~kicad-developersPost to : kicad-developers@lists.launchpad.net
Unsubscribe :https://launchpad.net/~kicad-developersMore help :https://help.launchpad.net/ListHelp

Offline

#8 Dec. 9, 2010 23:52:12

Marco M.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

[Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output


Drawing the negative layer last is not correct, since it erases
everything below the negative objects in all layers. The attached
patch seems to do the trick right. All layers (=layers as they are
seen in gerbview, not individual layers in a gerber file) are first
drawn into a bitmap and negative objects are drawn in background
color. Then the bitmap itself is used as a mask in blitting the bitmap
onto the screen.

marco

On Tue, Dec 7, 2010 at 4:41 PM, Dick Hollenbeck <d***@*oftplc.com> wrote:

> Just having a single bitmap will not change anything that I can see.
> You did not mention having multiple layer specific bitmaps and then
> doing combinational logic on their bits into a final destination.  What
> if you just draw the negative layer last onto the screen?  Or is the
> problem a matter of "looking ahead" to detect the negative layer before
> beginning drawing?  Is gerbview losing the "sequence" of operations
> established in the gerber file?  If so, the way the gerber file loading
> takes place could be an issue, and the container that holds the drawing
> primitives.
>=== modified file 'gerbview/draw_gerber_screen.cpp'
--- gerbview/draw_gerber_screen.cpp 2010-11-20 19:53:00 +0000
+++ gerbview/draw_gerber_screen.cpp 2010-12-09 23:37:14 +0000
@@ -103,6 +103,13 @@
{
// Because Images can be negative (i.e with background filled in color) items are drawn
// graphic layer per graphic layer, after the background is filled
+ int bitmapWidth, bitmapHeight;
+ wxMemoryDC memoryDC;
+ wxColour bgColor = MakeColour( g_DrawBgColor );
+ wxBrush bgBrush( bgColor, wxSOLID );
+ aPanel->GetClientSize( &bitmapWidth, &bitmapHeight );
+ wxBitmap layerBitmap( bitmapWidth, bitmapHeight );
+ memoryDC.SelectObject( layerBitmap );
for( int layer = 0; layer < 32; layer++ )
{
if( !GetBoard()->IsLayerVisible( layer ) )
@@ -111,6 +118,11 @@
if( gerber == NULL ) // Graphic layer not yet used
continue;

+ // Draw each layer into a bitmap first. Negative Gerber
+ // layers are drawn in background color.
+ memoryDC.SetBackground( bgBrush );
+ memoryDC.Clear();
+
/* Draw background negative (i.e. in graphic layer color) for negative images:
* Background is drawn here in GR_OR mode because in COPY mode
* all previous graphics will be erased
@@ -120,12 +132,12 @@
if( gerber->m_ImageNegative )
{
int color = GetBoard()->GetLayerColor( layer );
- GRSetDrawMode( aDC, GR_OR );
+ GRSetDrawMode( (wxDC*)&memoryDC, GR_OR );
EDA_Rect* cbox = &aPanel->m_ClipBox;
- GRSFilledRect( cbox, aDC, cbox->GetX(), cbox->GetY(),
+ GRSFilledRect( cbox, (wxDC*)&memoryDC, cbox->GetX(), cbox->GetY(),
cbox->GetRight(), cbox->GetBottom(),
0, color, color );
- GRSetDrawMode( aDC, aDrawMode );
+ GRSetDrawMode( (wxDC*)&memoryDC, aDrawMode );
}

int dcode_hightlight = 0;
@@ -135,13 +147,22 @@
for( ; item; item = item->Next() )
{
GERBER_DRAW_ITEM* gerb_item = (GERBER_DRAW_ITEM*) item;
- if( gerb_item->GetLayer()!= layer )
+ if( gerb_item->GetLayer() != layer )
continue;
int drawMode = aDrawMode;
if( dcode_hightlight == gerb_item->m_DCode )
drawMode |= GR_SURBRILL;
- gerb_item->Draw( aPanel, aDC, drawMode );
+ gerb_item->Draw( aPanel, (wxDC*)&memoryDC, drawMode );
}
+
+ // Use the layer bitmap itself as a mask when blitting.
+ // The bitmap cannot be referenced by a device context
+ // when setting the mask.
+ memoryDC.SelectObject( wxNullBitmap );
+ layerBitmap.SetMask( new wxMask( layerBitmap, bgColor ) );
+ memoryDC.SelectObject( layerBitmap );
+ aDC->Blit( 0, 0, bitmapWidth, bitmapHeight,
+ (wxDC*)&memoryDC, 0, 0, wxCOPY, true );
}

m_PcbFrame->GetScreen()->ClrRefreshReq();_______________________________________________
Mailing list:https://launchpad.net/~kicad-developersPost to : kicad-developers@lists.launchpad.net
Unsubscribe :https://launchpad.net/~kicad-developersMore help :https://help.launchpad.net/ListHelp

Offline

#9 Dec. 10, 2010 14:41:03

Dick H.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

[Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output


On 12/09/2010 05:51 PM, Marco Mattila wrote:
> Drawing the negative layer last is not correct, since it erases
> everything below the negative objects in all layers. The attached
> patch seems to do the trick right. All layers (=layers as they are
> seen in gerbview, not individual layers in a gerber file) are first
> drawn into a bitmap and negative objects are drawn in background
> color. Then the bitmap itself is used as a mask in blitting the bitmap
> onto the screen.
>
> marco
>

I should be able to get a look at this over the weekend.

Dick




_______________________________________________
Mailing list:https://launchpad.net/~kicad-developersPost to : kicad-developers@lists.launchpad.net
Unsubscribe :https://launchpad.net/~kicad-developersMore help :https://help.launchpad.net/ListHelp

Offline

#10 Dec. 10, 2010 16:16:11

j.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

[Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output


Le 10/12/2010 15:37, Dick Hollenbeck a écrit :On 12/09/2010 05:51 PM, Marco Mattila wrote:Drawing the negative layer last is not correct, since it erases
everything below the negative objects in all layers. The attached
patch seems to do the trick right. All layers (=layers as they are
seen in gerbview, not individual layers in a gerber file) are first
drawn into a bitmap and negative objects are drawn in background
color. Then the bitmap itself is used as a mask in blitting the bitmap
onto the screen.

marcoI should be able to get a look at this over the weekend.

DickI just tried it (but not tested it very well):
Seems work when compiled with option USE_WX_ZOOM=OFF
But does not draw anything when using USE_WX_ZOOM=ON
(at least under Windows, I did not have the time to tried it under Linux)


--
Jean-Pierre CHARRAS
KiCad Developers team.
KiCad Developers <kicad-develop***@*ists.launchpad.net>

_______________________________________________
Mailing list:https://launchpad.net/~kicad-developersPost to : kicad-developers@lists.launchpad.net
Unsubscribe :https://launchpad.net/~kicad-developersMore help :https://help.launchpad.net/ListHelp

Offline

  • Root
  • » KiCAD
  • » [Kicad-developers] [PATCH] Option to subtract soldermask from silkscreen in gerber output [RSS Feed]

Board footer

Moderator control

Enjoy the 17th of August
PoweredBy

The Forums are managed by develissimo stuff members, if you find any issues or misplaced content please help us to fix it. Thank you! Tell us via Contact Options
Leave a Message
Welcome to Develissimo Live Support