freebasic.net Forum Index
FreeBASIC's Official Forums
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister   ProfileProfile   Log inLog in

FB CAD
Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9  Next
 
Post new topic   Reply to topic    freebasic.net Forum Index -> Projects
View previous topic :: View next topic  
Author Message
owen

PostPosted: Feb 11, 2007 12:51    Post subject: FB CAD Reply with quote

FB CAD by Owen Reese
A cad program developed by freebasic programmers written in Freebasic for the pupose of :
1. Learning how to code in Freebasic
2. Creating a free basic cad program for all to use (freely)
3. Learning and understanding math
4. Inspiring Creativity.

Runs on windows
Zip with source code, dxf characters (a-z,0-9) and exe: http://www.htwif.com/owen/fbcad15.zip



Last edited by owen on May 27, 2010 22:13; edited 28 times in total
 
Back to top
View user's profile Send e-mail
owen

PostPosted: Feb 11, 2007 15:11    Post subject: For example: Reply with quote

Pressing Esc to end the program saves the drawing in file called "drawing.dxf" if you choose "Y" for yes.

Screen Layout:
The left side is used for drawing information, buttons and line color/layer selection. The right side is used for the drawing area.

Functionality:

While moving the mouse in the drawing area the x y coordinate of the mouse are shown on the left.

While drawing a line the line's length, angle and x2,y2 are shown on the left.

To draw a line:
Left click in the drawing area and move the mouse. The new line's x1,y1 is defined by the initial mousex,y position.

The line's x2,y2 follows the mouse(x,y). By left clicking a second time a new line is created and stored in an array.
By default a second line is beginning drawn in which it's x1,y1 was that of the x2,y2 of the previous line.

Either continue to draw lines by moving the mouse about and left clicking to define the beging and ending points of lines or ESC out of the line drawing mode by pressing the Escape key one time.

While drawing lines there are several options available by pressing keys:
Some of these options are available by using the buttons on the left.

"O" - Ortho mode: Draw vertical or horizontal lines by pressing "O". This turns ortho mode "ON" or "OFF"

"S" - Snap to the end point of another line. By positioning the mouse near the end point of another line and pressing "S" either the lines beginning or ending point will be set to that of the highlighted point.

"M" - Snap to the mid point of another line. By positioning the mouse over an existing line and pressing "M" either the lines beginning or ending point will be set the that of the highlighted line.

"L" - Set the length of a line as you are drawing it to:
A specified length - Enter the length an press return or set the length to that of another line's length by first having positioned the mouse over another line prior to pressing "L". Note: the angle of the line is determined either by the current angle or the set angle (setting the angle of a line is done by pressing "A").

"A" or "a"

"a" - Set the angle of a line by first starting a new line then press "a" and either:
Enter the angle such as 33 and press enter or use @33 to set the angle relative to that of the last selected angle. (by default the last selected angle is that of the last line drawn. Otherwise, the selected angle is set by highlighting another line prior to pressing "a")

"A" - Use "A" to set the angle relative the last line drawn - No need to enter the @.


"X" or "Y"
As a line is being drawn, it's end point is restricted to either x or y of the last selected lines x1,y1 or x2,y2 depending of which end point was highlighted.

To select objects in the drawing area for the purpose of deleting them or moving, copying, rotating, flipping etc... you have two options:
To select objects turn off all of the top buttons L,C,A,E (line, circle, arc, ellipse)
1st option is to position the mouse over an object and either press "g" or left click
2nd option is to box select one or more objects by left clicking once, release, move the mouse, drawing a box around the objects, and clicking a second time to sellect all items in the box.


Last edited by owen on Mar 06, 2007 5:59; edited 2 times in total
 
Back to top
View user's profile Send e-mail
maddogg6
Sr. Member
PostPosted: Feb 11, 2007 17:20    Post subject: Reply with quote

Im using a recent CVS version of FB.
Using -lang qb...

I needed to add this: (around line 153)

