Turning Simulation
Turning Simulation
Spencer Raisanen
Thesis 2015
Abstract
Spencer Warren Raisanen
Semi-Automated Turning Simulation Production Using Catia V5 , 105 pages, 2
appendices
Saimaa University of Applied Sciences
Bachelor of Engineering, Lappeenranta
Mechanical Engineering and Production Technology
Thesis 2015
Instructor: Lecturer Jouni Könönen, Saimaa University of Applied Sciences
The purpose of this thesis was to explore the possibility of using CAPP within a
CAD/CAM program with an end goal of producing turning simulations for simple
geometries. The system requires only simple geometrical input from the user and a user
entered tool catalog. The end goal of this thesis was for CNC-code production to be
possible with minimal human entry necessary through the CAM interface, but allowing
for the user to check the simulation to ensure all parameters are correct and make
minor adjustments as desired. The work was commissioned by Jouni Könönen of
Saimaa University of Applied Sciences.
The information of this thesis was collected from literature, internet sources, practical
experience, and by conversations with people knowledgeable in either the field of
machining or programming. The system works by logically deciding which machining
operations are necessary, the toolholders needed, the desired insert shape and size,
and the machining parameters. This information is all uploaded to Catia V5 which does
the actual simulation, allowing the development to focus on the CAPP algorithms.
The results of this study demonstrate that this is a very viable option for industry
production of simple geometries produced by turning operations. It is recommended that
more work be carried out to better integrate the system into one standalone program
which has the capability of working with more complicated geometries. It is also
recommended to see the possibility of full automation with different CAM programs.
2
Contents
1 Introduction .............................................................................................................. 5
1.1 Background ........................................................................................................ 5
1.2 Objectives .......................................................................................................... 5
1.3 Scope and Operations ....................................................................................... 6
1.4 Thesis Format .................................................................................................... 6
2 Theory Review ........................................................................................................8
2.1 Turning ............................................................................................................... 8
2.1.1 Metal Cutting and Chip Formation ............................................................... 8
2.1.2 Parameters ................................................................................................ 10
2.1.3 Turning Operations .................................................................................... 12
2.1.4 Stages of the Turning Process .................................................................. 13
2.1.5 Turning Strategy ........................................................................................ 14
2.2 CATIA V5 ......................................................................................................... 16
2.3 Visual Basic for Applications ............................................................................ 17
2.4 Catia V5 Programming ..................................................................................... 18
2.4.1 Catia Machining Process Modelling ........................................................... 19
2.4.2 Catia Programming within Excel ................................................................ 23
3 Program Description .............................................................................................. 25
3.1 Catalog ............................................................................................................. 26
3.2 Process Planning ............................................................................................. 28
3.3 Geometry Production ....................................................................................... 28
3.4 Toolholder and Insert Selection........................................................................ 28
3.5 Exportation to Catia .......................................................................................... 29
3.6 Report Production ............................................................................................ 29
4 Program Demonstration ......................................................................................... 30
5 Conclusion ............................................................................................................. 38
5.1 Limitations ........................................................................................................ 38
5.2 Recommendations ........................................................................................... 38
5.3 Reflections ....................................................................................................... 39
5.4 Final Conclusion............................................................................................... 39
3
Terminology and Concepts
4
1 Introduction
This thesis investigates the feasibility of automating the production of turning simulations
of simple geometry components within Catia v5 using CAPP algorithms with VBA as the
programming language and Excel as the host program. The purpose of creating the
turning simulation instead of just generating the NC code is that it allows the user to verify
that the program’s output is suitable and to have the ability to adjust any parameters as
desired in a way which does not require fine-tuning the actual NC code. Turning
simulations are something that Catia does very well, but it is not something that has yet
been able to be automated. While many companies, universities, and research groups
are attempting to achieve completely automated CAPP, it is still outside of our grasp.
1.1 Background
There are an abundance of CAD, CAM, and CAE programs available on the market, yet
there has been no single commercially successful CAPP program thus far. There have
been many that have been made, with varying degrees of success and accuracy. These
programs have not yet taken advantage of other CAD/CAM programs in order to allow
the program to only focus on the CAPP; allowing the CAD program to make the
geometries while allowing the CAM program to make a simulation of the manufacturing
process. The simulation step is the real focus here, because it would allow the user to
make any necessary changes and observe that everything is working correctly while still
allowing the computer to do the bulk of the calculations.
1.2 Objectives
The objectives of this thesis are simple. First: that the program is able to produce turning
simulations within CATIA, and from these simulations is able to produce NC for parts
produced by turning with simple geometry. Secondly, that the program is able to produce
simulations that will not require much, if any, user input afterwards due to errors within
the CAPP logic. The third objective is that the general form of the written program will be
easy to adapt to other types of turning operations and other CAM programs, and also
5
allows the program to be built and expanded upon to accommodate more complicated
geometries.
Since this field is still relatively open and unfulfilled it is not realistic that the entire problem
of CAPP be solved within the scope of this thesis. Rather, it is more important that the
general manner of programming be resolved and that the program is able to solve the
presented challenges. It is planned that the program should be able to solve the following;
tool selection, tool path selection, and machining parameters selection for turned parts
involving rather simple geometry which can be defined as composed of straight lines,
notches, chamfers, and radii which are all performed by external turning. The program
requires that the user enters in the necessary details which then creates the necessary
geometries for the simulation. The program will first use the parameters of the machine,
the billet size, and the geometries to determine which operations will be used and in which
order. Next using a certain logic scheme the tools will be selected and applied along the
proper tool path. After the program is finished running the simulation will be prepared
using the parameters given by the program and can be tested for any errors. After the
simulation has been verified, it is simply a matter of running the simulation generated
through a post-processor corresponding to the turning machine which will be used in the
machining process and generate the relevant NC code.
In order to carry out this thesis a lot of preparatory work, particularly in the field of
machining and programming was carried out. It is necessary to have a very good
understanding of machining in order to understand how machining parameters,
machining tools, and machining tool paths are selected from raw, geometrical data. A
deep knowledge of programming is mandatory in order to be able to generate the
proper algorithms which encode this knowledge in a programming language; allowing the
process to be automated as well as enabling the different applications used to pass
information to and from each other. This thesis contains necessary knowledge and
preparatory work in the following fields:
6
Turning
Catia V5
Computer Programming (VBA)
VBA programming with Catia V5
The thesis is broken down into three main tasks: Theory Review, Program Description,
and Program Demonstration.
The theory involved within the thesis is reviewed: this involves every part of the turning
process from turning parameters to tool path selection, how Catia works and why it is
used so widely, basic programming with VBA, and VBA programming within Catia V5.
This section describes the thought process behind the formation of the program and how
the program completes its tasks.
The final selection goes through an example of the program in use and demonstrates the
final output which the system gives using a real-life example.
7
2 Theory Review
This chapter provides a basic review of turning, Catia V5, computer programming with
VBA, and the use of VBA within Catia V5.
2.1 Turning
Turning is a fairly simple metal cutting process which generates cylindrical forms with a
single point tool during a process where the workpiece is usually rotating and the tool is
stationary. Although the turning process is very simple, it is the most widely used
machining process and thus has had lots of optimization which has led to turning having
highly specialized tools and operations developed through, and based on, decades of
experience (1, p. VI-2).
8
Figure 1. Temperature Dissipation of Metal Cutting Processes
The most critical part of the metal cutting process is the chip formation process. The
reason for this is that the removed metal must be pushed away from the cutting area in
order to not interfere with the process as well as to carry the majority of the heat produced
away from the workpiece: preventing extra thermal stress to the workpiece.
Understanding the chip formation process involves an accurate prediction of deformation,
temperature, and forces as these are the dominant factors which have an effect upon the
chip formation process. Temperatures affect the cutting process itself and can negatively
affect the materials of the tool and the workpiece if enough of it is not properly evacuated.
The forces affect how much power and strength is necessary within the process.
There are many different factors which affect how the chips are actually formed. Factors
such as depth of cut, entering angle, feed, material, and tool geometry all have an effect
9
as noted within Figure 2. While these all have important effects upon the chip formation
process, it is sufficient if these are only understood as having an effect and instead
following the recommendations of companies which are producing machining tools in
order to select the correct tools for each process. These recommendations are based
upon empirical data and allow the machinist to concentrate less upon the tool design and
chip breaking aspect and more upon the planning of the process as a whole.
2.1.2 Parameters
There are several parameters in turning which are vital to having the operation go
smoothly and without fault. These parameters are: spindle speed, cutting speed, feed
speed, cutting depth, entering angle, nose radius, specific cutting force, metal removal
rate, and power consumption. Selection of these parameters generally comes from tool
manufacturers’ recommendations, but it is important to understand these concepts.
Ƒ, vƒ
10
Cutting speed (Vc) is the speed at which the cutting edge of the tool is moving along the
workpiece. Cutting speed generally stays constant, but in operations moving towards or
away from the center of the workpiece it can change as it is dependent on the diameter
of the cut. Cutting speed is expressed in meters per minute (m/min) and is defined by the
following equation.
D×π×n
Vc = (1)
1000
Feed speed (vƒ) is the speed at which the machine feeds the tool along at. Feed speed
is expressed in meters per minute (m/min). Feed per rev (ƒ) is an important subset of
feed speed and is the amount of feed per revolution of the workpiece expressed in
millimeters per revolution (mm/rev).
Cutting depth (ap) is the depth of the cut which the tool is making. It is always measured
as perpendicular from the feed direction and expressed in millimeters (mm).
Entering angle (κ) is the angle between the direction of the feed and the cutting edge
(degrees).
Nose radius (rε) is the radius that exists on the ‘point’ of the tool. It exists in order to
remove the weakness from the point. The nose radius means that there will always be
some kind of radius when there is any type of angle along the finished workpiece. A larger
nose radius means that there are less vibrations and a higher feed rate can be used. A
smaller nose radius allows the machining process to be of higher quality. Nose radius is
expressed in millimeters (mm).
Specific cutting force (kc) is defined as the force in the cutting direction needed to chip off
the certain area being removed. It is generally based off of kc1 which is the specific force
needed to remove 1 mm2. The manufacturers’ handbooks generally contain the
specific cutting force which is equal to the max area which can be removed. The units
used for specific cutting force are Newtons per square millimeter (N/mm2).
11
Metal Removal Rate (Q) is another important factor. This allows the user to compare the
rate at which material is removed for each tool. By comparing the Q for different tools, it
can be possible to select a tool which will allow the operation to be finished in less time.
Q is calculated by the following formula and displayed in cubic millimeters per minute
(mm3/min).103
𝑄 = Vc × ap × ƒ (2)
Power consumption (Pc) is another important factor to keep track of. This is because often
a machine may have a limiting power which can be used and it is not possible to go over
this power. This means that sometimes power may be the limiting factor in an operation.
Power can be calculated by the following formula and displayed in kilowatts (kW).
Vc × ap × ƒ × kc
Pc = (3)
60000
These parameters are all vital components and if one is incorrect than it can easily throw
off the entire operation (1, p VI.2-20).
In order to simplify the tool applications the basic turning operations will first be described
as any other turning operations are combinations of these basic operations. The most
basic operation is longitudinal turning which is when the lathe is removing material
horizontally. Facing is when the lathe is moving along the vertical face along the end of
the workpiece. Profiling is when the lathe is following along whatever profile the desired
output in one direction. Plunging is when it is necessary for a tool to ‘plunge’ into the side
of the workpiece creating what is known as a notch (2, p A30).
12
Figure 4. Visual Description of Turning Operations
There are different stages of almost every turning process. These stages can be broken
down into the roughing, semi-finishing, and finishing stages.
The roughing stage consists of when it is the most important to remove as much material
as possible in the quickest time possible. When doing roughing it is not seen as important
for the surface quality that is being produced to be very accurate or smooth. The name
actually derives from the rough surface which it leaves behind. Of course when doing a
roughing process it is important to recall that you should always leave sufficient space
between the roughing surface and the desired finished surface unless the finished surface
desired surface quality is reachable by the roughing process.
13
The semi-finishing stage is when the tool is still quite productive but has a higher accuracy
than the roughing stage and can allow for material to be removed that was too dangerous
to be removed during the roughing stage.
The finishing stage consists of the final pass along the part which gives the piece the
desired surface texture.
One of the key components of having a competitive business, especially a business with
a lot of competition, is to keep costs low per worked piece. It thus serves the end line of
any business if they can cut worked hours per piece as they will also cut cost at the same
time; thus boosting competitiveness. Optimization of process planning is an aspect of
machining in which a company can improve its profit margin by having an increased
production rate while at the same time not increasing use of expensive tools too much.
14
Sandvik Coronant (1, p VI-37) describes the following as the main factors which influence
the tools application during the turning process:
There are certainly many different methods to use while selecting tools, tool holders, and
parameters, but the general method used in the thesis is as charted out in Figure 6.
The general idea of selection is quite simple as there are almost always many different
combinations of inserts, toolholders, and cutting parameters which will end up giving the
desired results. The only difference is that some will give the results in a much quicker
manner than the others and most likely end up being cheaper when applied to many
pieces even though the inserts and toolholders themselves may end up being much more
expensive.
The process can be described as follows. First of all, gather all of the necessary data for
the part. Second, using critical thinking decide which type of operation will be done and
whether positive or negative geometry will be used. This step can either be extremely
obvious or quite complicated: the general idea is to limit the amount of tool changes as
they usually take quite a bit of time and to do all of the work which is possible with the tool
while it is in use. The next step is to look at the operation desired and choose the insert
and then the toolholder taking into account the following factors: shape, size, geometry,
application type, nose radius, and grade. After this the cutting parameters can be selected
according to the manufacturer’s recommendations. Then it is always advisable to check
that all of the values resulting from these parameters are within the acceptable values for
15
the machine. If they are not acceptable, then maybe it is possible to slightly modify some
of the cutting values, or it may be necessary to change the insert.
2.2 CATIA V5
16
Catia has been referred to as a PLM (Project Lifecycle Management) system as the scope
of the program is so large it can be used to model every part of the manufacturing process
of a product. An example of Catia use could be the following: first the product itself is
modelled, then the product is tested, then the manufacturing processes are simulated,
and finally the factory itself is simulated. The entire process is done and all of the
documentation is properly contained within Catia. Catia is used for many different types
of disciplines and can be used for mechanical, electrical, fluid, and systems engineering.
This versatility has led to Catia being used in most engineering industries. Catia is widely
used in the automotive, aerospace, industrial equipment, plant design, packaged goods,
life science, civil, architecture, process power, petroleum, and other related industries.
(3)
For decades, BASIC has been used as a programming language as a ‘basic’ interface
between man and machine and is a relatively low-level programming language. BASIC
eventually evolved into VB which was used as a RAD and had the capacity of quickly
creating applications which could run independently of other programs. VB forked into
two directions, one of which was .NET which is still used today to create standalone
applications, and the other which was VBA and transferred most of the functionality of VB
into an easy to use language which is hosted inside of other applications. Examples of
applications which can host this language are most of the wide range of Microsoft Office
products available , notably Excel, and other applications such as CATIA V5 (4).
VBA, as noted, contains many of the elements of VB; such as an IDE which is almost the
same as the original VB IDE. This contains important components such as a debugging
window, a properties window, and so on (5). Inside of this environment it is possible for
the developer to interact and access the object model of not only the host application, but
other applications as well allowing VBA to work across several independent applications.
The introduction of VBA allowed several other macro languages used within applications
for simple automation to be retired as VBA does, in general, a quicker, better job while it
is quite user-friendly as well.
17
VBA has the ability for the user to create UDFs, to automate simple tasks, and to be able
to use DLLs to access low-level functions such as the Windows API. The user will create
different macros which contain all of the actual functionality but do need to be within
another application in order to run. Some of the common uses of VBA are as follows:
Automating a Task
Custom Commands
The most important thing to realize about VBA is that it is an event driven language. This
means that in order for the program to start doing its work it must be triggered by some
certain event. If the event driving the macro is not run, then the macro will simply stay
silent. This means that it is important for the developer to ensure that the macro will
always be triggered when the macro should start running (5).
Programming with Catia V5 could be done for many different reasons. For instance, a
company could want to take information from either word or excel documents, write
information to these applications, automate tasks, or use the computing power to do
calculations and generate outputs within Catia automatically.
There are three different programming language options for Catia V5: VBscript, VBA, and
VB6. VBscript is a simple subset of VBA which is the only Catia programming language
usable in both Unix and Windows operating systems. It is used for very simple macros.
The downsides of VBscript is that it is quite difficult to program in because its editor is
very weak, it is sequential programming, and the user interface tools are not very good.
VBA is, as mentioned before, a subset of BASIC which needs to be hosted within an
application. The positives of VBA is that the IDE is quite good, the programming is event
based, it allows collaboration with other VBA applications, and the UI (User Interface) is
good. The downsides are that the security is not very strong and it is difficult to export the
18
program. VB6 has all of the advantages of VBA as well as code protection, the possibility
to create DLLs, and the possibility to create servers. The only downside is that the
software requires another license purchase from Microsoft and that VB6 is very outdated
nowadays and does not work very well on a newer Microsoft OS.
Within this thesis, VBA was utilized. There are many reasons for this selection. First of
all, as the thesis is simply the testing of an idea and not actually the full implementation
the functionality of VBA will be sufficient. VBscript is simply too basic to be used in any
easy manner, plus it lacks the functionality to connect to other applications outside of
Catia. VB6 would be a good fit, other than the fact that VB6 is simply not available from
Microsoft anymore because of the abandonment of its use in favor of .NET which is simply
an expanded version of VB but is unfortunately not completely compatible with Catia v5.
If the CAD/CAM program being used was Catia V6 then .NET would definitely be the best
choice for the programming language. However, Catia v5 was utilized and that left one
real choice for this thesis: VBA. (6)
Now before the programming goes into detail, it is necessary for an explanation of how
to model the machining process within Catia.
First of all, before anything else gets done it is necessary for the user to have a 3D model
of the finished part, a 3D model of the billet being used, and a preselection of the details
of the manufacturing process. For the 3D models it is always recommended to have the
Z axis pointing away from the chuck so that the default axis for the machine does not
need to be adjusted. It is also recommended to draw an extra sketch upon the 3D model
of the finished part for each phase of the manufacturing process as this makes the tool
path selection an extremely simple process. Once the 3D models are prepared it is
necessary to put them all into one product and line them up in the way the finished product
will be relative to the billet. Then it is necessary to put the origin of the product where the
desired (0,0,0) point of the operation is. If it has not been specified for any operations it
is put in the center of the billet on the face which faces away from the chuck. An example
product is shown in Figure 7.
19
Figure 7. Product Ready for Manufacturing Process. Note the Origin on the Billet Face.
Once the product is ready the user clicks on start, then machining, and finally lathe
machining. This opens up a process. The process has three main parts within what it calls
the PPR and these are processes, products, and resources. This is because it may be
necessary to have more than one process to finish a part and the product may need to
be changed slightly between each process to include extra sketches. The resources
include whatever resources are used in the manufacturing process.
The next step is to click on Part Operation.1 and add the relevant information. This
includes machine type, default machining axis, design part, stock, tool changing point,
and so on.
Then once this information is all filled out the user can select what type of operation is
desired. The options are roughing, grooving, recessing, profile finishing, groove finishing,
threading, ramp roughing, recess roughing, and drilling operations. Inside each different
type of operation the options are roughly the same.
First of all the stock and the element to be machined are selected. This is when the
sketches are extremely useful because they can be selected as the element to be
20
machined and the program will follow their geometries. Things such as the offset can be
set so that the geometry used can be as close to the actual finished part as possible.
The strategy can be selected next which gives the options as to how the tool will be
directed along the piece, what the depth of cut will be, what the tool compensation will be,
and so on.
21
Figure 9. Operation Strategy
Next is the option to select the toolholder and the insert type. During this stage it is also
necessary to enter in the feed and speed for the insert. The next window then can be set
to run automatically off of the information entered during this part of the process.
22
After all of the operations have been completed it is possible to simulate the operation
from the tool path because the NC code has not yet been generated. This thesis will focus
on getting to this point as the NC code generation simply requires setting the correct
postprocessor for the machine being used and clicking generate NC code. (7)
It is not completely necessary for the programming to be done within Excel but it was
chosen for this thesis because it allows the selections to be made before everything else
is done as the insert and toolholder catalogs are also contained within Excel. This means
that only Excel needs to be run at the beginning and Excel will do the heavy work before
opening Catia and exporting all of the selected data to the machining process. As Catia
uses a lot of computing power it is advisable to only open it when it is needed. Before
anything else is done it is mandatory for the user to go to the References within Excel
and enable anything coming from Catia as this allows Catia functions, properties, and
types to be used.
Catia uses OOP which means it consists of objects which all have certain attributes or
data that make it a certain, unique object. Each object also can do certain actions which
are called methods. The key point of object oriented programming is the ability to create
so-called classes under which similar things can be placed. For instance under the class
of computer there could be objects such as Apple, Microsoft, Asus, Toshiba, etc.
An object can be defined as an entity. Examples within Catia include things such as lines,
points, shafts, and so on. Objects utilize aggregation to set the relations between different
objects. For instance a line is simply an aggregation of the two points which make it up,
while a point is simply the aggregation of the plane it is set upon and its coordinates.
Objects within Catia can be worked upon by using two different ways: Property and
Method. The property is the characteristic of an object and the method is an action of an
object. An example of a property would be the name it is given such as Point.1. An action
is obviously when some form of action happens such as when a sketch opens via
sketch.Open.
23
Another great help within Catia is there is a Macro Recorder tool which records and
exports to code everything done within Catia while the tool is running. This is helpful in
gaining the names of different objects, properties, and methods. However, it is not really
recommended to use code generated by the Macro Recorder within personally developed
code as it has a different set of preferences than a human developer and may change
names of objects, may only work in certain situations, and numerous other issues which
can come from trying to mix different developers’ code together when they are both using
a completely different system (6).
24
3 Program Description
The program can be broken down into several semi-independent sections which each
contain a critical part of the overall program. Each section will be thoroughly explained
and documented. The sections are as follows:
o Catalog
o Process Planning
o Geometry Production
o Tool holder and Insert Selection
o Excel exportation to Catia
o Report Production
25
Figure 11. Program Workflow
3.1 Catalog
In order for the program to have the necessary information regarding toolholders, inserts,
and cutting parameters it is necessary for the user to create a catalog which Catia can
26
use and contains all of the necessary items for the operations. This catalog has been
created in Excel and uploaded into Catia. If this program was analyzing the process for
different materials the recommended cutting parameters would have to be actively linked
to the VBA macro and then the catalog would have to be altered within Catia to permit
the correct cutting parameters to be used. As mentioned earlier, this catalog is a bit
simpler just for purposes of time saving. There are well defined processes for making tool
catalogs within Catia and the process used for the purpose of this thesis does not deviate
greatly from this normalized process. It involves making a CSV sheet and uploading it
into Catia through VBScript and then placing the created library where it can be accessed
upon start-up by Catia. A brief look at the tool catalog is shown in Figure 12.
27
3.2 Process Planning
The process planning part of this program leans heavily upon the strengths of Catia. Since
Catia has many machining safeguards in place, such as collision protection, it is possible
to create a rough outline and take advantage of the work which Catia does for the
program. For instance it is always normal that the first operation will be a roughing
operation. The program simply produces a roughing sketch which serves as the tool path
and then selects toolholder and insert according to the geometry of the final piece and
how much can actually be machined during the roughing phase. The same general
process can be used for the finishing process; a simple sketch used as the path for the
machining to follow. For the notch feature the logic is exactly the same. There are of
course many different options and variables which may improve the machining process
but they are very easily entered via the Catia Lathe Machining Workbench.
The original input geometry production is quite simple and always starts at the (0,0,0)
point and moves lengthwise towards the positive direction of the Z-axis which simplifies
our exportation to Catia afterwards. The input gives a section view of the part which will
then be revolved around the main axis creating a cylindrical part.
The geometrical input is as follows. First the user is asked to specify billet length, billet
diameter, and finished piece length. These are all mandatory for the geometry creation.
Then the user enters information regarding how the geometry will change. There are
possibilities of line, chamfer, radius, and notch features. Inside each feature the code is
outputting the correct points to the Excel worksheet and they are combined into lines
when exported to Catia. There is also the possibility to edit the values which have already
been entered through the userform which makes it quite userfriendly.
Once the process has been selected it is a simple manner to select the toolholder and
the insert. The toolholder must be selected first, and simply involves matching the process
with the correct sort of toolholder. The program for this thesis will select one of each
28
toolholder that is possible with the geometry of the process and then select the insert
which will have the fastest machining time with this insert. This generally means the part
which has the largest cutting depth, but not always. Using practical knowledge the
program will only use tools that are effective for the geometries demanded as changing
tools too often can mean a longer machining time. Effectively this means that the program
looks at the volume to be machined and makes a case on what type of tool should be
selected according to how well that certain tool can machine that area.
The exportation to Catia will only occur once all of the values that are necessary have
been preselected for each process. Unfortunately, there is no accessible library for the
lathe machining workbench within Catia. This means that everything will be produced, up
until the point where the machining workbench would be opened. The user can utilize the
report which is produced in order to enter the relevant values in the machining workbench.
In the Program Demonstration chapter the entire process will be shown as one without
any real difficulties. This also allows some human knowledge to come within the process
and ensure a highly optimized process is produced on the first time.
The production of a final report is a simple process as the relevant parameters were
already resolved before any exportation to Catia. The report contains a list of toolholders
and inserts used, processes, power used, and all of the relevant machining values. This
is the necessary information for any machining process so although the values will not be
entered automatically it spares the user from having to sift through the massive metal
cutting tool catalogs in order to collect all of the relevant data.
29
4 Program Demonstration
This chapter will mostly just consist of pictures demonstrating the process which must be
gone through in order for the simulation to be produced
The first step is to introduce the data. Figure 13 demonstrates how the program writes
the necessary points to Excel. First the user must enter in all the information above the
Geometry Entry box. Then the user can select which kind of feature to introduce and
follow the instructions given. The Z and X coordinates are placed into an Excel sheet but
are also able to be edited within the userform by clicking the edit button, making the
necessary change in the Points section, and then clicking save edit. This will update all
coordinates which are affected by the change both within the userform and within the
Excel sheet as well.
30
Figure 14 demonstrates the points which have been uploaded into the Excel file. It also
shows some of the extra cells which are filled that give information on features which will
be enacted once the data is sent to Catia. The third column represents origin points for
instance, while the fourth represents a radius value.
31
Figure 15. Prepared Product: Ready for Machining
32
default reference machining axis upon the other axis which is shown in the product
already. This is very important as it tells the machine where the part is and where to
change tools. If the axis is accidentally on the wrong end then the machine may designate
a tool changing point which is inside the part’s geometry. After the Origin is selected; Part
1 is inserted as the design piece and Part 2 as the billet. After these all have been entered
then it is already time to start entering the machining parameters.
34
When setting up the second side everything is identical as when setting up the first side,
except that when setting up the axis system it is critical that one marks the z axis as
negative so that the tool changing point is once again in the correct position away from
the piece.
35
Figure 22. Part Operation 2 Finalized
36
Figure 24. NC Code Generation
As mentioned earlier, producing the NC code once the simulation has been run is a very
simple task. With a right click upon the manufacturing program it is possible to get to the
menu to generate NC code. With this the purpose of the simulation is done and the part
can be ready to be manufactured provided everything has been entered correctly.
37
5 Conclusion
The conclusion section states the limitations of this project, makes recommendations on
how to further improve upon this program, reflects on the program and the process of
creating it, and closes with a final conclusion.
5.1 Limitations
One limitation for this project is the fact that the tool catalog is so small. This is something
that could easily be remedied. For instance, if a machine shop already knows which
inserts and tools they are usually using then it is simple to enter these and add new ones
as necessary.
Another issue with this program is it can hang up if the geometry starts to get more
complicated and then takes a rather long time to solve the geometries and machining
parameters or it will simply end up shutting down Excel. This may have something to do
with the programming not being done professionally or by someone with a lot of
experience.
Obviously the biggest issue with this project has been the fact that it is not possible to
write VBA macros that allow one to manipulate the data within the machining workbench.
This has meant that the process planning part has fallen far short of what it could be and
the simulation process has not been able to be automated.
5.2 Recommendations
It is recommended that whoever is expanding upon this program expand the catalog and
link all the necessary information regarding the cutting parameters.
Another upgrade that would improve the project immensely would be the availability of a
way to read geometry and plot points directly from either a 2D drawing or a 3D model as
it would really streamline the process.
The process planning situation could definitely be improved since it does not have the
Catia capabilities to depend on to perform automatically, but it is suitable for simple
38
geometries at the moment. If the program is to be expanded to tackle more complicated
geometries then it is necessary to take a more exhaustive approach.
It would likely be nicer to be able to program in .Net which would require an upgrade to
Catia v6. It would be nice to program in .Net because then the user can have a bit more
flexibility and would also be able to create a proper, standalone application. Excel VBA
works, but sometimes its limitations are quite obvious and things just do not work
correctly. It also requires some very interesting workarounds at points where it just
does not have the functions which some other, more advanced programming languages
will have.
Another recommendation is to look into using a different CAM program which allows one
to fully program within the machining workbench. This could allow the program to be able
to be fully fleshed out if the proper CAM program is found which effectively produces high
quality machining simulations and that can be fully accessed via programming.
5.3 Reflections
This thesis project has in some ways been disappointing, but in other ways very eye-
opening and educational. Despite the author not having much programming experience,
everything has been able to be programmed. Although it is certain that some of the
solutions are not optimal and could be improved, this programming has helped lead to a
different way to look at the machining process as well as how CAD/CAM programs are
structured and operate.
In closing, this is definitely a type of system that could be improved upon and adapted to
more difficult geometries, but it should not solely be an individual project as the amount
of work is rather large and errors are difficult to spot and resolve with just one person.
This program would definitely be a help to any machine shop which is making these sort
of simple turning geometries because it will enable the user to quickly reach the simulation
verification point and NC production. These simulations enable the user to ensure the
process is running smoothly and the Catia lathe machining workbench offers a lot of ways
to easily adjust and optimize the machining program and produce NC code.
39
This thesis work has resulted in a much better understanding of programming, machining,
and CAD/CAM programs and has still succeeded in fulfilling two out of three objectives.
The process does not require too much user input and also will be easy to adopt for more
complicated geometries, but of course it falls short on one objective which was the fully
automated turning simulation. In conclusion the program is a success, but not a complete
success: it is something that enables the engineer to save time and concentrate on
optimizing the turning process while being easy and quick to use.
Figures
Figure 7. Product Ready for Manufacturing Process. Note the Origin on the Billet Face.
40
Figure 19. Part Operation 1 Finalized
List of references
Appendices
A. VBA Script
'*********************************************************
'*This sub marks the center point according to the user's desire.
'**********************************************************
Private Sub Center_Click()
Sheet1.Activate
LastRowA = Cells(Rows.Count, "A").End(xlUp).Row
Cells(LastRowA, 9) = 1
End Sub
Sheet1.Activate
'Declaration
Dim arrayz(15)
'Storing values in the array
arrayz(1) = z1.Value
arrayz(2) = z2.Value
arrayz(3) = z3.Value
arrayz(4) = z4.Value
arrayz(5) = z5.Value
arrayz(6) = z6.Value
arrayz(7) = z7.Value
arrayz(8) = z8.Value
arrayz(9) = z9.Value
arrayz(10) = z10.Value
arrayz(11) = z11.Value
arrayz(12) = z12.Value
arrayz(13) = z13.Value
arrayz(14) = z14.Value
arrayz(15) = z15.Value
'Declaration
Dim arrayx(15)
'Storing values in the array
arrayx(1) = x1.Value
arrayx(2) = x2.Value
arrayx(3) = x3.Value
arrayx(4) = x4.Value
arrayx(5) = x5.Value
arrayx(6) = x6.Value
arrayx(7) = x7.Value
arrayx(8) = x8.Value
arrayx(9) = x9.Value
arrayx(10) = x10.Value
arrayx(11) = x11.Value
42
arrayx(12) = x12.Value
arrayx(13) = x13.Value
arrayx(14) = x14.Value
arrayx(15) = x15.Value
'Declaration
Dim arrayf(15)
'Storing values in the array
arrayf(1) = f1.Value
arrayf(2) = f2.Value
arrayf(3) = f3.Value
arrayf(4) = f4.Value
arrayf(5) = f5.Value
arrayf(6) = f6.Value
arrayf(7) = f7.Value
arrayf(8) = f8.Value
arrayf(9) = f9.Value
arrayf(10) = f10.Value
arrayf(11) = f11.Value
arrayf(12) = f12.Value
arrayf(13) = f13.Value
arrayf(14) = f14.Value
arrayf(15) = f15.Value
'Declaration
Dim arrays(15)
'Storing values in the array
arrays(1) = s1.Value
arrays(2) = s2.Value
arrays(3) = s3.Value
arrays(4) = s4.Value
arrays(5) = s5.Value
arrays(6) = s6.Value
arrays(7) = s7.Value
arrays(8) = s8.Value
arrays(9) = s9.Value
arrays(10) = s10.Value
arrays(11) = s11.Value
arrays(12) = s12.Value
arrays(13) = s13.Value
arrays(14) = s14.Value
arrays(15) = s15.Value
'closes the ability to edit until the edit button is once again pressed
Points.Enabled = False
43
End Sub
'*********************************************************
'*
'*This sub sets up the product. It first creates the geometry of the finished piece according
to the points entered
'*Using geometrical methods, the sketch is completely produced.
'*Then it produces the geometry of the billet
'*Next it produces a product of the two combined
'*Finally it places an axis which will be used for machining on the product
'*
'***********************************************************
'***********************************************************
'*
'*Set up connection between Catia and Excel
'*If Catia is not on, then it will be started
'*
'***********************************************************
Dim CATIA As Object
'*********************************************************
'*
'*Connect to the relevant Catia libraries
'*Create the finished piece geometry
'*Import all points
'*Connect points with lines or radius as desired
'*Rotate sketch around center axis to create revolved shape
'*
'**********************************************************
Dim myDocument As Documents
Set myDocument = CATIA.Documents
44
Dim part1 As Part
Set part1 = partDocument1.Part
'*********************************************************
'import all points
'**********************************************************
Sheet1.Activate
LastRowA = Cells(Rows.Count, "A").End(xlUp).Row
Dim i As Integer
i=1
Do While i < (LastRowA + 1)
Dim point2D1 As Point2D
Set point2D1 = factory2D1.CreatePoint(Cells(i, 1).Value, Cells(i, 2).Value)
i=i+1
Loop
'*********************************************************
'Connect all points with line or radius as desired
'*********************************************************
Dim j As Integer
j=2
Do While j < (LastRowA - 1)
Dim line2D1 As Line2D
45
Set line2D1 = factory2D1.CreateLine(Cells(j, 1).Value, Cells(j, 2).Value, Cells(j + 1,
1).Value, Cells(j + 1, 2).Value)
j=j+1
Loop
'*********************************************************
'Close sketch along the axis
'*********************************************************
Set line2D1 = factory2D1.CreateLine(Cells(2, 1).Value, Cells(2, 2).Value,
Cells(LastRowA - 1, 1).Value, Cells(LastRowA - 1, 2).Value)
sketch1.CloseEdition
'*********************************************************
'Revolve sketch to create finished part
'*********************************************************
Dim My_Shaft As Shaft
Set My_Shaft = part1.ShapeFactory.AddNewShaft(sketch1)
Dim geometricElements1 As GeometricElements
Set geometricElements1 = sketch1.GeometricElements
Dim axis2d1 As Axis2D
Set axis2d1 = geometricElements1.Item("AbsoluteAxis")
Dim reference2 As Reference
Set reference2 = axis2d1.GetItem("HDirection")
My_Shaft.RevoluteAxis = reference2
'*********************************************************
'Sketches Notch sketches
'*********************************************************
Dim k As Integer
k=1
46
Do While k <= LastRowA
If Cells(k, 10).Value = 1 Then
Dim sketch12 As Sketch
Set sketch12 = sketches1.Add(reference1)
k=k+1
Loop
'*********************************************************
'*
'*The following will create a sketch which can be used for both Roughing and Finishing
operations
'*Catia will automatically detect collisions if you enable it
'*This allows the program to use the strengths of Catia
'*
'**********************************************************
'*********************************************************
'Find roughing and finishing sketch
'*********************************************************
LastRowA = Cells(Rows.Count, "A").End(xlUp).Row
Dim l As Integer
l=2
Dim sketch13 As Sketch
Set sketch13 = sketches1.Add(reference1)
47
Set factory2D13 = sketch13.OpenEdition
Dim line2D13 As Line2D
Do While l < LastRowA
'*********************************************************
'Creates a straight line over the notch feature
'*********************************************************
If Cells(l, 10).Value = 1 Then
sketch13 = hb1.HybridSketches.Add(BasePlane)
spa As SPAWorkbench
spa = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
Dim c1(1), c2(1)
Dim b1(1), b2(1)
Dim vRef = spa.GetMeasurable (Line1).GetMinimumDistance (Line2)
48
Dim refPoint1 As Point2D
Dim refPoint2 As Point2D
Dim C As Constraint
Line1.StartPoint.GetCoordinates (c1)
Line1.EndPoint.GetCoordinates (c2)
Line2.StartPoint.GetCoordinates (b1)
Line2.EndPoint.GetCoordinates (b2)
If
Math.Round(spa.GetMeasurable(Line1.StartPoint).GetMinimumDistance(Line2.StartPoi
nt) - vRef, 4) = 0 Then
refPoint1 = Line1.StartPoint
refPoint2 = Line2.StartPoint
ElseIf
Math.Round(spa.GetMeasurable(Line1.StartPoint).GetMinimumDistance(Line2.EndPoin
t) - vRef, 4) = 0 Then
refPoint1 = Line1.StartPoint
refPoint2 = Line2.EndPoint
ElseIf
Math.Round(spa.GetMeasurable(Line1.EndPoint).GetMinimumDistance(Line2.StartPoin
t) - vRef, 4) = 0 Then
refPoint1 = Line1.EndPoint
refPoint2 = Line2.StartPoint
ElseIf
Math.Round(spa.GetMeasurable(Line1.EndPoint).GetMinimumDistance(Line2.EndPoint
) - vRef, 4) = 0 Then
refPoint1 = Line1.EndPoint
refPoint2 = Line2.EndPoint
End If
49
C.Dimension.Value = Radius
CenterPoint.GetCoordinates (c1)
part1.Update
'*********************************************************
'save finished piece as "part1.CATPart"
'to save in a different location this must be changed manually
'*********************************************************
CATIA.ActiveDocument.SaveAs "C:\Users\Raisanen\Documents\CATIA\Raisanen
Thesis\part1"
'*********************************************************
50
'*
'*Create the billet geometry
'*Create all points
'*Connect points with lines
'*Rotate sketch around center axis to create revolved shape
'*
'**********************************************************
'*********************************************************
'Enter necessary points according to the billet geometry
'*********************************************************
Dim point2D2 As Point2D
Set point2D2 = factory2D2.CreatePoint(0, 0)
Set point2D2 = factory2D2.CreatePoint(0, BilletDia / 2)
Set point2D2 = factory2D2.CreatePoint(BilletLength, BilletDia / 2)
Set point2D2 = factory2D2.CreatePoint(BilletLength, 0)
51
'*********************************************************
'Set up all lines for the billet
'*********************************************************
Dim line2D2 As Line2D
Set line2D2 = factory2D2.CreateLine(0, 0, 0, (BilletDia / 2))
Set line2D2 = factory2D2.CreateLine(0, (BilletDia / 2), BilletLength, (BilletDia / 2))
Set line2D2 = factory2D2.CreateLine(BilletLength, (BilletDia / 2), BilletLength, 0)
Set line2D2 = factory2D2.CreateLine(BilletLength, 0, 0, 0)
sketch1.CloseEdition
'*********************************************************
'Create the revolved solid
'*********************************************************
Dim My_Shaft2 As Shaft
Set My_Shaft2 = part2.ShapeFactory.AddNewShaft(sketch2)
Dim geometricElements2 As GeometricElements
Set geometricElements2 = sketch2.GeometricElements
Dim axis2d2 As Axis2D
Set axis2d2 = geometricElements2.Item("AbsoluteAxis")
Dim reference4 As Reference
Set reference4 = axis2d2.GetItem("HDirection")
My_Shaft2.RevoluteAxis = reference4
'*********************************************************
'*
'*Create the proper axis system for the first phase of machining
'*Involves defining a new axis
'*Similar process will have to occur once more for the second phase
'*
'**********************************************************
Dim oPartDocument As PartDocument
Dim oPart As Part
Dim oAxis As Object 'Actual type is AxisSystem, but some properties & methods are
marked "restricted" unless we late bind the type.
'Create the axis, configure how the vectors & origin are defined
Set oAxis = oPart.AxisSystems.Add
oAxis.Type = catAxisSystemStandard
52
Dim oReference As Reference
Set oReference =
oPart.CreateReferenceFromObject(oPart.HybridBodies.Item(1).HybridShapes.Item("Poi
nt.10"))
oAxis.ZAxisDirection = oReference
'*********************************************************
'Save billet part as "part2.CATPart"
'To save in a different location this must be changed manually
'*********************************************************
part2.Update
CATIA.ActiveDocument.SaveAs "C:\Users\Raisanen\Documents\CATIA\Raisanen
Thesis\part2"
'*********************************************************
'*
'*This saves the product which contains the new axis system as "product1.CATProduct"
'*The path must be manually changed to save in a different location
'*
'**********************************************************
Set documents1 = CATIA.Documents
Set productDocument1 = documents1.Add("Product")
Set product1 = productDocument1.Product
Set products1 = product1.Products
Dim arrayOfVariantOfBSTR1(0)
arrayOfVariantOfBSTR1(0) = "C:\Users\Raisanen\Documents\CATIA\Raisanen
Thesis\part1.CATPart"
products1.AddComponentsFromFiles arrayOfVariantOfBSTR1, "All"
53
Dim arrayOfVariantOfBSTR2(0)
arrayOfVariantOfBSTR2(0) = "C:\Users\Raisanen\Documents\CATIA\Raisanen
Thesis\part2.CATPart"
products1.AddComponentsFromFiles arrayOfVariantOfBSTR2, "All"
CATIA.ActiveDocument.SaveAs "C:\Users\Raisanen\Documents\CATIA\Raisanen
Thesis\product1"
End Sub
'*********************************************************
'*
'*This sub calculates which tools should be used for which operation
'*Outputs to a small report form in Sheet3
'*The data comes from the tool catalog
'*
'**********************************************************
Private Sub Export2_Click()
Sheet1.Activate
Sheet2.Activate
LastRowA = Cells(Rows.Count, "A").End(xlUp).Row
'*********************************************************
'calculate if round inserts will work for the roughing and if it is worth using
'volume to be removed if it is high proportionwise then circle insert will be used, high>33%
'then applies tools for finishing and notch features as appropriate
'*********************************************************
Dim m As Integer
m=1
Dim Catalog As Worksheet
Dim Report As Worksheet
Dim sourceRange As Range
Dim destRange As Range
54
With wsrep
Set destRange = .Range(.Cells(2, 1), .Cells(2, 12))
End With
With wscat
Set sourceRange = .Range(.Cells(3, 1), .Cells(3, 12))
End With
destRange.Value = sourceRange.Value
Else
With wsrep
Set destRange = .Range(.Cells(2, 1), .Cells(2, 12))
End With
With wscat
Set sourceRange = .Range(.Cells(2, 1), .Cells(2, 12))
End With
destRange.Value = sourceRange.Value
End If
Else
With wsrep
Set destRange = .Range(.Cells(2, 1), .Cells(2, 12))
End With
With wscat
Set sourceRange = .Range(.Cells(5, 1), .Cells(5, 12))
End With
destRange.Value = sourceRange.Value
End If
With wsrep
Set destRange = .Range(.Cells(3, 1), .Cells(3, 12))
End With
With wscat
Set sourceRange = .Range(.Cells(4, 1), .Cells(4, 12))
End With
destRange.Value = sourceRange.Value
55
With wsrep
Set destRange = .Range(.Cells(5, 1), .Cells(5, 12))
End With
With wscat
Set sourceRange = .Range(.Cells(2, 1), .Cells(2, 12))
End With
destRange.Value = sourceRange.Value
End If
Else
With wsrep
Set destRange = .Range(.Cells(5, 1), .Cells(5, 12))
End With
With wscat
Set sourceRange = .Range(.Cells(5, 1), .Cells(5, 12))
End With
destRange.Value = sourceRange.Value
End If
With wsrep
Set destRange = .Range(.Cells(6, 1), .Cells(6, 12))
End With
With wscat
Set sourceRange = .Range(.Cells(4, 1), .Cells(4, 12))
End With
destRange.Value = sourceRange.Value
With wsrep
Set destRange = .Range(.Cells(7, 1), .Cells(7, 12))
End With
With wscat
Set sourceRange = .Range(.Cells(6, 1), .Cells(6, 12))
End With
destRange.Value = sourceRange.Value
End Sub
'*********************************************************
'*
'*This sub sends the user entered data to the Excel sheet as coordinates
'*It automatically solves for radius, chamfer, and notch features
'*Solves for correct point placement
'*
'*********************************************************
Private Sub SendData_Click()
Dim emptyRow As Long
'*********************************************************
56
'*Enters in the first few values which are only dependent on finished length and billet
length
'*********************************************************
Sheet1.Activate
Cells(1, 1).Value = 0
z1 = 0
Cells(1, 2).Value = 0
x1 = 0
Cells(1, 3).Value = 1
s3 = "Origin"
i = (BilletLength - FinishedLength) / 2
Cells(2, 1).Value = i
z2 = i
Cells(2, 2).Value = 0
x2 = 0
Dim arrayz(15)
Dim arrayx(15)
Dim arrayf(15)
Dim arrays(15)
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
LastRowA = Cells(Rows.Count, "A").End(xlUp).Row
Dim z As Integer
Const radians As Double = 3.14159265358979 / 180
'*********************************************************
'Automatically detects if the piece has finished already
'*Check 1
'*********************************************************
If Cells(LastRowA, 2).Value = 0 And Cells(LastRowA, 1).Value > 0 And Cells(LastRowA
- 1, 1).Value > 0 Then
Instructions.Text = "Geometry is now closed, Press Export to produce simulation and
Excel Report"
Cells(emptyRow, 1).Value = FinishedLength
arrayz(emptyRow) = FinishedLength
Cells(emptyRow, 2).Value = 0
arrayx(emptyRow) = 0
Cells(emptyRow, 1).Value = BilletLength
arrayz(emptyRow) = BilletLength
Cells(emptyRow, 2).Value = 0
arrayx(emptyRow) = 0
Cells(emptyRow, 3).Value = 1
arrayf(emptyRow) = "Origin"
Else
End If
'*********************************************************
57
'Solves for the line feature depending on the length and the angle entered
'Second check if the piece is finished
'Angle is taken as 0 degrees coming from the clamping system in the Z direction
'*********************************************************
If UserEntry = "Line" Then
'*********************************************************
'Checks if there is a chamfer feature. If there is then the distance
'is counted from the line from where the chamfer begins.
'This first if statement is for a positive angled chamfer
'*********************************************************
If Cells(LastRowA, 5).Value > 0 Then
Cells(emptyRow, 1).Value = ((Cells(LastRowA, 1).Value - Cells(LastRowA, 5).Value)
+ Cos(Angles.Value * radians) * Dimensions.Value)
Cells(emptyRow, 2).Value = (Cells(LastRowA, 2).Value + Sin(Angles.Value * radians)
* Dimensions.Value)
arrayz(emptyRow) = Cells(emptyRow, 1).Value
arrayx(emptyRow) = Cells(emptyRow, 2).Value
Else
End If
'*********************************************************
'Checks if there is a chamfer feature. If there is then the distance
'is counted from the line from where the chamfer begins.
'This second if statement is for a negative angled chamfer
'*********************************************************
If Cells(LastRowA, 5).Value < 0 Then
Cells(emptyRow, 1).Value = (Cells(LastRowA, 1).Value + Cos(Angles.Value * radians)
* Dimensions.Value)
Cells(emptyRow, 2).Value = ((Cells(LastRowA, 2).Value + Cells(LastRowA, 5)) +
Sin(Angles.Value * radians) * Dimensions.Value)
arrayz(emptyRow) = Cells(emptyRow, 1).Value
arrayx(emptyRow) = Cells(emptyRow, 2).Value
Else
End If
'*********************************************************
'Normal line entry
'*********************************************************
If Cells(LastRowA, 5).Value = 0 Then
Cells(emptyRow, 1).Value = (Cells(LastRowA, 1).Value + Cos(Angles.Value * radians)
* Dimensions.Value)
Cells(emptyRow, 2).Value = (Cells(LastRowA, 2).Value + Sin(Angles.Value * radians)
* Dimensions.Value)
arrayz(emptyRow) = Cells(emptyRow, 1).Value
arrayx(emptyRow) = Cells(emptyRow, 2).Value
Else
End If
UserEntry = ""
58
If Cells(LastRowA, 2).Value = 0 And Cells(LastRowA - 1, 2).Value > 0 Then
Instructions.Text = "Geometry is now closed, Press Export to produce simulation and
Excel Report"
Cells(emptyRow, 1).Value = FinishedLength
Cells(emptyRow, 2).Value = 0
Cells(emptyRow, 3).Value = 1
arrayz(emptyRow) = Cells(emptyRow, 1).Value
arrayx(emptyRow) = Cells(emptyRow, 2).Value
arrayf(emptyRow) = "Origin"
Else
End If
Else
End If
'*********************************************************
'Marks that for this point a radius must be produced within Catia when doing the sketches
'*********************************************************
If UserEntry = "Radius" Then
Cells(LastRowA, 4).Value = Dimensions
UserEntry = ""
arrayf(LastRowA) = "Radius"
arrays(LastRowA) = Cells(LastRowA, 4).Value
Else
End If
'*********************************************************
'Solves for the Chamfer
'Modifies the last row to reflect the new end point
'Adds the second point according to the length
'*********************************************************
If UserEntry = "Chamfer" Then
Dim m As Double
Dim n As Double
If Angles > 0 Then
'*****************************************************
'*Positive geometry
'*****************************************************
m = Cells(LastRowA, 1).Value
n = Cells(LastRowA, 2).Value
Cells(LastRowA, 2).Value = n - (Cos(Angles) * Dimensions)
arrayx(LastRowA) = Cells(LastRowA, 2).Value
Cells(emptyRow, 1).Value = m + (Sin(Angles) * Dimensions)
arrayz(emptyRow) = Cells(emptyRow, 1).Value
Cells(emptyRow, 2).Value = n
arrayx(emptyRow) = Cells(emptyRow, 2).Value
59
Cells(emptyRow, 5).Value = (Sin(Angles) * Dimensions)
arrays(emptyRow) = Cells(emptyRow, 5).Value
arrayf(emptyRow) = "Chamfer"
Else
'*****************************************************
'*Negative geometry
'*****************************************************
m = Cells(LastRowA, 1).Value
n = Cells(LastRowA, 2).Value
Cells(LastRowA, 1).Value = m - (Sin(Angles) * Dimensions)
arrayz(LastRowA) = Cells(LastRowA, 1).Value
Cells(emptyRow, 1).Value = m
arrayz(emptyRow) = Cells(emptyRow, 1).Value
Cells(emptyRow, 2).Value = n - (Cos(Angles) * Dimensions)
arrayx(emptyRow) = Cells(emptyRow, 2).Value
Cells(emptyRow, 5).Value = (Cos(Angles) * Dimensions)
arrays(emptyRow) = Cells(emptyRow, 5).Value
arrayf(emptyRow) = "Chamfer"
UserEntry = ""
End If
End If
'*********************************************************
'Solves for the notch feature based on length and depth
'*********************************************************
If UserEntry = "Notch" Then
Cells(LastRowA, 10).Value = 1
arrayf(LastRowA) = "Notch"
Cells(emptyRow, 1).Value = Cells(LastRowA, 1).Value
arrayz(emptyRow) = Cells(emptyRow, 1).Value
Cells(emptyRow, 2).Value = Cells(LastRowA, 2).Value - Angles
arrayx(emptyRow) = Cells(emptyRow, 2).Value
Cells(emptyRow, 10).Value = 1
arrayf(emptyRow) = "Notch"
Cells(emptyRow + 1, 1).Value = Cells(emptyRow, 1).Value + Dimensions
arrayz(emptyRow + 1) = Cells(emptyRow + 1, 1).Value
Cells(emptyRow + 1, 2).Value = Cells(emptyRow, 2).Value
arrayx(emptyRow + 1) = Cells(emptyRow + 1, 2).Value
Cells(emptyRow + 1, 10).Value = 1
arrayf(emptyRow + 1) = "Notch"
Cells(emptyRow + 2, 1).Value = Cells(emptyRow + 1, 1).Value
arrayz(emptyRow + 2) = Cells(emptyRow + 2, 1).Value
Cells(emptyRow + 2, 2).Value = Cells(emptyRow + 1, 2).Value + Angles
arrayx(emptyRow + 2) = Cells(emptyRow + 2, 2).Value
Cells(emptyRow + 2, 10).Value = 1
arrayf(emptyRow + 2) = "Notch"
60
UserEntry = ""
Else
End If
x1 = arrayx(1)
x2 = arrayx(2)
x3 = arrayx(3)
x4 = arrayx(4)
x5 = arrayx(5)
x6 = arrayx(6)
x7 = arrayx(7)
x8 = arrayx(8)
61
x9 = arrayx(9)
x10 = arrayx(10)
x11 = arrayx(11)
x12 = arrayx(12)
x13 = arrayx(13)
x14 = arrayx(14)
x15 = arrayx(15)
f1 = arrayf(1)
f2 = arrayf(2)
f3 = arrayf(3)
f4 = arrayf(4)
f5 = arrayf(5)
f6 = arrayf(6)
f7 = arrayf(7)
f8 = arrayf(8)
f9 = arrayf(9)
f10 = arrayf(10)
f11 = arrayf(11)
f12 = arrayf(12)
f13 = arrayf(13)
f14 = arrayf(14)
f15 = arrayf(15)
s1 = arrays(1)
s2 = arrays(2)
s3 = arrays(3)
s4 = arrays(4)
s5 = arrays(5)
s6 = arrays(6)
s7 = arrays(7)
s8 = arrays(8)
s9 = arrays(9)
s10 = arrays(10)
s11 = arrays(11)
s12 = arrays(12)
s13 = arrays(13)
s14 = arrays(14)
s15 = arrays(15)
End Sub
62
'*********************************************************
'Depending on the operation chosen will give different instructions to the user
'*********************************************************
End Sub
'*********************************************************
'*
'Initalizes the UserForm for use
'*
'*********************************************************
Private Sub UserForm_Initialize()
'Empty MachineType
MachineType.Clear
'Fill MachineType
With MachineType
.AddItem "Catia predetermined(max n=10000rpm)"
.AddItem "Only Catia predetermined currently available"
End With
63
'Empty MaterialType
MaterialType.Clear
'Fill MaterialType
With MaterialType
.AddItem "Aluminum alloy"
.AddItem "Only Alumnimum alloy with current catalog"
End With
'Empty BilletDia
BilletDia.Value = ""
'Empty BilletLength
BilletLength.Value = ""
'Fill FinishQuality
With FinishQuality
.AddItem "ISO 2768-mK"
.AddItem "Only ISO 2768-mK with current catalog"
End With
'Fill UserEntry
With UserEntry
.AddItem "Line"
.AddItem "Radius"
.AddItem "Chamfer"
.AddItem "Notch"
.AddItem ""
End With
'Empty Dimensions
Dimensions.Clear
End Sub
'*********************************************************
'*
'Allows the user to edit the variables without having to exit the macro
'There is one sub for each textbox with the 'Z' variable
'Only the first will be explained
'*
'*********************************************************
Private Sub z3_AfterUpdate()
64
Dim val As Long
65
End If
If arrayz(8) <> 0 Then
z9 = arrayz(8) + val
arrayz(8) = z9
End If
If arrayz(9) <> 0 Then
z10 = arrayz(9) + val
arrayz(9) = z10
End If
If arrayz(10) <> 0 Then
z11 = arrayz(10) + val
arrayz(10) = z11
End If
If arrayz(11) <> 0 Then
z12 = arrayz(11) + val
arrayz(11) = z12
End If
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
End Sub
arrayz(0) = z1.Value
arrayz(1) = z2.Value
arrayz(2) = z3.Value
66
arrayz(3) = z4.Value
arrayz(4) = z5.Value
arrayz(5) = z6.Value
arrayz(6) = z7.Value
arrayz(7) = z8.Value
arrayz(8) = z9.Value
arrayz(9) = z10.Value
arrayz(10) = z11.Value
arrayz(11) = z12.Value
arrayz(12) = z13.Value
arrayz(13) = z14.Value
arrayz(14) = z15.Value
Sheet1.Activate
val = arrayz(3) - Cells(4, 1).Value
If arrayz(3) <> 0 Then
z4 = arrayz(3) + val
arrayz(3) = z4
End If
If arrayz(4) <> 0 Then
z5 = arrayz(4) + val
arrayz(4) = z5
End If
If arrayz(5) <> 0 Then
z6 = arrayz(5) + val
arrayz(5) = z6
End If
If arrayz(6) <> 0 Then
z7 = arrayz(6) + val
arrayz(6) = z7
End If
If arrayz(7) <> 0 Then
z8 = arrayz(7) + val
arrayz(7) = z8
End If
If arrayz(8) <> 0 Then
z9 = arrayz(8) + val
arrayz(8) = z9
End If
If arrayz(9) <> 0 Then
z10 = arrayz(9) + val
arrayz(9) = z10
End If
If arrayz(10) <> 0 Then
z11 = arrayz(10) + val
arrayz(10) = z11
End If
67
If arrayz(11) <> 0 Then
z12 = arrayz(11) + val
arrayz(11) = z12
End If
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
End Sub
arrayz(0) = z1.Value
arrayz(1) = z2.Value
arrayz(2) = z3.Value
arrayz(3) = z4.Value
arrayz(4) = z5.Value
arrayz(5) = z6.Value
arrayz(6) = z7.Value
arrayz(7) = z8.Value
arrayz(8) = z9.Value
arrayz(9) = z10.Value
arrayz(10) = z11.Value
arrayz(11) = z12.Value
arrayz(12) = z13.Value
arrayz(13) = z14.Value
arrayz(14) = z15.Value
Sheet1.Activate
68
val = arrayz(4) - Cells(5, 1).Value
If arrayz(4) <> 0 Then
z5 = arrayz(4) + val
arrayz(4) = z5
End If
If arrayz(5) <> 0 Then
z6 = arrayz(5) + val
arrayz(5) = z6
End If
If arrayz(6) <> 0 Then
z7 = arrayz(6) + val
arrayz(6) = z7
End If
If arrayz(7) <> 0 Then
z8 = arrayz(7) + val
arrayz(7) = z8
End If
If arrayz(8) <> 0 Then
z9 = arrayz(8) + val
arrayz(8) = z9
End If
If arrayz(9) <> 0 Then
z10 = arrayz(9) + val
arrayz(9) = z10
End If
If arrayz(10) <> 0 Then
z11 = arrayz(10) + val
arrayz(10) = z11
End If
If arrayz(11) <> 0 Then
z12 = arrayz(11) + val
arrayz(11) = z12
End If
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
69
Dim Destination As Range
Set Destination = Range("A1")
Set Destination = Destination.Resize(UBound(arrayz), 1)
Destination.Value = Application.Transpose(arrayz)
End Sub
arrayz(0) = z1.Value
arrayz(1) = z2.Value
arrayz(2) = z3.Value
arrayz(3) = z4.Value
arrayz(4) = z5.Value
arrayz(5) = z6.Value
arrayz(6) = z7.Value
arrayz(7) = z8.Value
arrayz(8) = z9.Value
arrayz(9) = z10.Value
arrayz(10) = z11.Value
arrayz(11) = z12.Value
arrayz(12) = z13.Value
arrayz(13) = z14.Value
arrayz(14) = z15.Value
Sheet1.Activate
val = arrayz(5) - Cells(6, 1).Value
If arrayz(5) <> 0 Then
z6 = arrayz(5) + val
arrayz(5) = z6
End If
If arrayz(6) <> 0 Then
z7 = arrayz(6) + val
arrayz(6) = z7
End If
If arrayz(7) <> 0 Then
z8 = arrayz(7) + val
arrayz(7) = z8
End If
If arrayz(8) <> 0 Then
z9 = arrayz(8) + val
arrayz(8) = z9
End If
70
If arrayz(9) <> 0 Then
z10 = arrayz(9) + val
arrayz(9) = z10
End If
If arrayz(10) <> 0 Then
z11 = arrayz(10) + val
arrayz(10) = z11
End If
If arrayz(11) <> 0 Then
z12 = arrayz(11) + val
arrayz(11) = z12
End If
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
arrayz(0) = z1.Value
arrayz(1) = z2.Value
arrayz(2) = z3.Value
arrayz(3) = z4.Value
arrayz(4) = z5.Value
arrayz(5) = z6.Value
arrayz(6) = z7.Value
arrayz(7) = z8.Value
71
arrayz(8) = z9.Value
arrayz(9) = z10.Value
arrayz(10) = z11.Value
arrayz(11) = z12.Value
arrayz(12) = z13.Value
arrayz(13) = z14.Value
arrayz(14) = z15.Value
Sheet1.Activate
val = arrayz(6) - Cells(7, 1).Value
If arrayz(6) <> 0 Then
z7 = arrayz(6) + val
arrayz(6) = z7
End If
If arrayz(7) <> 0 Then
z8 = arrayz(7) + val
arrayz(7) = z8
End If
If arrayz(8) <> 0 Then
z9 = arrayz(8) + val
arrayz(8) = z9
End If
If arrayz(9) <> 0 Then
z10 = arrayz(9) + val
arrayz(9) = z10
End If
If arrayz(10) <> 0 Then
z11 = arrayz(10) + val
arrayz(10) = z11
End If
If arrayz(11) <> 0 Then
z12 = arrayz(11) + val
arrayz(11) = z12
End If
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
72
Dim Destination As Range
Set Destination = Range("A1")
Set Destination = Destination.Resize(UBound(arrayz), 1)
Destination.Value = Application.Transpose(arrayz)
End Sub
Private Sub z8_AfterUpdate()
Dim val As Long
Dim arrayz(14) As Variant
arrayz(0) = z1.Value
arrayz(1) = z2.Value
arrayz(2) = z3.Value
arrayz(3) = z4.Value
arrayz(4) = z5.Value
arrayz(5) = z6.Value
arrayz(6) = z7.Value
arrayz(7) = z8.Value
arrayz(8) = z9.Value
arrayz(9) = z10.Value
arrayz(10) = z11.Value
arrayz(11) = z12.Value
arrayz(12) = z13.Value
arrayz(13) = z14.Value
arrayz(14) = z15.Value
Sheet1.Activate
val = arrayz(7) - Cells(8, 1).Value
If arrayz(7) <> 0 Then
z8 = arrayz(7) + val
arrayz(7) = z8
End If
If arrayz(8) <> 0 Then
z9 = arrayz(8) + val
arrayz(8) = z9
End If
If arrayz(9) <> 0 Then
z10 = arrayz(9) + val
arrayz(9) = z10
End If
If arrayz(10) <> 0 Then
z11 = arrayz(10) + val
arrayz(10) = z11
End If
If arrayz(11) <> 0 Then
z12 = arrayz(11) + val
arrayz(11) = z12
End If
73
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
74
z10 = arrayz(9) + val
arrayz(9) = z10
End If
If arrayz(10) <> 0 Then
z11 = arrayz(10) + val
arrayz(10) = z11
End If
If arrayz(11) <> 0 Then
z12 = arrayz(11) + val
arrayz(11) = z12
End If
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
75
arrayz(13) = z14.Value
arrayz(14) = z15.Value
Sheet1.Activate
val = arrayz(9) - Cells(10, 1).Value
If arrayz(9) <> 0 Then
z10 = arrayz(9) + val
arrayz(9) = z10
End If
If arrayz(10) <> 0 Then
z11 = arrayz(10) + val
arrayz(10) = z11
End If
If arrayz(11) <> 0 Then
z12 = arrayz(11) + val
arrayz(11) = z12
End If
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
End Sub
76
arrayz(6) = z7.Value
arrayz(7) = z8.Value
arrayz(8) = z9.Value
arrayz(9) = z10.Value
arrayz(10) = z11.Value
arrayz(11) = z12.Value
arrayz(12) = z13.Value
arrayz(13) = z14.Value
arrayz(14) = z15.Value
Sheet1.Activate
val = arrayz(10) - Cells(11, 1).Value
If arrayz(10) <> 0 Then
z11 = arrayz(10) + val
arrayz(10) = z11
End If
If arrayz(11) <> 0 Then
z12 = arrayz(11) + val
arrayz(11) = z12
End If
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
End Sub
Private Sub z12_AfterUpdate()
Dim val As Long
Dim arrayz(14) As Variant
arrayz(0) = z1.Value
arrayz(1) = z2.Value
arrayz(2) = z3.Value
arrayz(3) = z4.Value
arrayz(4) = z5.Value
77
arrayz(5) = z6.Value
arrayz(6) = z7.Value
arrayz(7) = z8.Value
arrayz(8) = z9.Value
arrayz(9) = z10.Value
arrayz(10) = z11.Value
arrayz(11) = z12.Value
arrayz(12) = z13.Value
arrayz(13) = z14.Value
arrayz(14) = z15.Value
Sheet1.Activate
val = arrayz(11) - Cells(12, 1).Value
If arrayz(11) <> 0 Then
z12 = arrayz(11) + val
arrayz(11) = z12
End If
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
End Sub
Private Sub z13_AfterUpdate()
Dim val As Long
Dim arrayz(14) As Variant
arrayz(0) = z1.Value
arrayz(1) = z2.Value
arrayz(2) = z3.Value
arrayz(3) = z4.Value
arrayz(4) = z5.Value
arrayz(5) = z6.Value
arrayz(6) = z7.Value
78
arrayz(7) = z8.Value
arrayz(8) = z9.Value
arrayz(9) = z10.Value
arrayz(10) = z11.Value
arrayz(11) = z12.Value
arrayz(12) = z13.Value
arrayz(13) = z14.Value
arrayz(14) = z15.Value
Sheet1.Activate
val = arrayz(12) - Cells(13, 1).Value
If arrayz(12) <> 0 Then
z13 = arrayz(12) + val
arrayz(12) = z13
End If
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
End Sub
79
arrayz(12) = z13.Value
arrayz(13) = z14.Value
arrayz(14) = z15.Value
Sheet1.Activate
val = arrayz(13) - Cells(14, 1).Value
If arrayz(13) <> 0 Then
z14 = arrayz(13) + val
arrayz(13) = z14
End If
If arrayz(14) <> 0 Then
z15 = arrayz(14) + val
arrayz(14) = z15
End If
End Sub
arrayz(15) = z15.Value
For z = 15 To LastRowA
Cells(z, 1).Value = arrayz(z)
End Sub
'*********************************************************
'*
'Allows the user to edit the variables without having to exit the macro
'There is one sub for each textbox with the 'X' variable
'Only the first will be explained
'*
'*********************************************************
Private Sub x3_AfterUpdate()
Dim val As Long
80
arrayx(2) = x3.Value
arrayx(3) = x4.Value
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
'increments each value by the change necessary
'if previous value was 0 then the if loop does not execute
val = arrayx(2) - Cells(3, 2).Value
If arrayx(2) <> 0 Then
x3 = arrayx(2) + val
arrayx(2) = x3
End If
If arrayx(3) <> 0 Then
x4 = arrayx(3) + val
arrayx(3) = x4
End If
If arrayx(4) <> 0 Then
x5 = arrayx(4) + val
arrayx(4) = x5
End If
If arrayx(5) <> 0 Then
x6 = arrayx(5) + val
arrayx(5) = x6
End If
If arrayx(6) <> 0 Then
x7 = arrayx(6) + val
arrayx(6) = x7
End If
If arrayx(7) <> 0 Then
x8 = arrayx(7) + val
arrayx(7) = x8
End If
If arrayx(8) <> 0 Then
x9 = arrayx(8) + val
arrayx(8) = x9
End If
If arrayx(9) <> 0 Then
81
x10 = arrayx(9) + val
arrayx(9) = x10
End If
If arrayx(10) <> 0 Then
x11 = arrayx(10) + val
arrayx(10) = x11
End If
If arrayx(11) <> 0 Then
x12 = arrayx(11) + val
arrayx(11) = x12
End If
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x4_AfterUpdate()
Dim val As Long
Dim arrayx(14) As Variant
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
arrayx(8) = x9.Value
arrayx(9) = x10.Value
82
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
val = arrayx(3) - Cells(4, 2).Value
If arrayx(3) <> 0 Then
x4 = arrayx(3) + val
arrayx(3) = x4
End If
If arrayx(4) <> 0 Then
x5 = arrayx(4) + val
arrayx(4) = x5
End If
If arrayx(5) <> 0 Then
x6 = arrayx(5) + val
arrayx(5) = x6
End If
If arrayx(6) <> 0 Then
x7 = arrayx(6) + val
arrayx(6) = x7
End If
If arrayx(7) <> 0 Then
x8 = arrayx(7) + val
arrayx(7) = x8
End If
If arrayx(8) <> 0 Then
x9 = arrayx(8) + val
arrayx(8) = x9
End If
If arrayx(9) <> 0 Then
x10 = arrayx(9) + val
arrayx(9) = x10
End If
If arrayx(10) <> 0 Then
x11 = arrayx(10) + val
arrayx(10) = x11
End If
If arrayx(11) <> 0 Then
x12 = arrayx(11) + val
arrayx(11) = x12
End If
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
83
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x5_AfterUpdate()
Dim val As Long
Dim arrayx(14) As Variant
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
val = arrayx(4) - Cells(5, 2).Value
If arrayx(4) <> 0 Then
x5 = arrayx(4) + val
arrayx(4) = x5
End If
If arrayx(5) <> 0 Then
x6 = arrayx(5) + val
arrayx(5) = x6
84
End If
If arrayx(6) <> 0 Then
x7 = arrayx(6) + val
arrayx(6) = x7
End If
If arrayx(7) <> 0 Then
x8 = arrayx(7) + val
arrayx(7) = x8
End If
If arrayx(8) <> 0 Then
x9 = arrayx(8) + val
arrayx(8) = x9
End If
If arrayx(9) <> 0 Then
x10 = arrayx(9) + val
arrayx(9) = x10
End If
If arrayx(10) <> 0 Then
x11 = arrayx(10) + val
arrayx(10) = x11
End If
If arrayx(11) <> 0 Then
x12 = arrayx(11) + val
arrayx(11) = x12
End If
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x6_AfterUpdate()
85
Dim val As Long
Dim arrayx(14) As Variant
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
val = arrayx(5) - Cells(6, 2).Value
If arrayx(5) <> 0 Then
x6 = arrayx(5) + val
arrayx(5) = x6
End If
If arrayx(6) <> 0 Then
x7 = arrayx(6) + val
arrayx(6) = x7
End If
If arrayx(7) <> 0 Then
x8 = arrayx(7) + val
arrayx(7) = x8
End If
If arrayx(8) <> 0 Then
x9 = arrayx(8) + val
arrayx(8) = x9
End If
If arrayx(9) <> 0 Then
x10 = arrayx(9) + val
arrayx(9) = x10
End If
If arrayx(10) <> 0 Then
x11 = arrayx(10) + val
arrayx(10) = x11
End If
If arrayx(11) <> 0 Then
86
x12 = arrayx(11) + val
arrayx(11) = x12
End If
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x7_AfterUpdate()
Dim val As Long
Dim arrayx(14) As Variant
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
val = arrayx(6) - Cells(7, 2).Value
If arrayx(6) <> 0 Then
87
x7 = arrayx(6) + val
arrayx(6) = x7
End If
If arrayx(7) <> 0 Then
x8 = arrayx(7) + val
arrayx(7) = x8
End If
If arrayx(8) <> 0 Then
x9 = arrayx(8) + val
arrayx(8) = x9
End If
If arrayx(9) <> 0 Then
x10 = arrayx(9) + val
arrayx(9) = x10
End If
If arrayx(10) <> 0 Then
x11 = arrayx(10) + val
arrayx(10) = x11
End If
If arrayx(11) <> 0 Then
x12 = arrayx(11) + val
arrayx(11) = x12
End If
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x8_AfterUpdate()
Dim val As Long
Dim arrayx(14) As Variant
88
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
val = arrayx(7) - Cells(8, 2).Value
If arrayx(7) <> 0 Then
x8 = arrayx(7) + val
arrayx(7) = x8
End If
If arrayx(8) <> 0 Then
x9 = arrayx(8) + val
arrayx(8) = x9
End If
If arrayx(9) <> 0 Then
x10 = arrayx(9) + val
arrayx(9) = x10
End If
If arrayx(10) <> 0 Then
x11 = arrayx(10) + val
arrayx(10) = x11
End If
If arrayx(11) <> 0 Then
x12 = arrayx(11) + val
arrayx(11) = x12
End If
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
89
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x9_AfterUpdate()
Dim val As Long
Dim arrayx(14) As Variant
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
val = arrayx(8) - Cells(9, 2).Value
If arrayx(8) <> 0 Then
x9 = arrayx(8) + val
arrayx(8) = x9
End If
If arrayx(9) <> 0 Then
x10 = arrayx(9) + val
arrayx(9) = x10
End If
If arrayx(10) <> 0 Then
x11 = arrayx(10) + val
arrayx(10) = x11
90
End If
If arrayx(11) <> 0 Then
x12 = arrayx(11) + val
arrayx(11) = x12
End If
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x10_AfterUpdate()
Dim val As Long
Dim arrayx(14) As Variant
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
91
val = arrayx(9) - Cells(10, 2).Value
If arrayx(9) <> 0 Then
x10 = arrayx(9) + val
arrayx(9) = x10
End If
If arrayx(10) <> 0 Then
x11 = arrayx(10) + val
arrayx(10) = x11
End If
If arrayx(11) <> 0 Then
x12 = arrayx(11) + val
arrayx(11) = x12
End If
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x11_AfterUpdate()
Dim val As Long
Dim arrayx(14) As Variant
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
92
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
val = arrayx(10) - Cells(11, 2).Value
If arrayx(10) <> 0 Then
x11 = arrayx(10) + val
arrayx(10) = x11
End If
If arrayx(11) <> 0 Then
x12 = arrayx(11) + val
arrayx(11) = x12
End If
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x12_AfterUpdate()
Dim val As Long
Dim arrayx(14) As Variant
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
93
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
val = arrayx(11) - Cells(12, 2).Value
If arrayx(11) <> 0 Then
x12 = arrayx(11) + val
arrayx(11) = x12
End If
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x13_AfterUpdate()
Dim val As Long
Dim arrayx(14) As Variant
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
94
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
val = arrayx(12) - Cells(13, 2).Value
If arrayx(12) <> 0 Then
x13 = arrayx(12) + val
arrayx(12) = x13
End If
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x14_AfterUpdate()
Dim val As Long
Dim arrayx(14) As Variant
arrayx(0) = x1.Value
arrayx(1) = x2.Value
arrayx(2) = x3.Value
arrayx(3) = x4.Value
arrayx(4) = x5.Value
arrayx(5) = x6.Value
arrayx(6) = x7.Value
arrayx(7) = x8.Value
95
arrayx(8) = x9.Value
arrayx(9) = x10.Value
arrayx(10) = x11.Value
arrayx(11) = x12.Value
arrayx(12) = x13.Value
arrayx(13) = x14.Value
arrayx(14) = x15.Value
Sheet1.Activate
val = arrayx(13) - Cells(14, 2).Value
If arrayx(13) <> 0 Then
x14 = arrayx(13) + val
arrayx(13) = x14
End If
If arrayx(14) <> 0 Then
x15 = arrayx(14) + val
arrayx(14) = x15
End If
End Sub
Private Sub x15_AfterUpdate()
Dim arrayx(15)
arrayx(15) = x15.Value
For z = 15 To LastRowA
Cells(z, 1).Value = arrayx(z)
End Sub
'*********************************************************
'*
'Allows the user to edit the variables without having to exit the macro
'There is one sub for each textbox with the feature 'f' variable
'Only the first will be explained
'for the special 's' variable the process is essentially the same
'this is because the event only happens if either 's' changes or 'f' and 's' both change
'*
'*********************************************************
Private Sub f3_AfterUpdate()
Dim val As Double
96
'checks if the user has entered chamfer and if the chamfer value is different
If f3.Value = "Chamfer" And CDbl(s3.Value) <> Cells(3, 5).Value Then
val = CDbl(s3.Value) - Cells(3, 5).Value
'positive geometry chamfer
If Cells(3, 6).Value > 0 Then
z3 = CDbl(z3.Value) + val
End If
'negative geometry chamfer
If Cells(3, 6).Value < 0 Then
x3 = CDbl(z3.Value) + val
End If
End If
'changes radius value
If f3.Value = "Radius" And CDbl(s3.Value) <> Cells(3, 4).Value Then
Cells(3, 4).Value = s3.Value
End If
'if 'f' has been emptied then 's' is also emptied
If f3.Value = "" Then
s3 = ""
End Sub
Private Sub f4_AfterUpdate()
Dim val As Double
If f4.Value = "Chamfer" And CDbl(s4.Value) <> Cells(4, 5).Value Then
val = CDbl(s4.Value) - Cells(4, 5).Value
If Cells(4, 6).Value > 0 Then
z4 = CDbl(z4.Value) + val
End If
If Cells(4, 6).Value < 0 Then
x4 = CDbl(z4.Value) + val
End If
End If
If f4.Value = "Radius" And CDbl(s4.Value) <> Cells(4, 4).Value Then
Cells(4, 4).Value = s4.Value
End If
If f4.Value = "" Then
s4 = ""
End Sub
Private Sub f5_AfterUpdate()
Dim val As Double
If f5.Value = "Chamfer" And CDbl(s5.Value) <> Cells(5, 5).Value Then
val = CDbl(s5.Value) - Cells(5, 5).Value
If Cells(5, 6).Value > 0 Then
z5 = CDbl(z5.Value) + val
End If
If Cells(5, 6).Value < 0 Then
x5 = CDbl(z5.Value) + val
97
End If
End If
If f5.Value = "Radius" And CDbl(s5.Value) <> Cells(5, 4).Value Then
Cells(5, 4).Value = s4.Value
End If
If f5.Value = "" Then
s5 = ""
End Sub
Private Sub f6_AfterUpdate()
Dim val As Double
If f6.Value = "Chamfer" And CDbl(s6.Value) <> Cells(6, 5).Value Then
val = CDbl(s6.Value) - Cells(6, 5).Value
If Cells(6, 6).Value > 0 Then
z6 = CDbl(z6.Value) + val
End If
If Cells(6, 6).Value < 0 Then
x6 = CDbl(z6.Value) + val
End If
End If
If f6.Value = "Radius" And CDbl(s6.Value) <> Cells(6, 4).Value Then
Cells(6, 4).Value = s4.Value
End If
If f6.Value = "" Then
s6 = ""
End Sub
Private Sub f7_AfterUpdate()
Dim val As Double
If f7.Value = "Chamfer" And CDbl(s7.Value) <> Cells(7, 5).Value Then
val = CDbl(s7.Value) - Cells(7, 5).Value
If Cells(7, 6).Value > 0 Then
z7 = CDbl(z7.Value) + val
End If
If Cells(7, 6).Value < 0 Then
x7 = CDbl(z7.Value) + val
End If
End If
If f7.Value = "Radius" And CDbl(s7.Value) <> Cells(7, 4).Value Then
Cells(7, 4).Value = s7.Value
End If
If f7.Value = "" Then
s7 = ""
End Sub
Private Sub f8_AfterUpdate()
Dim val As Double
If f8.Value = "Chamfer" And CDbl(s8.Value) <> Cells(8, 5).Value Then
val = CDbl(s8.Value) - Cells(8, 5).Value
98
If Cells(8, 6).Value > 0 Then
z8 = CDbl(z8.Value) + val
End If
If Cells(8, 6).Value < 0 Then
x8 = CDbl(z8.Value) + val
End If
End If
If f8.Value = "Radius" And CDbl(s8.Value) <> Cells(8, 4).Value Then
Cells(8, 4).Value = s8.Value
End If
If f8.Value = "" Then
s8 = ""
End Sub
Private Sub f9_AfterUpdate()
Dim val As Double
If f9.Value = "Chamfer" And CDbl(s9.Value) <> Cells(9, 5).Value Then
val = CDbl(s9.Value) - Cells(9, 5).Value
If Cells(9, 6).Value > 0 Then
z9 = CDbl(z9.Value) + val
End If
If Cells(9, 6).Value < 0 Then
x9 = CDbl(z9.Value) + val
End If
End If
If f9.Value = "Radius" And CDbl(s9.Value) <> Cells(9, 4).Value Then
Cells(9, 4).Value = s9.Value
End If
If f9.Value = "" Then
s9 = ""
End Sub
Private Sub f10_AfterUpdate()
Dim val As Double
i = 10
If f10.Value = "Chamfer" And CDbl(s10.Value) <> Cells(i, 5).Value Then
val = CDbl(s10.Value) - Cells(i, 5).Value
If Cells(i, 6).Value > 0 Then
z10 = CDbl(z10.Value) + val
End If
If Cells(i, 6).Value < 0 Then
x10 = CDbl(z10.Value) + val
End If
End If
If f10.Value = "Radius" And CDbl(s10.Value) <> Cells(i, 4).Value Then
Cells(i, 4).Value = s10.Value
End If
If f10.Value = "" Then
99
s10 = ""
End Sub
Private Sub f11_AfterUpdate()
Dim val As Double
i = 11
If f11.Value = "Chamfer" And CDbl(s11.Value) <> Cells(i, 5).Value Then
val = CDbl(s11.Value) - Cells(i, 5).Value
If Cells(i, 6).Value > 0 Then
z11 = CDbl(z11.Value) + val
End If
If Cells(i, 6).Value < 0 Then
x11 = CDbl(z11.Value) + val
End If
End If
If f11.Value = "Radius" And CDbl(s11.Value) <> Cells(i, 4).Value Then
Cells(i, 4).Value = s11.Value
End If
If f11.Value = "" Then
s11 = ""
End Sub
Private Sub f12_AfterUpdate()
Dim val As Double
i = 12
If f12.Value = "Chamfer" And CDbl(s12.Value) <> Cells(i, 5).Value Then
val = CDbl(s12.Value) - Cells(i, 5).Value
If Cells(i, 6).Value > 0 Then
z12 = CDbl(z12.Value) + val
End If
If Cells(i, 6).Value < 0 Then
x12 = CDbl(z12.Value) + val
End If
End If
If f12.Value = "Radius" And CDbl(s12.Value) <> Cells(i, 4).Value Then
Cells(i, 4).Value = s12.Value
End If
If f12.Value = "" Then
s12 = ""
End Sub
Private Sub f13_AfterUpdate()
Dim val As Double
i = 13
If f13.Value = "Chamfer" And CDbl(s13.Value) <> Cells(i, 5).Value Then
val = CDbl(s13.Value) - Cells(i, 5).Value
If Cells(i, 6).Value > 0 Then
z13 = CDbl(z13.Value) + val
End If
100
If Cells(i, 6).Value < 0 Then
x13 = CDbl(z13.Value) + val
End If
End If
If f13.Value = "Radius" And CDbl(s13.Value) <> Cells(i, 4).Value Then
Cells(i, 4).Value = s13.Value
End If
If f13.Value = "" Then
s13 = ""
End Sub
Private Sub s3_AfterUpdate()
Dim val As Double
If f3.Value = "Chamfer" And CDbl(s3.Value) <> Cells(3, 5).Value Then
val = CDbl(s3.Value) - Cells(3, 5).Value
If Cells(3, 6).Value > 0 Then
z3 = CDbl(z3.Value) + val
End If
If Cells(3, 6).Value < 0 Then
x3 = CDbl(z3.Value) + val
End If
End If
If f3.Value = "Radius" And CDbl(s3.Value) <> Cells(3, 4).Value Then
Cells(3, 4).Value = s3.Value
End If
If f3.Value = "" Then
s3 = ""
End Sub
Private Sub s4_AfterUpdate()
Dim val As Double
If f4.Value = "Chamfer" And CDbl(s4.Value) <> Cells(4, 5).Value Then
val = CDbl(s4.Value) - Cells(4, 5).Value
If Cells(4, 6).Value > 0 Then
z4 = CDbl(z4.Value) + val
End If
If Cells(4, 6).Value < 0 Then
x4 = CDbl(z4.Value) + val
End If
End If
If f4.Value = "Radius" And CDbl(s4.Value) <> Cells(4, 4).Value Then
Cells(4, 4).Value = s4.Value
End If
If f4.Value = "" Then
s4 = ""
End Sub
Private Sub s5_AfterUpdate()
Dim val As Double
101
If f5.Value = "Chamfer" And CDbl(s5.Value) <> Cells(5, 5).Value Then
val = CDbl(s5.Value) - Cells(5, 5).Value
If Cells(5, 6).Value > 0 Then
z5 = CDbl(z5.Value) + val
End If
If Cells(5, 6).Value < 0 Then
x5 = CDbl(z5.Value) + val
End If
End If
If f5.Value = "Radius" And CDbl(s5.Value) <> Cells(5, 4).Value Then
Cells(5, 4).Value = s4.Value
End If
If f5.Value = "" Then
s5 = ""
End Sub
Private Sub s6_AfterUpdate()
Dim val As Double
If f6.Value = "Chamfer" And CDbl(s6.Value) <> Cells(6, 5).Value Then
val = CDbl(s6.Value) - Cells(6, 5).Value
If Cells(6, 6).Value > 0 Then
z6 = CDbl(z6.Value) + val
End If
If Cells(6, 6).Value < 0 Then
x6 = CDbl(z6.Value) + val
End If
End If
If f6.Value = "Radius" And CDbl(s6.Value) <> Cells(6, 4).Value Then
Cells(6, 4).Value = s4.Value
End If
If f6.Value = "" Then
s6 = ""
End Sub
Private Sub s7_AfterUpdate()
Dim val As Double
If f7.Value = "Chamfer" And CDbl(s7.Value) <> Cells(7, 5).Value Then
val = CDbl(s7.Value) - Cells(7, 5).Value
If Cells(7, 6).Value > 0 Then
z7 = CDbl(z7.Value) + val
End If
If Cells(7, 6).Value < 0 Then
x7 = CDbl(z7.Value) + val
End If
End If
If f7.Value = "Radius" And CDbl(s7.Value) <> Cells(7, 4).Value Then
Cells(7, 4).Value = s7.Value
End If
102
If f7.Value = "" Then
s7 = ""
End Sub
Private Sub s8_AfterUpdate()
Dim val As Double
If f8.Value = "Chamfer" And CDbl(s8.Value) <> Cells(8, 5).Value Then
val = CDbl(s8.Value) - Cells(8, 5).Value
If Cells(8, 6).Value > 0 Then
z8 = CDbl(z8.Value) + val
End If
If Cells(8, 6).Value < 0 Then
x8 = CDbl(z8.Value) + val
End If
End If
If f8.Value = "Radius" And CDbl(s8.Value) <> Cells(8, 4).Value Then
Cells(8, 4).Value = s8.Value
End If
If f8.Value = "" Then
s8 = ""
End Sub
Private Sub s9_AfterUpdate()
Dim val As Double
If f9.Value = "Chamfer" And CDbl(s9.Value) <> Cells(9, 5).Value Then
val = CDbl(s9.Value) - Cells(9, 5).Value
If Cells(9, 6).Value > 0 Then
z9 = CDbl(z9.Value) + val
End If
If Cells(9, 6).Value < 0 Then
x9 = CDbl(z9.Value) + val
End If
End If
If f9.Value = "Radius" And CDbl(s9.Value) <> Cells(9, 4).Value Then
Cells(9, 4).Value = s9.Value
End If
If f9.Value = "" Then
s9 = ""
End Sub
Private Sub s10_AfterUpdate()
Dim val As Double
i = 10
If f10.Value = "Chamfer" And CDbl(s10.Value) <> Cells(i, 5).Value Then
val = CDbl(s10.Value) - Cells(i, 5).Value
If Cells(i, 6).Value > 0 Then
z10 = CDbl(z10.Value) + val
End If
If Cells(i, 6).Value < 0 Then
103
x10 = CDbl(z10.Value) + val
End If
End If
If f10.Value = "Radius" And CDbl(s10.Value) <> Cells(i, 4).Value Then
Cells(i, 4).Value = s10.Value
End If
If f10.Value = "" Then
s10 = ""
End Sub
Private Sub s11_AfterUpdate()
Dim val As Double
i = 11
If f11.Value = "Chamfer" And CDbl(s11.Value) <> Cells(i, 5).Value Then
val = CDbl(s11.Value) - Cells(i, 5).Value
If Cells(i, 6).Value > 0 Then
z11 = CDbl(z11.Value) + val
End If
If Cells(i, 6).Value < 0 Then
x11 = CDbl(z11.Value) + val
End If
End If
If f11.Value = "Radius" And CDbl(s11.Value) <> Cells(i, 4).Value Then
Cells(i, 4).Value = s11.Value
End If
If f11.Value = "" Then
s11 = ""
End Sub
Private Sub s12_AfterUpdate()
Dim val As Double
i = 12
If f12.Value = "Chamfer" And CDbl(s12.Value) <> Cells(i, 5).Value Then
val = CDbl(s12.Value) - Cells(i, 5).Value
If Cells(i, 6).Value > 0 Then
z12 = CDbl(z12.Value) + val
End If
If Cells(i, 6).Value < 0 Then
x12 = CDbl(z12.Value) + val
End If
End If
If f12.Value = "Radius" And CDbl(s12.Value) <> Cells(i, 4).Value Then
Cells(i, 4).Value = s12.Value
End If
If f12.Value = "" Then
s12 = ""
End Sub
Private Sub s13_AfterUpdate()
104
Dim val As Double
i = 13
If f13.Value = "Chamfer" And CDbl(s13.Value) <> Cells(i, 5).Value Then
val = CDbl(s13.Value) - Cells(i, 5).Value
If Cells(i, 6).Value > 0 Then
z13 = CDbl(z13.Value) + val
End If
If Cells(i, 6).Value < 0 Then
x13 = CDbl(z13.Value) + val
End If
End If
If f13.Value = "Radius" And CDbl(s13.Value) <> Cells(i, 4).Value Then
Cells(i, 4).Value = s13.Value
End If
If f13.Value = "" Then
s13 = ""
End Sub
2)VBScript
‘****************************************
‘*This simply uploads the Catalog File into Catia
‘*Catia produces a catalog file
‘*It then must be placed within the proper folder
‘*******************************************
Language="VBSCRIPT"
Sub CATMain()
InputFile="C:\Users\Raisanen\Documents\CATIA\Raisanen Thesis\Catalog.csv"
OutputFile="C:\Users\Raisanen\Documents\CATIA\Tool_Library.catalog"
set Catalog=CATIA.Documents.Add("CatalogDocument")
Catalog.Close
End Sub
105