Coders and programmers page HGB^

I program CiDess with Visual Basic 5. In this page I give you some source files, and I describe file formats used by CiDess to record data.

The GIF saving procedures uses source code written by Arkadiy Olovyannikov (ark@fesma.ru).

LNG editor source code
CiDess file formats
        *.CID files
        *.CID V2 files
        *.CIT files
        CiDess.DAT file
        CiDess.DIP file
        CiDess.LND file
        CiDess.LND V2 file
        CiDess.LND V3 file
        CiDess.WSP file
        *.BMP.TXT files
        *.MAC files
        *.OUT files
        *CiDess.USI file
3D view utility source code

 LNG editor source code HGB<>^

The software that I created to translate CiDess allows you to add easily a multilanguage facility to an existing VB project.

There are two versions of the LNG editor:
- a complete version for programmers
- a simple version for translators

Complete version allows you to implement the multilanguage function to your program.

Single version (it's the version available in the translators page), allows translators, even if they don't have programming skills, to translate a software.

Clic here to download the LNG editor source code and executable files (last update: 22/12/2014).

Unzip the file in any directory of your choice; all the explanations are in _LisezMoi.html and _ReadMe.html files.

 CiDess file formats HGB<>^

! I give you this information to allow you reading and writing CiDess files in your own applications.
Do not try to modify CiDess files with a text editor. It can cause CiDess malfunction. If one of your file is corrupted, do not try to repair it by yourself but download it.
I suggest you create a second installation of CiDess for your experiments.

        *.CID file format
        *.CID V2 file format
        *.CIT file format
        CiDess.DAT file
        CiDess.DIP file
        CiDess.LND file
        CiDess.LND V2 file
        CiDess.LND V3 file
        CiDess.WSP file
        Fichiers *.BMP.TXT
        *.MAC files
        *.OUT files
        *CiDess.USI file

CID File format HGB<>^

This file format is used by CiDess and CiDess 2.

PCB are saved in *.CID file format.

CID file format:

Black text is constant string
Blue text is multiline string
Green text is formatted string
Red text is integer value

"CIDESS","CID",CID_Format_Version
Author_Length

Author
Mail_Length
Mail
Organisation_Length
Organisation
URL_Length
URL
Adress_Length
Adress
Project_Name_Length
Project_Name
Circuit_Name_Length
Circuit_Name
Date_Length
Date
Version_Length
Version
Nomenclature_Comments_Length
Nomenclature_Comments
PCB_Comments_Length
PCB_Comments
Realisation_Comments_Length
Realisation_Comments
Total_Size_X,Total_Size_Y
Left_Margin,Top_Margin,Right_Margin,Bottom_Margin
Number_of_Components
Component1_Category_FR,Component1_ID_FR
Component1_X1,Component1_Y1
Component1_X2,Component1_Y2
Component1_Angle
Component1_Side

Component1_Ref
Component1_Value

Component1_Pad_Coef
... Idem for each component ...
Number_Of_Tracks
Track1_Width
Track1_Side
Track1_Number_of_nodes
Track1_Node1_X
,Track1_Node1_Y
... Idem for each node ...
... Idem for each track ...



Some explanations:

Size in file corresponds to total size that is to say PCB size + margins.

French category and ID are used as data key. There is no problem with monolingual component types.

Component's side could take four different values. See the following picture:


Track's side could take only two values: 1 or 2. In the previous picture, a side 1 track will be black, a side 2 track light blue.

In a single side PCB, there a only 1, 2 or 4 sided components and all track are in side 1.

Normal component's position is define by center coordinates X1,Y1 and the angle. X2,Y2 are not used and may be null.
Stretchable component's position is define by each pad's coordinates, X1,Y1,X2,Y2. Angle is not used and may be null.
The coordinates are relative to the top left corner of the PCB (without margins). Y axis is oriented to the bottom of the screen.

A 1000 pad coefficient means a 100% size.

Units are in mil (1 mil = 0.001 inch = 0.0254 mm)

Let's see an example:



This file is made up of:
- a capacitor C1 with 150% pads
- a stretchable resistance R1
- a transistor T1 copper side mounted
- a CMS IC IC1 component side mounted
- a CMS IC IC2 copper side mounted
- a CMS IC IC3 with a 30 rotation angle
- a track side 1
- a track side 2

"CIDESS","CID",1
10
Rémy LUCAS
0

0

28
http://www.remylucas.fr
14
25000 Besançon
28
Projet exemples pour le site
22
Exemple de fichier CID
10
12/09/2005
3
1.1
101
Procurez vous les composants avant de réaliser la carte.

Vous aurez peut être à modifier le typon.
102
Commencez par les straps, ensuite les résistances, condensateurs, et terminez par les semiconducteurs.
39
Utilisez de préférence la photogravure.
2500,1500
300,200,400,250
6
"Condos radiaux","d500 e200"
600,500
0,0
0
1
"C1"
"220f"
1500
"Resistances","h250 d90"
1050,500
1500,900
0
1
"R1"
"4,7K"
1000
"SOIC","DIL 10"
1850,550
0,0
0
3
"IC1"
""
1000
"SOIC","DIL 10"
1850,900
0,0
360
4
"IC2"
""
1000
"SOIC","DIL 10"
1050,950
0,0
30
3
"IC3"
""
1000
"Actifs 3 pins debouts","TO5"
600,1000
0,1400
0
2
"T1"
"2N1711"
1000
2
50
1
2
700,500
1050,500
30
2
3
1750,450
1100,450
1050,500


CID V2 File format HGB<>^

This file format is used by CiDess III.

PCB are saved in *.CID file format.

A CID V2 file is a CID V1 file following with extra data (due to new functions)

CID file format:

Black text is constant string
Blue text is multiline string
Green text is formatted string
Red text is integer value
Violet text is boolean value

"CIDESS","CID",CID_Format_Version
Author_Length

Author
Mail_Length
Mail
Organisation_Length
Organisation
URL_Length
URL
Adress_Length
Adress
Project_Name_Length
Project_Name
Circuit_Name_Length
Circuit_Name
Date_Length
Date
Version_Length
Version
Nomenclature_Comments_Length
Nomenclature_Comments
PCB_Comments_Length
PCB_Comments
Realisation_Comments_Length
Realisation_Comments
Total_Size_X,Total_Size_Y
Left_Margin,Top_Margin,Right_Margin,Bottom_Margin
Number_of_Components
Component1_Category_FR,Component1_ID_FR
Component1_X1,Component1_Y1
Component1_X2,Component1_Y2
Component1_Angle
Component1_Side

Component1_Ref
Component1_Value

Component1_Pad_Coef
... Idem for each component ...
Number_Of_Tracks
Track1_Width
Track1_Side
Track1_Number_of_nodes
Track1_Node1_X
,Track1_Node1_Y
... Idem for each node ...
... Idem for each track ...
Number_of_CopperTexts
CopperText1_FontName
CopperText1_FontSize
CopperText1_FontBold
CopperText1_FontItalic
CopperText1_FontStrikethru
CopperText1_FontUnderline
CopperText1_FTransparent

CopperText1_X
CopperText1_Y
CopperText1_Angle
CopperText1_Face

CopperText1_Split
CopperText1_Text_Lenght
CopperText1_Text
CopperText1_Link
... idem for each CopperText ...
HTML_GeneralInfo_Chk_Projet
HTML_GeneralInfo_Chk_Carte
HTML_GeneralInfo_Chk_Date
HTML_GeneralInfo_Chk_Version
HTML_GeneralInfo_Chk_Auteur
HTML_GeneralInfo_Chk_Organisation
HTML_GeneralInfo_Chk_Coordonnees
HTML_GeneralInfo_Chk_Mail
HTML_GeneralInfo_Chk_www
HTML_Chk_Schematic
HTML_Schematic_Chk_PreviewPict

HTML_Schematic_PreviewFileName
HTML_Schematic_Chk_Pict
HTML_Schematic_PictFileName
HTML_Schematic_NoComment
HTML_Schematic_CommentInFile
HTML_Schematic_TextComment

HTML_Schematic_CommentFileName
HTML_Schematic_CommentTextLenght
HTML_Schematic_CommentText
HTML_Chk_Layout
HTML_Layout_Chk_Comment
HTML_Layout_Chk_PreviewPict
HTML_Layout_Chk_Pict
HTML_Layout_ZoomPreview
HTML_Layout_ZoomPict
HTML_Layout_Rotation

HTML_Layout_NormalStyle
HTML_Layout_WYSIWYG

HTML_Layout_Chk_CU1
HTML_Layout_Chk_CU2
HTML_Layout_Chk_SOL
HTML_Layout_Chk_Grid
HTML_Layout_Chk_TXT
HTML_Layout_Chk_TxtRef
HTML_Layout_Chk_TxtVal
HTML_Layout_Chk_TxtWhiteBackground
HTML_Layout_TxtSize
HTML_Layout_Chk_PreviewOtherPict1

HTML_Layout_PreviewOtherPict1_FileName
HTML_Layout_OtherPict1
HTML_Layout_OtherPict1_FileName
HTML_Layout_PreviewOtherPict2
HTML_Layout_PreviewOtherPict2_FileName
HTML_Layout_OtherPict2
HTML_Layout_OtherPict2_FileName
HTML_Chk_ComponentList
HTML_ComponentList_Chk_List
HTML_ComponentList_Chk_Comment
HTML_Chk_PCB
HTML_PCB_Chk_Comment
HTML_PCB_Chk_Side1
HTML_PCB_Chk_Side2
HTML_PCB_Chk_Preview
HTML_PCB_Chk_Pict
HTML_PCB_ZoomPreview
HTML_PCB_ZoomPict
HTML_PCB_Rotation

HTML_PCB_Normal
HTML_PCB_Mirror

HTML_Typon_PadCoef
HTML_PCB_TrackCoef
HTML_PCB_Chk_CMSneverDrilled

HTML_PCB_NormalEtching
HTML_PCB_GroundPlaneEtching
HTML_PCB_WhiteLineEtching
HTML_PCB_CopperTextNormal
HTML_PCB_CopperTextNegative

HTML_PCBGroundplaneWidth
HTML_Chk_Download
HTML_Download_Chk_CID
HTML_Download_Chk_CIT
HTML_Download_Chk_OtherFile1

HTML_Download_OtherFile1_FilenName
HTML_Download_Chk_OtherFile2
HTML_Download_OtherFile2_FilenName
HTML_Download_Chk_Comment
HTML_Download_CommentLenght

HTML_Download_Comment
HTML_Root
HTML_Path

HTML_Chk_CreateSubFolder
ExtraString_Lenght
ExtraString


Some explanations:

Size in file corresponds to total size that is to say PCB size + margins.

French category and ID are used as data key. There is no problem with monolingual component types.

Component's side could take four different values. See the following picture:


Track's side could take only two values: 1 or 2. In the previous picture, a side 1 track will be black, a side 2 track light blue.

Copper text's side could take three values: 1 (CU1), 2 (CU2) and 3 (both CU1 and CU2). A copper text with side = 1 should be black on previous picture.

If Split = true, the text is mirrored; you can read a copper text on side CU1 on the other side through the PCB.

In a single side PCB, there a only 1, 2 or 4 sided components and all track and copper texts are in side 1.

Normal component's position is define by center coordinates X1,Y1 and the angle. X2,Y2 are not used and may be null.
Stretchable component's position is define by each pad's coordinates, X1,Y1,X2,Y2. Angle is not used et may be null.
The coordinates are relative to the top left corner of the PCB (without margins). Y axis is oriented to the bottom of the screen.

A 1000 pad coefficient means a 100% size.

Units are in mil (1 mil = 0.001 inch = 0.0254 mm)

Data that begin with "HTML_" are the backup of HTML documentation settings:

        - HTML_xxx_Chk_yyy save a yyy checkbox value (1 = checked, 0 = unchecked) of the xxx section

        - HTML_Chk_xxx equals "1" (checked) if the section xxx is selected by the user for HTML generation

        - One of the three parameters HTML_Schematic_NoComment, HTML_Schematic_CommentInFile or HTML_Schematic_TextComment must be true, the two other false

        - One of the two parameters HTML_PCB_Normal, HTML_PCB_Mirror must be true, the other false

        - One of the three parameters HTML_PCB_NormalEtching, HTML_PCB_GroundPlaneEtching or HTML_PCB_WhiteLineEtching must be true, the two other false

        - One of the two parameters HTML_PCB_CopperTextNormal, HTML_PCB_CopperTextNegative must be true, the other false

        - One of the two parameters HTML_Layout_NormalStyle, HTML_Layout_WYSIWYG must be true, the other false

        - Possible values for the parameters that corresponds to listindex or scrollbars value:

HTML_Layout_ZoomPreview
Value in CID fileSetting in CiDess
0x0.25
1x0.50
2x0.75
3x1
4x2
5x3
6x4
7x5
8x6
9x7
10x8
11x9
12x10

HTML_Layout_ZoomPict
Value in CID fileSetting in CiDess
0x1
1x2
2x3
3x4
4x5
5x6
6x7
7x8
8x9
9x10

HTML_Layout_TxtSize
Value in CID fileSetting in CiDess
04 points
15 points
26 points
37 points
48 points
59 points
610 points
711 points
812 points

HTML_Layout_Rotation
Value in CID fileSetting in CiDess
00
190
2180
3270

HTML_PCB_ZoomPreview
Value in CID fileSetting in CiDess
0x0.254
1x0.5
2x0.75
3x1
4x2
5x3
6x4
7x5
8x6
9x7
10x8
11x9
12x10

HTML_PCB_ZoomPict
Value in CID fileSetting in CiDess
0x1
1x2
2x3
3x4
4x5
5x6
6x7
7x8
8x9
9x10

HTML_PCB_Rotation
Value in CID fileSetting in CiDess
00
190
2180
3270

        - HTML_PCB_PadCoef is the pad width coefficient from 50 to 200 (100 means 100%)

        - HTML_PCB_TrackCoef is the track width coefficient from 50 to 200 (100 means 100%)

        - HTML_PCBGroundPlaneWidth should be between 10 and 50

        - According to the settings chosen, some parameters aren't used for HTML documentation, but a value can enter a value. Those data will be preserved and used when user chose appropriate settings.

The ExtraString data is not used by CiDess. It's read when you open a file, and record 'as is' when you save the file. I plan this data area for future CiDess' optional updates; so users doesn't have to update their version and CID files will worked correctly without data loss on CiDess III. Indeed, other software authors work with me to make their software compatible with CiDess. I'll fix some rule about the use of ExtraString; please contact me.

Let's see an example:



This file is made up of:
- a capacitor C1 with 150% pads
- a stretchable resistance R1
- a transistor T1 copper side mounted
- a CMS IC IC1 component side mounted
- a CMS IC IC2 copper side mounted
- a CMS IC IC3 with a 30 rotation angle
- a track side 1
- a track side 2
- a copper text side 1
- a copper text side 2

"CIDESS","CID",2
10
Rémy LUCAS
29
electroremy@electroremy.fr.st
0

28
http://www.electroremy.fr.st
14
25000 Besançon
28
Projet exemples pour le site
22
Exemple de fichier CID
10
01/04/2008
3
1.1
101
Procurez vous les composants avant de réaliser la carte.

Vous aurez peut être à modifier le typon.
102
Commencez par les straps, ensuite les résistances, condensateurs, et terminez par les semiconducteurs.
39
Utilisez de préférence la photogravure.
2900,1500
200,200,300,250
6
"Condos radiaux","d500 e200"
500,500
0,0
0
1
"C1"
"220f"
1500
"SOIC","DIL 10"
1750,550
0,0
0
3
"IC1"
""
1000
"SOIC","DIL 10"
1750,900
0,0
360
4
"IC2"
""
1000
"SOIC","DIL 10"
950,950
0,0
30
3
"IC3"
""
1000
"Actifs 3 pins debouts","TO5"
500,1000
0,1400
0
2
"T1"
"2N1711"
1000
"Resistances","h250 d90"
1425,900
975,500
0
1
"R1"
"4,7K"
1000
2
50
1
2
600,500
950,500
30
2
3
1650,450
1000,450
950,500
2
"Arial"
15
#FALSE#
#FALSE#
#FALSE#
#FALSE#
#TRUE#
2150
350
15
1
#FALSE#
9
Texte CU1
8
"Arial"
18
#TRUE#
#FALSE#
#FALSE#
#TRUE#
#TRUE#
2200
850
135
2
#FALSE#
13
Texte CU2 Inv
8
1
1
1
1
1
1
1
1
1
0
1
""
1
""
#FALSE#
#FALSE#
#TRUE#
""
0

1
1
1
1
3
1
0
#TRUE#
#FALSE#
1
1
1
0
1
1
0
1
4
0
""
0
""
0
""
0
""
1
1
1
1
1
1
1
1
1
3
3
0
#TRUE#
#FALSE#
100
100
0
#TRUE#
#FALSE#
#FALSE#
#TRUE#
#FALSE#
20
1
1
1
0
""
0
""
0
0

""
""
1
0


CIT File format HGB<>^

Component types are saved in *.CIT file format.

CIT File format:

Black text is constant string
Green text is formatted string
Red text is integer value
Purple text is boolean value

"CIDESS","CIT",CIT_Format_Version
Number_of_component_types

Category_FR,ID_FR,Category_EN,ID_EN,Strechable
Number_of_solids
Solid_type
,Center_X,Center_Y,Center_Z,Size_X,Size_Y,Size_Z,Angle,3D_Color
... Idem for each solid ...
Number_of_pads
Pad_type
,Pad_diameter,Hole_diameter,Center_X,Center_Y
... Idem for each pad ...
Number_of_pins
Pad_number
,X,Y,Z
... Idem for each pin ...
... Idem for each component type

Some explanations:

Units are in mil (1 mil = 0.001 inch = 0.0254 mm)

Possible values for Solid_type:

Solid_type
In fileIn CiDess
0Cube
1Lying cylinder
2Standing cylinder
3Standing torus
4Lying torus
5Line
6Cross
7Circle

Possible values for Pad_type:

Pad_type
In fileIn CiDess
0Round
1Drilled round
2Square
3Drilled square
4Rectangular H
5Drilled Rectangular H
6Rectangular V
7Drilled Rectangular V

Coordinates define the attach point of a pin on the component.

A stretchable component type:
- must have exactly two pads
- pads' coordinates x,y are not used

The Z coordinate of a solid corresponds to the coordinate of the center of the solid, unlike in the component type editor where Z corresponds to the distance between the solid and the PCB card.

Let's see an example:

This sample file is made up of the three following component types:







"CIDESS","CIT",1
3
"d400 e200","Condos radiaux","d400 e200","Radial caps",#FALSE#
4
2,0,0,525,400,400,650,0,13210
2,0,0,150,350,350,100,0,4970
2,0,0,50,400,400,100,0,13210
6,-50,-100,0,100,100,0,0,0
2
1,80,26,-100,0
1,80,26,100,0
0
"h250 d90","Resistances","h250 d90","Resistances",#TRUE#
1
1,0,0,45,250,90,90,0,9211135
2
1,80,26,-700,0
1,80,26,700,0
2
1,-125,0,45
2,125,0,45
"M6","Vis","M6","Screw",#FALSE#
9
2,0,0,98,394,394,197,0,10066329
5,0,171,0,197,0,0,0,0
5,148,85,0,-98,171,0,0,0
5,148,-85,0,98,171,0,0,0
5,0,-171,0,-197,0,0,0,0
5,-148,85,0,98,171,0,0,0
5,-148,-85,0,-98,171,0,0,0
5,39,0,0,0,341,0,0,0
5,-39,0,0,0,341,0,0,0
1
1,236,118,0,0
0


CiDess.DAT File HGB<>^

CiDess.DAT file includes CiDess featured component types.

CiDess.DAT has the same file format than a CIT file, however the first line is different:
"CIDESS","DAT",... instead of "CIDESS","CIT",....

! Do not modify CiDess.dat file; your version of CiDess will be incompatible with the original software.
When I propose new versions of CiDess.dat, I only add new component types without changing any existing component type.
CiDess.exe checks CiDess.dat integrity at each boot.

CiDess.DIP File HGB<>^

CiDess.DIP contains your default values for extra PCB information and comments.

CiDess.DIP file format:

Black text is constant string
Blue text is multiline string
Red text is integer value

"CIDESS","DIP",DIP_Format_Version
Author_Length

Author
Mail_Length
Mail
Organisation_Length
Organisation
URL_Length
URL
Adress_Length
Adress
Project_Name_Length
Project_Name
Circuit_Name_Length
Circuit_Name
Date_Length
Date
Version_Length
Version
Nomenclature_Comments_Length
Nomenclature_Comments
PCB_Comments_Length
PCB_Comments
Realisation_Comments_Length
Realisation_Comments

Let's see an example:

"CIDESS","DIP",1
10
Rémy LUCAS
0

0

28
http://www.remylucas.fr
0

0

0

0

1
1
101
Procurez vous les composants avant de réaliser la carte.

Vous aurez peut être à modifier le typon.
102
Commencez par les straps, ensuite les résistances, condensateurs, et terminez par les semiconducteurs.
39
Utilisez de préférence la photogravure.


CiDess.LND File HGB<>^

This file format is used by CiDess and CiDess 2.

CiDess.LND contains your CiDess display parameters.

CiDess.LND file format:

Black text is constant string
Blue text is multiline string
Green text is formatted string
Red text is integer value
Purple text is boolean value

"CIDESS","LND",LND_Format_Version
LNG_filename
Mouse's_lines
Tolerance
Use_zoom_for_preview
CU1_Layer_visible
CU2_Layer_visible
SOL_Layer_visible
TXT_Layer_visible

Disp_text
Text_size
White_text_background
Zoom
Grid
Show_dot_grid


Some explanations:

Here is the meaning of CiDess.LND values:

Tolerance
In CiDess.LND fileIn CiDess software
0None
110 mil
250 mil
3100 mil

Disp_text
In CiDess.LND fileIn CiDess software
0Name and value
1Name
2Value

Zoom
In CiDess.LND fileIn CiDess software
0x 1
1x 2
2x 5
3x 10

Grid
In CiDess.LND fileIn CiDess software
0100 mil
150 mil
210 mil
35 mil
41 mil
51 mm
60,1 mm

Text_size is an integer value from 4 to 12.

Let's see an example:

"CIDESS","LND",1
"CiDessFR.LNG"
#TRUE#
2
#FALSE#
#TRUE#
#TRUE#
#TRUE#
#TRUE#
0
10
#TRUE#
0
1
#TRUE#


CiDess.LND V2 File HGB<>^

This file format is used by CiDess III.

CiDess.LND contains your CiDess display parameters.

CiDess.LND file format:

Black text is constant string
Green text is formatted string
Red text is integer value
Blue text is single value
Orange text is long value

"CIDESS","LND",LND_Format_Version
LNG_filename
Mouse's_lines
Tolerance
Use_zoom_for_preview
CU1_Layer_visible
CU2_Layer_visible
SOL_Layer_visible
TXT_Layer_visible

Disp_text
Text_size
White_text_background
Zoom
Grid
Show_dot_grid
CoefZoom1
AutoDateUpdate
AlwaysDisplayNoSplittedCopperText

Disp_solid
ColLayer(0)
ColLayerSel(0)
PrtColLayerC(0)
PrtColLayerNB(0)
ColLayer(1)
ColLayerSel(1)
PrtColLayerC(1)
PrtColLayerNB(1)
ColLayer(2)
ColLayerSel(2)
PrtColLayerC(2)
PrtColLayerNB(2)
ColLayer(3)
ColLayerSel(3)
PrtColLayerC(3)
PrtColLayerNB(3)
ColLayer(4)
ColLayerSel(4)
PrtColLayerC(4)
PrtColLayerNB(4)
ColBackCi
ColRectCi
ColMarginCi
ColForbZ
ColLayerBack
ColGrid

AutomaticCompoNameIncr
CustomGrid
DisplayGrid


Some explanations:

Here is the meaning of CiDess.LND values:

Tolerance
In CiDess.LND fileIn CiDess software
0None
110 mil
250 mil
3100 mil

Disp_text
In CiDess.LND fileIn CiDess software
0Name and value
1Name
2Value

Zoom
In CiDess.LND fileIn CiDess software
0x 1
1x 2
2x 5
3x 10

Grid
In CiDess.LND fileIn CiDess software
0100 mil
150 mil
210 mil
35 mil
41 mil
51 mm
60,1 mm
7Custom

Disp_solid
In CiDess.LND fileIn CiDess software
0All
1Side 1
2Side 2

Text_size is an integer value from 4 to 12.

CoefZoom1 is the number of pixel per unit (screen display scale). Default value is 0,12

ColLayer(i): Objects colors on screen
ColLayerSel(i): Selected objects colors on screen
PrtColLayerC(i): Objects colors on printer
PrtColLayerNB(i): colors used for black and white printing

i value
ilayer
0copper 1
1copper 2
2solid
3text
4copper 1 and copper 2

ColBackCi: Background color
ColRectCi: PCB bordure line
ColMarginCi: PCB's margin color
ColForbZ: color outside PCB and PCB's margin
ColLayerBack: CU1 / CU2 / SOL / TXT text color in toolbar
ColGrid: Dot grid color

A color is a long value = red + green * 255 + blue * 65536, with red, green and blue as integer value from 0 to 255 (in fact, red, green and blue are byte value).

CustomGrid and DisplayGrid are single values in mil.

Let's see an example:

"CIDESS","LND",2
"CiDessEN.LNG"
#TRUE#
2
#TRUE#
#TRUE#
#TRUE#
#TRUE#
#TRUE#
0
8
#FALSE#
0
1
#TRUE#
.12
#TRUE#
#FALSE#
0
0
8421504
12895428
12895428
16744448
16760960
16761984
8421504
255
8421631
255
0
51200
8454016
65280
0
16711680
16744576
14795938
10658466
16777215
16711880
16774650
0
16777215
0
#TRUE#
70.86614
141.7323


CiDess.LND V3 File HGB<>^

This file format is used by CiDess 4.

CiDess.LND contains your CiDess display parameters.

CiDess.LND file format:

Black text is constant string
Green text is formatted string
Red text is integer value
Blue text is single value
Orange text is long value
Purple text is boolean value

"CIDESS","LND",LND_Format_Version
LNG_filename
Mouse's_lines
Tolerance
Use_zoom_for_preview
CU1_Layer_visible
CU2_Layer_visible
SOL_Layer_visible
TXT_Layer_visible

Disp_text
Text_size
White_text_background
Zoom
Grid
Show_dot_grid
CoefZoom1
AutoDateUpdate
AlwaysDisplayNoSplittedCopperText

Disp_solid
ColLayer(0)
ColLayerSel(0)
PrtColLayerC(0)
PrtColLayerNB(0)
ColLayer(1)
ColLayerSel(1)
PrtColLayerC(1)
PrtColLayerNB(1)
ColLayer(2)
ColLayerSel(2)
PrtColLayerC(2)
PrtColLayerNB(2)
ColLayer(3)
ColLayerSel(3)
PrtColLayerC(3)
PrtColLayerNB(3)
ColLayer(4)
ColLayerSel(4)
PrtColLayerC(4)
PrtColLayerNB(4)
ColBackCi
ColRectCi
ColMarginCi
ColForbZ
ColLayerBack
ColGrid

AutomaticCompoNameIncr
CustomGrid
DisplayGrid
CoulCuDetoure
CoulCuGrave
CoulCuIntact
CoulPercage
CoulG54Axis
CoulG54Pad1
CoulG54Pad2

Some explanations:

Here is the meaning of CiDess.LND values:

Tolerance
In CiDess.LND fileIn CiDess software
0None
110 mil
250 mil
3100 mil

Disp_text
In CiDess.LND fileIn CiDess software
0Name and value
1Name
2Value

Zoom
In CiDess.LND fileIn CiDess software
0x 1
1x 2
2x 5
3x 10

Grid
In CiDess.LND fileIn CiDess software
0100 mil
150 mil
210 mil
35 mil
41 mil
51 mm
60,1 mm
7Custom

Disp_solid
In CiDess.LND fileIn CiDess software
0All
1Side 1
2Side 2

Text_size is an integer value from 4 to 12.

CoefZoom1 is the number of pixel per unit (screen display scale). Default value is 0,12

ColLayer(i): Objects colors on screen
ColLayerSel(i): Selected objects colors on screen
PrtColLayerC(i): Objects colors on printer
PrtColLayerNB(i): colors used for black and white printing
CoulCuDetoure: deep-etched objects' color in the BMP picture for CNC milling
CoulCuGrave: etched objects' color in the BMP picture for CNC milling
CoulCuIntact: background color in the BMP picture for CNC milling (copper that shouldn't be etched)
CoulPercage: holes' color in the BMP picture for CNC milling

CoulG54Axis, CoulG54Pad1 and CoulG54Pad2 are used to select CNC machine's axis location for PCB drilling with a CNC machine. These colors have to be clearly different from each other and form ColLayers() colors for CU1 and CU2.

i value
ilayer
0copper 1
1copper 2
2solid
3text
4copper 1 and copper 2

ColBackCi: Background color
ColRectCi: PCB bordure line
ColMarginCi: PCB's margin color
ColForbZ: color outside PCB and PCB's margin
ColLayerBack: CU1 / CU2 / SOL / TXT text color in toolbar
ColGrid: Dot grid color

A color is a long value = red + green * 255 + blue * 65536, with red, green and blue as integer value from 0 to 255 (in fact, red, green and blue are byte value).

CustomGrid and DisplayGrid are single values in mil.

Let's see an example:

"CIDESS","LND",3
"CiDessEN.LNG"
#TRUE#
2
#TRUE#
#TRUE#
#TRUE#
#TRUE#
#TRUE#
0
8
#FALSE#
0
1
#TRUE#
.12
#TRUE#
#FALSE#
0
0
8421504
12895428
12895428
16744448
16760960
16761984
8421504
255
8421631
255
0
51200
8454016
65280
0
16711680
16744576
14795938
10658466
16777215
16711880
16774650
0
16777215
0
#TRUE#
70.86614
141.7323
16728064
0
16777215
255
16711935
41215
16711935


CiDess.WSP File HGB<>^

This file is used by CiDess III.

CiDess.WSP contains your CiDess display area parameters.

CiDess.WSP file format:

Black text is constant string
Red text is integer value
Blue text is double value

"CIDESS","WSP",WSP_Format_Version
Mode
AreaLeft
AreaTop
AreaWidth
AreaHeight


AreaLeft and AreaTop define left top corner of the custom area, in twips.
AreaWidth and AreaHeight define custom area size in twips.

Mode
In CiDess.WSP fileIn CiDess software
1Whole screen
2Whole work Area
3Custom

Let's see an example:

"CIDESS","WSP",1
2
360
660
12000
9660


*.BMP.TXT File format HGB<>^

This file is used by CiDess 4.

When you create a BMP picture for CNC milling software, CiDess allows you to create an extra info file, with the same filename but with .BMP.TXT extension. This extra file contains usefull data for the BMP picture file usage with other software.

"BTP4M" software is able to read the .BMP and .BMP.TXT files together.

*.BMP.TXT file format:

Black text is constant string
Green text is formatted string
Red text is integer value
Blue text is single value
Orange text is long value
Purple text is boolean value

"CIDESS",".BMP.TXT",BMPTXT_FileFormat_Version
"Face",Side
"Taille X en unités",Width
"Taille Y en unités",Height
"Couleur des pistes en cuivre à détourer",CoulCuDetoure
"Couleur des surfaces à graver",CoulCuGrave
"Couleur du fond (cuivre non usiné)",CoulCuIntact
"Couleur des perçages",CoulPercage
"Nombre de pixels par unité",pcoef
"Nombre de mm par unité",0.0254
"Aucun perçage",PadsNeverDrilled
"Pastilles CMS jamais percées",CmsPadsNeverDrilled
"Style d'usinage",MillingStyle
"Nom du fichier CID correspondant",CID_Filename
"Nom du fichier BMP correspondant",BMP_Filename
"Date de création",Date
"Position des perçages indiqués à la suite",DrillingList
"(coordonnées en pixels image, diamètre en unités)"
"Perçage X=",DrillX1,"Y=",DrillY1,"D=",DrillD1
...
"Perçage X=",DrillXn,"Y=",DrillYn,"D=",DrillDn

Side should be set to 1 for CU1 side, and 2 for CU2 side.

Width and Height are PCB's width and height without margin in mil.

CoulCuDetoure: deep-etched objects' color in the BMP picture for CNC milling
CoulCuGrave: etched objects' color in the BMP picture for CNC milling
CoulCuIntact: background color in the BMP picture for CNC milling (copper that shouldn't be etched)
CoulPercage: holes' color in the BMP picture for CNC milling

A color is a long value = red + green * 255 + blue * 65536, with red, green and blue as integer value from 0 to 255 (in fact, red, green and blue are byte value).

Others values are CiDess' BMP creation's parameters. They would not be useful for the CNC software.

pcoef is the number of pixels for one mil.
0.0254 is the number of mm for one mil.

The next picture shows how the CNC software had to use the BMP picture:



On top of the picture, with blue, gray and red rectangles and circles, the small black disk figures a CNC machine milling tool. Dot lines are tool paths. White background is CoulCuIntact color.

The bottom of the picture shows the result of the rectangles milling operation on a real PCB (bakelite is in brown, and copper in orange).

In the CoulCuDetoure and CoulCuGrave cases, the tool only etch PCB's copper surface; with CoulPercage, the tool mills the whole depth of the PCB.

If drilling list is in .BMP.TXT file, they are not in the picture.

Let's see an example:

"CIDESS",".BMP.TXT",1
"Face",1
"Taille X en unités",2700
"Taille Y en unités",1500
"Couleur des pistes en cuivre à détourer",16711680
"Couleur des surfaces à graver",0
"Couleur du fond (cuivre non usiné)",65535
"Couleur des perçages",255
"Nombre de pixels par unité",.479999989271164
"Nombre de mm par unité",.0254
"Aucun perçage",#FALSE#
"Pastilles CMS jamais percées",#FALSE#
"Style d'usinage",1
"Nom du fichier CID correspondant","D:\CiDess\fichiers_tests\test_CNC.cid"
"Nom du fichier BMP correspondant","D:\CiDess\fichiers_tests\Test_CNC_Face1_Detoure.bmp"
"Date de création","23/08/2014"
"Position des perçages indiqués à la suite",#FALSE#


Let's see an other example:

"CIDESS",".BMP.TXT",1
"Face",1
"Taille X en unités",2700
"Taille Y en unités",1500
"Couleur des pistes en cuivre à détourer",16711680
"Couleur des surfaces à graver",0
"Couleur du fond (cuivre non usiné)",65535
"Couleur des perçages",255
"Nombre de pixels par unité",.479999989271164
"Nombre de mm par unité",.0254
"Aucun perçage",#FALSE#
"Pastilles CMS jamais percées",#FALSE#
"Style d'usinage",1
"Nom du fichier CID correspondant","D:\CiDess\fichiers_tests\test_CNC.cid"
"Nom du fichier BMP correspondant","D:\CiDess\fichiers_tests\Test_CNC_Face1_Detoure.bmp"
"Date de création","23/08/2014"
"Position des perçages indiqués à la suite",#TRUE#
"(coordonnées en pixels image, diamètre en unités)"
"Perçage X=",680.16,"Y=",1649.24,"D=",118
"Perçage X=",680.16,"Y=",251,"D=",118
"Perçage X=",120,"Y=",959,"D=",39
"Perçage X=",120,"Y=",1079,"D=",39
"Perçage X=",120,"Y=",1583,"D=",26
"Perçage X=",72,"Y=",1487,"D=",26


*.MAC File format HGB<>^

This file format is used by CiDess 4.

It stores CNC machine's parameters.

*.MAC file format:

Black text is constant string
Green text is formatted string
Red text is integer value
Blue text is single value
Orange text is long value
Purple text is boolean value

"CIDESS","MAC",FileVersion
"Unites ",Units
"Axe Broche ",SpindleAxis
"Sens Axe Broche ",SpindleAxisDirection
"Orientation Rep.",CoordinateSystemDirection
"Rotation Broche ",SpindleRotationDirection
"Corr. R Outil ",RadiusToolCompensation
"Corr. H Outil ",HeightToolCompensation
"Changement Outil",ToolChange
"Arrosage ",Coolant
"Nom Fraiseuse ",MachineName
"Course X min ",XminStroke
"Course X MAX ",YminStroke
"Course Y min ",ZminStroke
"Course Y MAX ",XmaxStroke
"Course Z min ",YmaxStroke
"Course Z MAX ",ZmaxStroke
"Parking X ",LandingZoneX
"Parking Y ",LandingZoneY
"Parking Z ",LandingZoneZ
"S MAX ",MaxSpindleSpeed
"Va MAX ",MaxFeedRate
"Nom Rep. Piece ",WorkpieceName
"Cmd. Supp. Debut",NumberOfCharactersInExtraStartCommands
ExtraStartCommands
"Cmd. Supp. Fin ",NumberOfCharactersInExtraEndCommands
ExtraEndCommands


Integer values meaning:

Units
    mm = 0
    inch = 1

SpindleAxis
    X = 0
    Y = 1
    Z = 2

SpindleAxisDirection
    positive = 0
    negative = 1

CoordinateSystemDirection
    direct = 0
    reversed = 1

SpindleRotationDirection
    normal = 0
    reversed = 1

RadiusToolCompensation
    normal = 0
    reversed = 1
    disable = 2

HeightToolCompensation
    positive = 0
    negative = 1
    disable = 2

ToolChange
    automatic = 0
    manual = 1

Coolant
    yes = 0
    no = 1

Let's see an example:

"CIDESS","MAC",1
"Unites ",0
"Axe Broche ",2
"Sens Axe Broche ",0
"Orientation Rep.",0
"Rotation Broche ",0
"Corr. R Outil ",0
"Corr. H Outil ",0
"Changement Outil",1
"Arrosage ",1
"Nom Fraiseuse ","D4070 Sieg sans changeur"
"Course X min ",0
"Course X MAX ",200
"Course Y min ",0
"Course Y MAX ",300
"Course Z min ",0
"Course Z MAX ",50
"Parking X ",190
"Parking Y ",290
"Parking Z ",45
"S MAX ",10000
"Va MAX ",4000
"Nom Rep. Piece ","G54"
"Cmd. Supp. Debut",15
G80 G90 G94 G61
"Cmd. Supp. Fin ",0


*.OUT File format HGB<>^

This file format is used by CiDess 4.

It stores tools list used by CiDess for drilling and by BTP4M for milling.

*.OUT file format:

Black text is constant string
Green text is formatted string
Red text is integer value
Blue text is single value
Orange text is long value
Purple text is boolean value

"CIDESS","OUT",FileVersion
"Nom Liste outils",ToolListName
"Nombre d'outils ",NumberOfTools
"NomOutil","NumT","NumD","NumH","TypeOutil","Unites","Hélice","Diametre","Longueur",_ _"NbDents","DimR","DimS","DimT","DimU"
Tool1Name,Tool1Number,Tool1DComposator,Tool1HComposator,Tool1Type,Tool1Units,Tool1Hand,_ _Tool1Diameter,Tool1Lenght,Tool1NumberOfTooth,RTool1,STool1,TTool1,UTool1
...
ToolNName,ToolNNumber,ToolNDComposator,ToolNHComposator,ToolNType,ToolNUnits,ToolNHand,_ _ToolNDiameter,ToolNLenght,ToolNNumberOfTooth,RToolN,SToolN,TToolN,UToolN


Integer values meaning:

ToolXType
    drill = 0
    shell end mill = 1
    cylindrical cutter = 2
    jointing cutter = 3
    round mill = 4
    tapered mill = 5
    engraving mill = 6
    cutting disc = 7
    molding mill = 8
    right handed taper = 9
    left handed taper = 10

ToolXUnits
    mm = 0
    inch = 1

ToolXHand
    right_handed = 0
    left_handed = 1

R, S, T and U parameters serves to define milling tool; they don't are used by CiDess.

Let's see an example:

"CIDESS","OUT",1
"Nom Liste outils","Forêts pour électronique"
"Nombre d'outils ",18
"NomOutil","NumT","NumD","NumH","TypeOutil","Unites","Hélice","Diametre","Longueur",_ _"NbDents","DimR","DimS","DimT","DimU"
"",1,0,1,0,0,1,.8,20,2,0,0,0,0
"",2,0,2,0,0,0,1,20,2,0,0,0,0
"",3,0,3,0,0,0,1.2,20,2,0,0,0,0
"",4,0,4,0,0,0,1.5,20,2,0,0,0,0
"",5,0,5,0,0,0,2,20,2,0,0,0,0
"",6,0,6,0,0,0,2.5,20,2,0,0,0,0
"",7,0,7,0,0,0,3,20,2,0,0,0,0
"",8,0,8,0,0,0,3.3,20,2,0,0,0,0
"",9,0,9,0,0,0,3.5,20,2,0,0,0,0
"",10,0,10,0,0,0,4,20,2,0,0,0,0
"",11,0,11,0,0,0,4.2,20,2,0,0,0,0
"",12,0,12,0,0,0,4.5,20,2,0,0,0,0
"",13,0,13,0,0,0,5,20,2,0,0,0,0
"",14,0,14,0,0,0,5.5,20,2,0,0,0,0
"",15,0,15,0,0,0,6,20,2,0,0,0,0
"",16,0,16,0,0,0,6.5,20,2,0,0,0,0
"",17,0,17,0,0,0,7,20,2,0,0,0,0
"",18,0,18,0,0,0,8,20,2,0,0,0,0


CiDess.USI File format HGB<>^

This file is used by CiDess 4.

It stores

CiDess.USI file format:

Black text is constant string
Green text is formatted string
Red text is integer value
Blue text is single value
Orange text is long value
Purple text is boolean value

"CIDESS","USI",FileVersion
"Unites ",Unite
"Face cote fraise ",SideUp
"Vitesse d'avance rapide ",FastFeedRate
"Avance par tour par dent ",FeedRatePerRevolutionPerTooth
"Vitesse de coupe ",CuttingSpeed
"Coefficient diametre pastille",CoefPadDiameter
"Percer pastilles trop petites",DrillTooSmallPads
"Pastilles CMS jamais percees ",CMSPadsNeverDrilled
"Commentaires explications ",CommentsInGCODE
"Commentaires noms composants ",ComponentsNamesInGCODE
"Profondeur de percage ",DrillingDepth
"Hauteur remontee entre trous ",RisingHeight
"Tolerance choix foret 1-1.06 ",ToleranceDrillDiameterChoice
"Optimiser les parcours ",OptimizePath
"Optimiser - Nombre individus ",OptimizeNbEntities
"Optimiser - Nb reproductions ",OptimizeNbChildren
"Optimiser - Nombre mutations ",OptimizeNbMutants
"Optimiser - Condition arrêt ",OptimizeStopCondition
"Optimiser - Temps maximum ",OptimizeMaximumDuration


Let's see an example:

"CIDESS","USI",1
"Unites ",0
"Face cote fraise ",1
"Vitesse d'avance rapide ",3800
"Avance par tour par dent ",.1
"Vitesse de coupe ",40
"Coefficient diametre pastille",1
"Percer pastilles trop petites",#TRUE#
"Pastilles CMS jamais percees ",#TRUE#
"Commentaires explications ",#TRUE#
"Commentaires noms composants ",#TRUE#
"Profondeur de percage ",5
"Hauteur remontee entre trous ",10
"Tolerance choix foret 1-1.06 ",1.04
"Optimiser les parcours ",#TRUE#
"Optimiser - Nombre individus ",15
"Optimiser - Nb reproductions ",10
"Optimiser - Nombre mutations ",10
"Optimiser - Condition arrêt ",150
"Optimiser - Temps maximum ",10


 3D view utility source code HGB<>^

I create a 3D view utility for educational purpose; in fact I want to create my own 3D motor, and I finally include it in CiDess.

The 3D motor is coded in Visual Basic and does not use 3D facilities of video cards and Pentium processors. So its performance is quite poor! It's the raison why CiDess allow you to save PCB as 3DG files, so you can use a professional 3D software to create good quality 3D pictures.

        Some mathematics
        An algorithm
        Drawing surfaces
        Source code

Some mathematics HGB<>^

"Do 3D" means to draw on a 2D screen the same picture as we see if there is a 3D scene instead of the monitor.

In fact, draw a 3D picture is the equivalent to project the 3D coordinates on the screen.

Look at the picture:



Known data:
        User eye is centered on a X,Y,Z coordinate system
        User look towards R axis direction
        P,Q,R coordinate system is the A,B,C system after a AY rotation around B, and A,B,C
                AX is the view point's azimuth and AY is the view point's elevation
        Screen is facing the user eye, centered on R axis
        D is the distance between screen and user eye
        V is a point of the fictive 3D scene

Data to find:
        W coordinates on the screen; W is the projection of V.

The Max matrix turn the X,Y,Z system to obtain the A,B,C system:

 1 ;0 ;0
Max =0 ;cos ax ;sin ax
 0 ;-sin ax ;cos ax

The May matrix turn the A,B,C system to obtain the P,Q,R system:

 cos ay ;0 ;- sin ay
May =0 ;1 ;0
 sin ay ;0 ;cos ay

The M matrix give P,Q,R system directly from X,Y,Z:

 cos ay ;0 ;sin ay
M =sin ax . sin ay ;cos ax ;- sin ax . cos ay
 - sin ay . cos ax ;sin ax ;cos ax . cos ay

To obtain V coordinates in P,Q,R, we multiply V coordinates in X,Y,Z by M.

To obtain W coordinates in P,Q,R, we multiply V coordinates in P,Q,R by D then we divide the result by the R coordinate of V.

W screen coordinates are simply P and Q coordinates of W.

An algorithm HGB<>^

We can write an algorithm to find the projection of a 3D scene's points:

Input:
AX angle
AY angle
D distance
For each point of the 3D scene: X,Y,Z
User eye position: UX,UY,UZ
Pixel conversion coef.: K
Screen width: L
Screen height: H


Results:
For each point screen coordinates: xe,ye

Temp data:
COSAX, SINAX
COSAY, SINAY
PX, PY
QX, QY, QZ
RX, RY, RZ
E, F
OWX, OWY, OWX


Algorithm:

COSAY = cos(AY)
SINAY = sin(AY)
COSAX = cos(AX)
SINAX = sin(AX)
// PY is null
PX = COSAY
PZ = SINAY
QX = SINAY * SINAX
QY = COSAX
QZ = - COSAY * SINAX
RX = - SINAY * COSAX
RY = SINAX
RZ = COSAY * COSAX
POUR CHAQUE POINT (X,Y,Z)
X = X - XU
Y = Y - YU
Z = Z - ZU
// E is the distance between W and P,Q map
E = RX * X + RY * Y + RZ * Z
F = D / E
SI F > 1 ALORS // (X,Y,Z) point is behind the screen
// O point is the intersection between screen and R axis
OWX = X * F - RX * D
OWY = Y * F - RY * D
OWZ = Z * F - RZ * D
xe = OWX * PX + OWZ * PZ
ye = OWX * QX + OWY * QY + OWZ * QZ
// Pixel coordinates calculation
xe = K * xe + L/2
ye = K * ye + H/2
FIN SI
FIN POUR


Drawing surfaces HGB<>^

We have to draw surfaces.

To do that, we have to divide 3D surface in small triangle surfaces. The more triangles are small, the more picture quality will be good. But smaller surfaces involve higher program running time.

Then we have to calculate triangles color. Indeed, if all the triangles are painted in the same color, there is no real 3D effect.
First, we have to set up the position of a light source.
Brightness is related to the sinus of the angle between a light ray from the source and the triangle surface.

In fact, if a surface is perpendicular to a light ray, it receives a maximum amount of light; but if the surface is parallel to light rays, it receives no light.

Thus, to obtain a correct picture, we have to sort the triangle by their distance from the user eye, so that the closer triangles are drawn at last.

Look at the following screen shots taken while the 3D program is running:



Remember this algorithm is a basic way to create 3D pictures. A real 3D motor should take into account:
- several light sources
- shadows
- light reflection phenomena
- ...

I hope this introduction make you want to know more about 3D programming.

Source code HGB<>^

Clic here to download the 3D utility source code in Visual Basic 5.

An exe file in the archive allows you to run the utility without Visual Basic. If an error occurs, move the exe file in CiDess path.


(c) Rémy LUCAS - Last update: 30/12/2014 (V4.10)