Code:
        Dim As Integer mousex, mousey, mousew, mouseb


Which is just before this:
Code:
        GETMOUSE mousex, mousey, mousew , mouseb


Otherwise it gave me type mismatch error on 'mousex' with out dim'ing it first.

Nice work btw - but I didnt try importing the DXF into anything tho.

edit: using -lang fb and -lang deprecated gave a whole bunch of errors/warnings.
 
Back to top
View user's profile Visit poster's website
owen

PostPosted: Feb 11, 2007 18:17    Post subject: rev1 Reply with quote

added maddogs requirement to dim mouse params
ps. i was able to import drawing.dxf into autocad2k - i was kinda using ac2k to verify my math was correct.


Last edited by owen on Feb 16, 2007 18:17; edited 1 time in total
 
Back to top
View user's profile Send e-mail
Ryan
Sr. Member
PostPosted: Feb 13, 2007 2:48    Post subject: Reply with quote

Cool little program... I congratulate you on a great start!
 
Back to top
View user's profile Send e-mail Visit poster's website
owen

PostPosted: Feb 13, 2007 16:14    Post subject: new stuff Reply with quote

added:
"I" - Import drawing.dxf into the current drawing. Currenly this is limitted to only those files that were created with FB-Cad.

"G" - Group: In order to delete, move or modifiy one or more lines,
Position the mouse over an existing line and press "g" to add it to the group.

"Del" - Delete group. Any lines in a group will be erased from the drawing area but not deleted from the array.

"Ctrl-Z" - Undo: Pending. Will Sequentially restore line's last state, i.e. if a line was previously deleted it will be restored.


Last edited by owen on Feb 16, 2007 18:18; edited 1 time in total
 
Back to top
View user's profile Send e-mail
owen

PostPosted: Feb 13, 2007 18:27    Post subject: sample dxf file Reply with quote

sample dxf file - save as drawing.dxf
oops - for some reason the text gets modified in the code block so I commented it all. When you copy this text you'll need to uncomment it and then save as drawing.dxf

