diff --git a/Optalog/Include/cns.h b/Optalog/Include/cns.h index 3e2a33c..c297c5b 100644 --- a/Optalog/Include/cns.h +++ b/Optalog/Include/cns.h @@ -5,9 +5,8 @@ * agreement of the authors. * * Authors: Nicolas Leignel and Renaud Lepere - * Copyright: 2014-2023 + * Copyright: 2014-2025 */ - #ifndef CNS_H #define CNS_H @@ -224,10 +223,13 @@ extern "C" { /** * Set an extra gap on the given part. * - * Some parts may require additional spacing in order to protect them. + * Some parts may require additional spacing in order to protect them. This is an additional gap + * above the normal gap specified by the function CNS_SetInterpartGap. * - * Note: 2 adjacent nested parts with extra gaps will have an extra gap between them - * corresponding to the sum of their extra gap. + * Note: two adjacent nested parts with extra gaps will have an extra gap between them + * corresponding to the sum of their extra gaps. + * + * Note: If an extra gap is added a part, the extra gap will also apply on the sheet border. */ CNS_EXPORT void CNS_API CNS_SetExtraGapOnPart(CNS_PartPtr part, double extra_gap); @@ -349,7 +351,6 @@ extern "C" { CNS_EXPORT void CNS_API CNS_AddPartSpecificAuthorizations(CNS_PartPtr part, int flip, double min_angle_in_degree, double max_angle_in_degree); - /** * Set the priority of the given part. @@ -365,8 +366,6 @@ extern "C" { * The default priority is 0. */ CNS_EXPORT void CNS_API CNS_SetPartPriority(CNS_PartPtr part, unsigned priority); - - /** * Set user string associated with the part. @@ -389,7 +388,6 @@ extern "C" { */ CNS_EXPORT void CNS_API CNS_GetPartUserStringEx(CNS_PartPtr part, unsigned max_size, char * user_string); - /** * Add a rectangular sheet to the given launching order. @@ -421,7 +419,6 @@ extern "C" { CNS_EXPORT void CNS_API CNS_SetSheetGrainDirection(CNS_SheetPtr sheet, CNS_GrainDirection grain_direction); - /** * Set the price of the sheet. * @@ -430,7 +427,6 @@ extern "C" { * sheets. The price must not be null. */ CNS_EXPORT void CNS_API CNS_SetSheetPrice(CNS_SheetPtr sheet, double price); - /** * Add an irregular sheet to the given launching order. @@ -451,6 +447,20 @@ extern "C" { unsigned quantity, unsigned number_of_elements, const CNS_Element * elements); + + /** + * Add a variable sheet length to the launching order. + * + * Variable sheet length are useful for coil based nesting, where an horizontal cut but be + * made between @param min_x and @param max_x. + * + * Note1: This mode is only compatible with objective CNS_IntelligentMinimizeX or + * CNS_IntelligentMinimizeX. + */ + CNS_EXPORT CNS_SheetPtr CNS_API CNS_AddVariableSheet(CNS_LaunchingOrderPtr order, + unsigned quantity, + double min_x, double max_x, + double y); /** * Add a defect/hole to the given sheet. @@ -579,12 +589,11 @@ extern "C" { * When a sheet is not a rectangle, left, right, bottom, top gaps will be applied on * the sheet bounding box and irregular_border_gap will be applied on sheet geometry */ - CNS_EXPORT void CNS_API CNS_SetNonRectangularSheetGaps(CNS_SheetPtr sheet, - double left_gap, double right_gap, - double bottom_gap, double top_gap, - double irregular_border_gap); - + double left_gap, double right_gap, + double bottom_gap, double top_gap, + double irregular_border_gap); + /** * Add gaps around defects/holes. * @@ -727,7 +736,7 @@ extern "C" { CNS_SetNoSheetMixPreference(CNS_LaunchingOrderPtr order, unsigned max_number_of_different_sheets); - /** + /** * Floating mode. * * Parts are nested such that a minimal gap (@see CNS_SetInterpartGap) between parts is @@ -749,17 +758,32 @@ extern "C" { CNS_EXPORT void CNS_API CNS_SetFloatingMode(CNS_LaunchingOrderPtr order, int enable); - /** + /** * Force origin packing mode. * - * In very short time (few seconds), all parts may not be nested near the - * origin due to timing constraint, this post optimization process force the - * origin packing to be called at the end of the computation. It is called - * only on the final solution and it can lead to a computation time a bit - * longer (few seconds) than the given time. + * In very short time (few seconds), all parts may not be nested near the origin due to timing + * constraint, this post optimization process force the origin packing to be called at the end + * of the computation. It is called only on the final solution and it can lead to a computation + * time a bit longer (few seconds) than the given time. */ CNS_EXPORT void CNS_API CNS_SetOriginPackingMode(CNS_LaunchingOrderPtr order, int enable); + + /** + * EXPERIMENTAL Force small parts renesting in holes. + * + * This function is a postprocessing step that nest small parts in holes in later sheets than in + * the first sheets not in holes. This can be easier to manage, tend to group small parts + * together, and may favor reusability of offcuts. This post-processing step only apply on small + * parts with low priority (because they can be nested everywhere) and it is not compatible with + * strict part priorities. + * + * This function can lead to a computation time a bit longer (few seconds) than the given time. + */ + CNS_EXPORT void CNS_API + CNS_SetForceSmallPartsRenestingMode(CNS_LaunchingOrderPtr order, int enable); + + /** * Advanced control of offcut value. @@ -787,7 +811,8 @@ extern "C" { * * For a reusable offcut, the value will be deprecated by @param unusable_ratio. This is useful * to generate a small offcut in a smaller sheet even if the fill-ratio considering that the - * offcut is reusable. A small value between .1 and .3 is good. + * offcut is reusable. A reasonnable value such as 0.4 will favor using small sheets if possible + * even if the fill-ratio is worse. A value between 0.1 and 0.9 is possible. * * Note1: @param min_area must be in the same unit as @param min_dimension. If mm then it * must be mm^2. @@ -805,10 +830,9 @@ extern "C" { /** * Control of part priorities. * - * By default, priorities are not strict, if parts with high priority can not be nested a part with - * a lower priorities will be nested. - * In case of strict priorities, parts with lower priority will be nested only when all the parts of - * higher priorities will have been nested. + * By default, priorities are not strict, if parts with high priority can not be nested a part + * with a lower priorities will be nested. In case of strict priorities, parts with lower + * priority will be nested only when all the parts of higher priorities will have been nested. * * Note: this function may degrades the performance of the nesting. */ @@ -846,7 +870,7 @@ extern "C" { * ===================================================================================== */ /** - * Launch a non-blocking computation of the given launching order. + * Launch a non-blocking cloud computation of the given launching order on optalog servers. * * @param server the cloud nest server ip (or fully qualified name). * @param login the login used for running the computation. @@ -865,12 +889,10 @@ extern "C" { double computation_time); /** - * Launch a non-blocking local computation of the given order. + * Launch a non-blocking local computation of the given launching order. * * @param computation_time the time you want to give to obtain the results (a longer time will - * yield better results). 30 seconds is the minimum advised time to obtain very good results. - * - * May not be available in the given version + * yield better results). 30 seconds is the minimum advised time to obtain very good * * The computation can be launched in infinite mode by giving a computation time value of -1.0. * In this mode the user is responsible for collecting intermediate results and stopping the @@ -880,6 +902,7 @@ extern "C" { * CNS_DeleteLaunchingOrder. * * Note: this function launch an asynchronous computation and creates some working threads. + * This function may not be available in the given version. */ CNS_EXPORT CNS_ComputationPtr CNS_API CNS_LaunchLocalComputation(CNS_LaunchingOrderPtr order, double computation_time); @@ -1085,10 +1108,7 @@ extern "C" { CNS_EXPORT void CNS_API CNS_SetCommonCutMode(CNS_LaunchingOrderPtr launching_order, int enable, double common_cut_gap); - - /** - * EXPERIMENTAL * Enable or disable common cut between different parts * * This experimental mode allows to generate common cut between different parts. @@ -1162,7 +1182,7 @@ extern "C" { } CNS_CommonCutLeadin; /** - * Advance common cut authorization control + * Advanced common cut authorization control * * @param min_cutting_length the minimum length of a common cut. * @param max_regarding_ratio control the leaving condition. If the edges around a common cut @@ -1232,8 +1252,8 @@ extern "C" { * Limit the size of common cut blocks to a maximum dimension. * * If parts are cut in common cut, this can lead to very big blocks. Those big blocks lead to - * skeleton rigidity problems. It is possible to limit their maximum size. - * @param max_block_size the maximum size of common cut block. + * skeleton rigidity problems. It is possible to limit their maximum size. @param + * max_block_size the maximum size of common cut block. */ CNS_EXPORT void CNS_API CNS_SetCommonCutMaxBlockSize(CNS_LaunchingOrderPtr launching_order, double max_block_size); @@ -1254,14 +1274,29 @@ extern "C" { /** * Limit the size of common cut blocks to a maximum number of parts. * - * If small parts are cut in common cut, this can lead to a huge number of - * parts in a common cut block. If a cutting problem occurs, all the parts - * can have a problem. This limit the maximum number of parts in a block. + * If small parts are cut in common cut, this can lead to a huge number of parts in a common cut + * block. If a cutting problem occurs, all the parts can have a problem. This limit the maximum + * number of parts in a block. */ CNS_EXPORT void CNS_API CNS_SetPartCommonCutMaxBlockSize(CNS_PartPtr part, unsigned max_number_of_parts_in_block); - + + /** + * Limit the size of common cut blocks to a maximum dimension in x and in y for the given part. + * + * If parts are cut in common cut, this can lead to very big blocks. Those big blocks lead to + * skeleton rigidity problems. It is possible to limit their maximum size. + * @param max_block_size_x the maximum size of common cut block in x + * @param max_block_size_y the maximum size of common cut block in y + * + * Note: all algorithms are not compatible with this setting and using this function may reduce + * a little bit nesting performance. + */ + CNS_EXPORT void CNS_API + CNS_SetPartCommonCutMaxBlockSizeXY(CNS_PartPtr part, + double max_block_size_x, + double max_block_size_y); /** * Allows to disable some advanced common cut checks. @@ -1500,7 +1535,8 @@ extern "C" { /** * Return the fill ratio of the given nesting. * - * For the last sheet the considered used surface in the fill ratio is up to the frontline, or area. + * For the last sheet the considered used surface in the fill ratio is up to the frontline, or + * area. */ CNS_EXPORT double CNS_API CNS_GetNestingFillRatio(CNS_NestingPtr nesting); diff --git a/Optalog/Include/cns_restricted_zone.h b/Optalog/Include/cns_restricted_zone.h index c93efcc..9e4fd88 100644 --- a/Optalog/Include/cns_restricted_zone.h +++ b/Optalog/Include/cns_restricted_zone.h @@ -11,43 +11,55 @@ typedef struct CNS_RestrictedZoneConstraint * CNS_RestrictedZoneConstraintPtr ; /** * Creates a zone restriction constraint. - * This constraint forces a given set of parts to be nested inside restricted zones on the sheet + * + * This constraint can force a given set of parts to be nested inside restricted zones on the sheet * and not anywhere on the whole sheet. + * + * Note: You should define a limited number of restricted zones. In particular, you should not + * define a restricted zone per part, but for instance create a zone in the center where to nest + * small parts inside. */ - CNS_EXPORT CNS_RestrictedZoneConstraintPtr CNS_API CNS_CreateRestrictedZoneConstraint(CNS_LaunchingOrderPtr order); /** * Define a zone in the sheet where parts can be nested according to the constraint. - * Calling the function several times on the same sheet will allow all the defined zones. + * + * Note: Calling the function several times on the same sheet will allow all the defined zones. + * + * Note: You should define a restricted zone for all the sheets, otherwise the sheet with no + * restricted zone defined will have an empty restricted zone, and parts attached to this restricted + * zone through CNS_SetZoneRestrictedPart will not be nested on those sheets. */ -CNS_EXPORT void CNS_API CNS_SheetAddRestrictedZone( - CNS_RestrictedZoneConstraintPtr constraint, - CNS_SheetPtr sheet, - unsigned number_of_elements, - const CNS_Element * elements); - +CNS_EXPORT void CNS_API +CNS_SheetAddRestrictedZone(CNS_RestrictedZoneConstraintPtr constraint, + CNS_SheetPtr sheet, + unsigned number_of_elements, + const CNS_Element * elements); + /** - * Same as CNS_SheetAddRestrictedZone with simplified API for rectangular zones + * Same as CNS_SheetAddRestrictedZone with simplified API for rectangular zones. */ - -CNS_EXPORT void CNS_API CNS_SheetAddBoxRestrictedZone( - CNS_RestrictedZoneConstraintPtr constraint, - CNS_SheetPtr sheet, - CNS_Point bottom_left, CNS_Point top_right); - +CNS_EXPORT void CNS_API +CNS_SheetAddBoxRestrictedZone(CNS_RestrictedZoneConstraintPtr constraint, + CNS_SheetPtr sheet, + CNS_Point bottom_left, CNS_Point top_right); + /** * Set restriction constraint on the part. - * This part will be restricted to specific sheet zones that were - * added using CNS_SheetAddRestrictedZone + * + * This part will be restricted to specific sheet zones that were added using + * CNS_SheetAddRestrictedZone. + * + * Note: If a part is assigned to multiple restricted zones constraints, it will be nested in the + * intersection of the restricted zones. */ +CNS_EXPORT void CNS_API +CNS_SetZoneRestrictedPart(CNS_RestrictedZoneConstraintPtr constraint, CNS_PartPtr part); -CNS_EXPORT void CNS_API CNS_SetZoneRestrictedPart( - CNS_RestrictedZoneConstraintPtr constraint, - CNS_PartPtr part); - - +/** + * Specific function to force part to be nested on the bottom of the sheet. + */ CNS_EXPORT void CNS_API CNS_ForcePartOnBottomBorder(CNS_PartPtr part); #ifdef __cplusplus diff --git a/Optalog/Include/cns_shear_sequence.h b/Optalog/Include/cns_shear_sequence.h new file mode 100644 index 0000000..bbcba43 --- /dev/null +++ b/Optalog/Include/cns_shear_sequence.h @@ -0,0 +1,69 @@ +#ifndef CNS_SHEAR_SEQUENCE_H +#define CNS_SHEAR_SEQUENCE_H + +#include "cns.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct CNS_ShearSequence * CNS_ShearSequencePtr; + +/** + * Compute the shear sequence on the given nesting. + * + * If there is an interpart gap beteween parts (see CNS_SetInterpartGap), then there must be a shear + * gap (see CNS_SetShearGap) that is greater or equal otherwise a sequence can not be found. In + * this case, if there is some non zero border gaps (see CNS_SetSheetGaps) the border gaps must be + * greater or equal then the interpart gap. + */ +CNS_EXPORT CNS_ShearSequencePtr CNS_API CNS_ComputeShearSequence(CNS_NestingPtr nesting); + +/** + * Delete the shear sequence. + */ +CNS_EXPORT void CNS_API CNS_DeleteShearSequence(CNS_ShearSequencePtr sequence); + +/** + * For debugging, display the shear sequence in SVG + */ +CNS_EXPORT void CNS_API CNS_DrawShearSequence(CNS_NestingPtr nesting, + CNS_ShearSequencePtr sequence, + const char * filename); +/** + * return the number of cut elements in the given shear sequence + */ +CNS_EXPORT unsigned CNS_API +CNS_GetNumberOfElementsInShearSequence(CNS_ShearSequencePtr sequence); + +/** + * return the given element in the given shear sequence + */ +CNS_EXPORT void CNS_API +CNS_GetElementInShearSequence(CNS_ShearSequencePtr sequence, + unsigned element, + double * xo, double * yo, + double * xe, double * ye); + +/** + * return the number of offcuts in the shear sequence + */ +CNS_EXPORT unsigned CNS_API +CNS_GetNumberOfOffcutsInShearSequence(CNS_ShearSequencePtr sequence); + +/** + * return the given offcut in the shear sequence + */ +CNS_EXPORT void CNS_API +CNS_GetOffcutInShearSequence(CNS_ShearSequencePtr sequence, + unsigned offcut, + double * minx, double * miny, + double * maxx, double * maxy); + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/Optalog/Include/cns_tooling.h b/Optalog/Include/cns_tooling.h index 4579a57..62aa71e 100644 --- a/Optalog/Include/cns_tooling.h +++ b/Optalog/Include/cns_tooling.h @@ -9,34 +9,38 @@ extern "C" { /** - * Add a special tooling contour to the part - * Tooling contours on different parts can overlap each other but a tooling contour can not - * overlap the standard geometry of another part - * A tooling contour can also be nested outside of sheet boundaries - * This function can be called multiple times, all the tooling contours added will be unioned + * Add a tool path to the part. + * + * Tool paths on different parts can overlap each other but a too path can not overlap the standard + * geometry of another part. By default, a tool path can also be nested outside of sheet boundaries, + * but this can be change using the function CNS_AllowToolsOutsideSheet. This function can be called + * multiple times, all the tooling contours will be considered. */ CNS_EXPORT void CNS_API CNS_AddToolPathToPart(CNS_PartPtr part, unsigned number_of_elements, const CNS_Element * elements); /** - * Add a hole in a tooling contour + * Add a hole in a tool path. */ CNS_EXPORT void CNS_API CNS_AddHoleInToolPath(CNS_PartPtr part, unsigned number_of_elements, const CNS_Element * elements); /** - * Automatically computes a tooling contour that offsets the part externals - * and holes of inflate_size distance + * Compute a global tool path on the given part. + * + * Computes a tool path that offsets the part externals and holes of @param inflate_size distance. + * This function can be useful for milling with different diameters on tools. */ CNS_EXPORT void CNS_API CNS_AddInflatedToolPathToPart(CNS_PartPtr part, double inflate_size); /** - * Given a tool trajectory and diameter, automatically computes and add to the part the corresponding - * tooling geometry - * This function can be called multiple times, all the tooling contours added will be unioned. - * Free shape contour can also be added with CNS_AddToolPathToPart + * Add a tool path with a diameter. + * + * Given a tool trajectory and diameter, automatically computes and adds to the part the + * corresponding tool path. This function can be called multiple times. Free shape contours can also + * be used as tool path using the function with CNS_AddToolPathToPart. */ CNS_EXPORT void CNS_API CNS_AddOpenToolPathToPart(CNS_PartPtr part, CNS_Point origin, unsigned number_of_elements, @@ -44,10 +48,11 @@ CNS_EXPORT void CNS_API CNS_AddOpenToolPathToPart(CNS_PartPtr part, CNS_Point or double tool_diameter); /** - * By default tool contours are allowed to be nested outside of the sheet - * This function lets you define if tools can go out of sheet or not. + * Specify it tool paths can go outside the sheet or not. + * + * By default tool paths are allowed to be nested outside of the sheet. This function lets you + * define if tool paths can go out of sheet or not. */ - CNS_EXPORT void CNS_API CNS_AllowToolsOutsideSheet(CNS_LaunchingOrderPtr order, int allowed); #ifdef __cplusplus diff --git a/Optalog/Lib/x32/liblcns.def b/Optalog/Lib/x32/liblcns.def index 21dbc49..168308c 100644 --- a/Optalog/Lib/x32/liblcns.def +++ b/Optalog/Lib/x32/liblcns.def @@ -300,6 +300,16 @@ EXPORTS CNS_SetShearRowMode@8 @411 NONAME CNS_SetShearColumnMode = CNS_SetShearColumnMode@8 @412 NONAME CNS_SetShearColumnMode@8 @413 NONAME + CNS_ComputeShearSequence = CNS_ComputeShearSequence@4 @414 NONAME + CNS_ComputeShearSequence@4 @415 NONAME + CNS_DeleteShearSequence = CNS_DeleteShearSequence@4 @416 NONAME + CNS_DeleteShearSequence@4 @417 NONAME + CNS_DrawShearSequence = CNS_DrawShearSequence@12 @418 NONAME + CNS_DrawShearSequence@12 @419 NONAME + CNS_GetNumberOfElementsInShearSequence = CNS_GetNumberOfElementsInShearSequence@4 @420 NONAME + CNS_GetNumberOfElementsInShearSequence@4 @421 NONAME + CNS_GetElementInShearSequence = CNS_GetElementInShearSequence@24 @422 NONAME + CNS_GetElementInShearSequence@24 @423 NONAME CNS_SetCommonCutPerfectAlignment = CNS_SetCommonCutPerfectAlignment@8 @424 NONAME CNS_SetCommonCutPerfectAlignment@8 @425 NONAME CNS_NewArrayHelper = CNS_NewArrayHelper@0 @426 NONAME @@ -314,6 +324,10 @@ EXPORTS CNS_ArrayHelperAddElement@28 @435 NONAME CNS_ArrayHelperGetElements = CNS_ArrayHelperGetElements@4 @436 NONAME CNS_ArrayHelperGetElements@4 @437 NONAME + CNS_GetNumberOfOffcutsInShearSequence = CNS_GetNumberOfOffcutsInShearSequence@4 @442 NONAME + CNS_GetNumberOfOffcutsInShearSequence@4 @443 NONAME + CNS_GetOffcutInShearSequence = CNS_GetOffcutInShearSequence@24 @444 NONAME + CNS_GetOffcutInShearSequence@24 @445 NONAME CNS_SetShearMaxLength = CNS_SetShearMaxLength@12 @446 NONAME CNS_SetShearMaxLength@12 @447 NONAME CNS_GetNestedPartInternalStatus = CNS_GetNestedPartInternalStatus@16 @448 NONAME @@ -332,3 +346,19 @@ EXPORTS CNS_SetPartIgnorePriority@4 @467 NONAME CNS_SetPartIgnoreStrictNoMixPreference = CNS_SetPartIgnoreStrictNoMixPreference@4 @468 NONAME CNS_SetPartIgnoreStrictNoMixPreference@4 @469 NONAME + CNS_AddVariableSheet = CNS_AddVariableSheet@32 @472 NONAME + CNS_AddVariableSheet@32 @473 NONAME + CNS_ForcePartOutsideHole=CNS_ForcePartOutsideHole@4 @476 NONAME + CNS_ForcePartOutsideHole@4 @477 NONAME + CNS_RenestBadPartsInsideHole=CNS_RenestBadPartsInsideHole@4 @478 NONAME + CNS_RenestBadPartsInsideHole@4 @479 NONAME + CNS_SetCommonCutCheckQualityIfCommonCut=CNS_SetCommonCutCheckQualityIfCommonCut@8 @480 NONAME + CNS_SetCommonCutCheckQualityIfCommonCut@8 @481 NONAME + CNS_SetForceSmallPartsRenestingMode=CNS_SetForceSmallPartsRenestingMode@8 @482 NONAME + CNS_SetForceSmallPartsRenestingMode@8 @483 NONAME + CNS_GetActivationCodeEx=CNS_GetActivationCodeEx@8 @484 NONAME + CNS_GetActivationCodeEx@8 @485 NONAME + CNS_SetPartCommonCutMaxBlockSizeXY=CNS_SetPartCommonCutMaxBlockSizeXY@20 @486 NONAME + CNS_SetPartCommonCutMaxBlockSizeXY@20 @487 NONAME + CNS_AddUnloadingDefectToSheet=CNS_AddUnloadingDefectToSheet@12 @502 NONAME + CNS_AddUnloadingDefectToSheet@12 @503 NONAME diff --git a/Optalog/Lib/x32/liblcnsR32.lib b/Optalog/Lib/x32/liblcnsR32.lib index 3462fd7..806b5df 100644 Binary files a/Optalog/Lib/x32/liblcnsR32.lib and b/Optalog/Lib/x32/liblcnsR32.lib differ diff --git a/Optalog/Lib/x64/liblcns.def b/Optalog/Lib/x64/liblcns.def index 9558cef..8965a9e 100644 --- a/Optalog/Lib/x64/liblcns.def +++ b/Optalog/Lib/x64/liblcns.def @@ -300,6 +300,16 @@ EXPORTS CNS_SetShearRowMode@8 @411 NONAME CNS_SetShearColumnMode = CNS_SetShearColumnMode@8 @412 NONAME CNS_SetShearColumnMode@8 @413 NONAME + CNS_ComputeShearSequence = CNS_ComputeShearSequence@4 @414 NONAME + CNS_ComputeShearSequence@4 @415 NONAME + CNS_DeleteShearSequence = CNS_DeleteShearSequence@4 @416 NONAME + CNS_DeleteShearSequence@4 @417 NONAME + CNS_DrawShearSequence = CNS_DrawShearSequence@12 @418 NONAME + CNS_DrawShearSequence@12 @419 NONAME + CNS_GetNumberOfElementsInShearSequence = CNS_GetNumberOfElementsInShearSequence@4 @420 NONAME + CNS_GetNumberOfElementsInShearSequence@4 @421 NONAME + CNS_GetElementInShearSequence = CNS_GetElementInShearSequence@24 @422 NONAME + CNS_GetElementInShearSequence@24 @423 NONAME CNS_SetCommonCutPerfectAlignment = CNS_SetCommonCutPerfectAlignment@8 @424 NONAME CNS_SetCommonCutPerfectAlignment@8 @425 NONAME CNS_NewArrayHelper = CNS_NewArrayHelper@0 @426 NONAME @@ -314,6 +324,10 @@ EXPORTS CNS_ArrayHelperAddElement@28 @435 NONAME CNS_ArrayHelperGetElements = CNS_ArrayHelperGetElements@4 @436 NONAME CNS_ArrayHelperGetElements@4 @437 NONAME + CNS_GetNumberOfOffcutsInShearSequence = CNS_GetNumberOfOffcutsInShearSequence@4 @442 NONAME + CNS_GetNumberOfOffcutsInShearSequence@4 @443 NONAME + CNS_GetOffcutInShearSequence = CNS_GetOffcutInShearSequence@24 @444 NONAME + CNS_GetOffcutInShearSequence@24 @445 NONAME CNS_SetShearMaxLength = CNS_SetShearMaxLength@12 @446 NONAME CNS_SetShearMaxLength@12 @447 NONAME CNS_GetNestedPartInternalStatus = CNS_GetNestedPartInternalStatus@16 @448 NONAME @@ -332,3 +346,19 @@ EXPORTS CNS_SetPartIgnorePriority@4 @467 NONAME CNS_SetPartIgnoreStrictNoMixPreference = CNS_SetPartIgnoreStrictNoMixPreference@4 @468 NONAME CNS_SetPartIgnoreStrictNoMixPreference@4 @469 NONAME + CNS_AddVariableSheet = CNS_AddVariableSheet@32 @472 NONAME + CNS_AddVariableSheet@32 @473 NONAME + CNS_ForcePartOutsideHole=CNS_ForcePartOutsideHole@4 @476 NONAME + CNS_ForcePartOutsideHole@4 @477 NONAME + CNS_RenestBadPartsInsideHole=CNS_RenestBadPartsInsideHole@4 @478 NONAME + CNS_RenestBadPartsInsideHole@4 @479 NONAME + CNS_SetCommonCutCheckQualityIfCommonCut=CNS_SetCommonCutCheckQualityIfCommonCut@8 @480 NONAME + CNS_SetCommonCutCheckQualityIfCommonCut@8 @481 NONAME + CNS_SetForceSmallPartsRenestingMode=CNS_SetForceSmallPartsRenestingMode@8 @482 NONAME + CNS_SetForceSmallPartsRenestingMode@8 @483 NONAME + CNS_GetActivationCodeEx=CNS_GetActivationCodeEx@8 @484 NONAME + CNS_GetActivationCodeEx@8 @485 NONAME + CNS_SetPartCommonCutMaxBlockSizeXY=CNS_SetPartCommonCutMaxBlockSizeXY@20 @486 NONAME + CNS_SetPartCommonCutMaxBlockSizeXY@20 @487 NONAME + CNS_AddUnloadingDefectToSheet=CNS_AddUnloadingDefectToSheet@12 @502 NONAME + CNS_AddUnloadingDefectToSheet@12 @503 NONAME diff --git a/Optalog/Lib/x64/liblcnsR64.lib b/Optalog/Lib/x64/liblcnsR64.lib index 187ad81..e08f0a9 100644 Binary files a/Optalog/Lib/x64/liblcnsR64.lib and b/Optalog/Lib/x64/liblcnsR64.lib differ