Code:
' 0
'SECTION
' 2
'TABLES
' 0
'TABLE
' 2
'LAYER
' 70
'15
' 0
'LAYER
' 2
'MYLAYER1
' 62
'162
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER2
' 62
'92
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER3
' 62
'132
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER4
' 62
'12
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER5
' 62
'212
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER6
' 62
'32
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER7
' 62
'9
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER8
' 62
'8
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER9
' 62
'5
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER10
' 62
'3
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER11
' 62
'4
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER12
' 62
'1
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER13
' 62
'6
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER14
' 62
'2
' 6
'CONTINUOUS
' 70
'0
' 0
'LAYER
' 2
'MYLAYER15
' 62
'7
' 6
'CONTINUOUS
' 70
'0
' 0
'ENDTAB
' 0
'ENDSEC
' 0
'SECTION
' 2
'ENTITIES
' 0
'LINE
' 8
'MYLAYER14
' 10
'379
' 20
'452
' 30
'0
' 11
'302
' 21
'452
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'302
' 20
'452
' 30
'0
' 11
'281
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'281
' 20
'308
' 30
'0
' 11
'296
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'379
' 20
'452
' 30
'0
' 11
'376.835396603924
' 21
'437.157005284051
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'376.835396603924
' 20
'437.157005284051
' 30
'0
' 11
'315.835396603924
' 21
'437.157005284051
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'353.917698301962
' 20
'372.578502642025
' 30
'0
' 11
'305.417698301962
' 21
'372.578502642025
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'305.417698301962
' 20
'372.578502642025
' 30
'0
' 11
'296
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'356.082301698038
' 20
'387.421497357975
' 30
'0
' 11
'307.582301698038
' 21
'387.421497357975
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'307.582301698038
' 20
'387.421497357975
' 30
'0
' 11
'315.835396603924
' 21
'437.157005284051
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'353.917698301962
' 20
'372.578502642025
' 30
'0
' 11
'356.082301698038
' 21
'387.421497357975
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'406
' 20
'452
' 30
'0
' 11
'384.999999999999
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'384.999999999999
' 20
'308
' 30
'0
' 11
'450
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'406
' 20
'452
' 30
'0
' 11
'471.000000000001
' 21
'452
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'471.000000000001
' 20
'452
' 30
'0
' 11
'480.835396603924
' 21
'437.157005284051
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'450
' 20
'308
' 30
'0
' 11
'464.164603396075
' 21
'322.842994715949
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'460.5
' 20
'380
' 30
'0
' 11
'474.664603396076
' 21
'394.842994715949
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'474.664603396076
' 20
'394.842994715949
' 30
'0
' 11
'480.835396603924
' 21
'437.157005284051
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'464.164603396075
' 20
'322.842994715949
' 30
'0
' 11
'470.335396603923
' 21
'365.157005284051
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'470.335396603923
' 20
'365.157005284051
' 30
'0
' 11
'460.5
' 21
'380
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'409.417698301961
' 20
'372.578502642025
' 30
'0
' 11
'402.164603396075
' 21
'322.842994715949
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'418.835396603924
' 20
'437.157005284051
' 30
'0
' 11
'411.582301698037
' 21
'387.421497357975
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'409.417698301961
' 20
'372.578502642025
' 30
'0
' 11
'444.417698301962
' 21
'372.578502642025
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'411.582301698037
' 20
'387.421497357975
' 30
'0
' 11
'446.582301698038
' 21
'387.421497357975
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'418.835396603924
' 20
'437.157005284051
' 30
'0
' 11
'453.835396603925
' 21
'437.157005284051
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'402.164603396075
' 20
'322.842994715949
' 30
'0
' 11
'437.164603396076
' 21
'322.842994715949
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'437.164603396076
' 20
'322.842994715949
' 30
'0
' 11
'451.329206792151
' 21
'337.685989431899
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'444.417698301962
' 20
'372.578502642025
' 30
'0
' 11
'454.253094905885
' 21
'357.735507926076
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'454.253094905885
' 20
'357.735507926076
' 30
'0
' 11
'451.329206792151
' 21
'337.685989431899
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'453.835396603925
' 20
'437.157005284051
' 30
'0
' 11
'463.670793207848
' 21
'422.314010568102
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'446.582301698038
' 20
'387.421497357975
' 30
'0
' 11
'460.746905094113
' 21
'402.264492073924
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'460.746905094113
' 20
'402.264492073924
' 30
'0
' 11
'463.670793207848
' 21
'422.314010568102
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'550
' 20
'387.421497357975
' 30
'0
' 11
'538.417698301962
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'538.417698301962
' 20
'308
' 30
'0
' 11
'615.417698301962
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'615.417698301962
' 20
'308
' 30
'0
' 11
'617.582301698037
' 21
'322.842994715949
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'555.582301698037
' 20
'322.842994715949
' 30
'0
' 11
'617.582301698037
' 21
'322.842994715949
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'550
' 20
'387.421497357975
' 30
'0
' 11
'627
' 21
'387.421497357975
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'627
' 20
'387.421497357975
' 30
'0
' 11
'624.835396603924
' 21
'372.578502642026
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'624.835396603924
' 20
'372.578502642026
' 30
'0
' 11
'562.835396603924
' 21
'372.578502642026
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'562.835396603924
' 20
'372.578502642026
' 30
'0
' 11
'555.582301698037
' 21
'322.842994715949
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'639
' 20
'308
' 30
'0
' 11
'639
' 21
'347.710748678988
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'639
' 20
'347.710748678988
' 30
'0
' 11
'674
' 21
'347.710748678988
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'674
' 20
'347.710748678988
' 30
'0
' 11
'674
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'674
' 20
'308
' 30
'0
' 11
'660
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'660
' 20
'308
' 30
'0
' 11
'660
' 21
'335
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'660
' 20
'335
' 30
'0
' 11
'647
' 21
'335
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'647
' 20
'335
' 30
'0
' 11
'647
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'647
' 20
'308
' 30
'0
' 11
'639
' 21
'308
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'656.5
' 20
'347.710748678988
' 30
'0
' 11
'656.5
' 21
'387.421497357975
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'656.5
' 20
'387.421497357975
' 30
'0
' 11
'639
' 21
'347.710748678988
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'656.5
' 20
'387.421497357975
' 30
'0
' 11
'674
' 21
'347.710748678988
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'698
' 20
'389
' 30
'0
' 11
'686
' 21
'296
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'686
' 20
'296
' 30
'0
' 11
'743
' 21
'335
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'743
' 20
'335
' 30
'0
' 11
'698
' 21
'389
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'705
' 20
'359
' 30
'0
' 11
'700
' 21
'319
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'700
' 20
'319
' 30
'0
' 11
'723
' 21
'337
' 31
'0
' 0
'LINE
' 8
'MYLAYER14
' 10
'723
' 20
'337
' 30
'0
' 11
'705
' 21
'359
' 31
'0
' 0
'ENDSEC
' 0
'EOF
'
 


Use "I" to import the dxf file
 
Back to top
View user's profile Send e-mail
owen

PostPosted: Feb 14, 2007 13:26    Post subject: update Reply with quote

Added 2 new sub routines

altofxm:
newlength= (fxm-x1) / cos ( angle2*PI/180 )
gosub atolength2
return
altofym:
newlength= (y1-fym) / sin ( angle2*PI/180 )
gosub atolength2
return

These routines are called by pressing "X" or "Y" while drawing a line at a spcified angle. For example: Their purpose is to allow a line to be drawn at 45 degrees and setting the end point (x2 / y2 ) to that of another line's x value while maintaing the specified angle of 45 degrees.


Last edited by owen on Feb 16, 2007 18:20; edited 1 time in total
 
Back to top
View user's profile Send e-mail
owen

PostPosted: Feb 14, 2007 15:57    Post subject: using option explicit Reply with quote

I had a bunch of erros in the code.
Tested using FBIde 0.4.6 and FBC 0.16 using option explicit.


Last edited by owen on Feb 16, 2007 18:21; edited 1 time in total
 
Back to top
View user's profile Send e-mail
owen

PostPosted: Feb 16, 2007 18:04    Post subject: added some buttons Reply with quote

So far it can only draw lines, ie. no circles yet.
I added some buttons to click on in order to change the snap to settings. Snapping to the end points of lines is still available by pressing "S" on the keyboard, or "M" to snap to mid points, etc...
 
Back to top
View user's profile Send e-mail
owen

PostPosted: Feb 21, 2007 2:21    Post subject: code is getting real sloppy Reply with quote

I added copy, move, rotate functionality.
 
Back to top
View user's profile Send e-mail
Skyler

PostPosted: Feb 21, 2007 13:29    Post subject: Reply with quote

Sounds cool. Keep working. :-)
 
Back to top
View user's profile
owen

PostPosted: Feb 22, 2007 2:30    Post subject: additions Reply with quote

added flip vertical, horizontal, both and copy flips
 
Back to top
View user's profile Send e-mail
obelisk

PostPosted: Feb 22, 2007 19:41    Post subject: Reply with quote

Very cool!
Can't wait for arcs and circles.

Keep up the great work.
 
Back to top
View user's profile
owen

PostPosted: Feb 25, 2007 17:17    Post subject: added zoom and pan Reply with quote

zoom with the mouse wheel or by using the Z or z buttons

pan - turn the pan button on and hold / drag with the left mouse

note: the left mouse is also used for drawing and selecting so disable pan if it is enabled
 
Back to top
View user's profile Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    freebasic.net Forum Index -> Projects All times are GMT
Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9  Next
Page 1 of 9

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum



sf.net phatcode