diff --git a/Optalog/Include/cns.h b/Optalog/Include/cns.h index e494483..3e2a33c 100644 --- a/Optalog/Include/cns.h +++ b/Optalog/Include/cns.h @@ -5,7 +5,7 @@ * agreement of the authors. * * Authors: Nicolas Leignel and Renaud Lepere - * Copyright: 2014-2016 + * Copyright: 2014-2023 */ #ifndef CNS_H @@ -29,6 +29,10 @@ extern "C" { #ifdef __linux__ #include "cns_linux.h" +#endif + +#ifdef __APPLE__ +#include "cns_linux.h" #endif typedef struct CNS_LaunchingOrder * CNS_LaunchingOrderPtr; @@ -654,6 +658,33 @@ extern "C" { CNS_SetNoMixPreference(CNS_LaunchingOrderPtr order, unsigned max_number_of_active_parts); + /** + * StrictNoMixPreferene + * + * This function is equivalent to CNS_SetNoMixPreference, however it does not have the + * limitation of note 2, that small parts are used to fill holes. This will inforce the + * limitation of @param max_number_of_active_parts number of active parts however this can + * decrease even more nesting performace. + */ + CNS_EXPORT void CNS_API + CNS_SetStrictNoMixPreference(CNS_LaunchingOrderPtr order, + unsigned max_number_of_active_parts); + + + /** + * SetPartIgnoreStrictNoMixPreference + * + * This function is useful if SetStrictNoMixPreference is on, in this case some parts can be + * flagged as ignore strict no mix preference. This means that they can be nested on all the + * nestings. In this case, the max_number_of_active_parts is not respected for these parts. + * + * This is useful for unloadding systems where for instance small parts are not unloaded by the + * robot where stacking space is limited but are unloaded into small boxes. + */ + CNS_EXPORT void CNS_API + CNS_SetPartIgnoreStrictNoMixPreference(CNS_PartPtr part); + + /** * NoOrientationMixOnPart * Preference for limiting the orientation of a single part. @@ -784,6 +815,16 @@ extern "C" { CNS_EXPORT void CNS_API CNS_SetStrictPrioritiesOnParts(CNS_LaunchingOrderPtr order, int strict); + /** + * Ignore priority on some parts. + * + * In strict priorities on part mode, some parts can be flagged as ignore to priority. This + * means that they can be nested on all the nestings without considering them having a fixed + * priority. + */ + CNS_EXPORT void CNS_API + CNS_SetPartIgnorePriority(CNS_PartPtr part); + /** * Control of part priorities position. * @@ -1419,7 +1460,19 @@ extern "C" { CNS_EXPORT void CNS_API CNS_GetPartTorchInfos(CNS_NestingPtr nesting, unsigned part_index, int * group_number, unsigned * torch_number, double * torch_distance); - + + /** + * Renest the holes in order to ensure that the holes with the same parts are nested the same + * way. + * + * In some particular case such as micro-attached parts with automatic unloading system, it may + * be useful that the holes with the same parts are nested exactly the same way in order to + * unload the nested parts on the same stack. + */ + CNS_EXPORT void CNS_API + CNS_SetHoleRenester(CNS_LaunchingOrderPtr launching_order, + int hole_renester_enable); + /* ===================================================================================== * * Statistics diff --git a/Optalog/Lib/x32/MakeLibR32.bat b/Optalog/Lib/x32/MakeLibR32.bat index 3a52a38..23381cd 100644 --- a/Optalog/Lib/x32/MakeLibR32.bat +++ b/Optalog/Lib/x32/MakeLibR32.bat @@ -1,2 +1,4 @@ -"c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\lib.exe" /def:liblcns.def /OUT:liblcnsR32.lib \ No newline at end of file +"c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\lib.exe" /def:liblcns.def /OUT:liblcnsR32.lib + +rem "c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\lib.exe" /def:liblcns.def /OUT:liblcnsR32.lib \ No newline at end of file diff --git a/Optalog/Lib/x32/liblcns.def b/Optalog/Lib/x32/liblcns.def index 5163cc4..21dbc49 100644 --- a/Optalog/Lib/x32/liblcns.def +++ b/Optalog/Lib/x32/liblcns.def @@ -320,3 +320,15 @@ EXPORTS CNS_GetNestedPartInternalStatus@16 @449 NONAME CNS_SetCommonCutAdvancedQualityCheck = CNS_SetCommonCutAdvancedQualityCheck@8 @450 NONAME CNS_SetCommonCutAdvancedQualityCheck@8 @451 NONAME + CNS_SetNoInterpenetrationOnLastGroup = CNS_SetNoInterpenetrationOnLastGroup@8 @458 NONAME + CNS_SetNoInterpenetrationOnLastGroup@8 @459 NONAME + CNS_SetHoleRenester = CNS_SetHoleRenester@8 @460 NONAME + CNS_SetHoleRenester@8 @461 NONAME + CNS_ForceSquareOffcut = CNS_ForceSquareOffcut@12 @462 NONAME + CNS_ForceSquareOffcut@12 @463 NONAME + CNS_SetStrictNoMixPreference = CNS_SetStrictNoMixPreference@8 @464 NONAME + CNS_SetStrictNoMixPreference@8 @465 NONAME + CNS_SetPartIgnorePriority = CNS_SetPartIgnorePriority@4 @466 NONAME + CNS_SetPartIgnorePriority@4 @467 NONAME + CNS_SetPartIgnoreStrictNoMixPreference = CNS_SetPartIgnoreStrictNoMixPreference@4 @468 NONAME + CNS_SetPartIgnoreStrictNoMixPreference@4 @469 NONAME diff --git a/Optalog/Lib/x32/liblcnsR32.lib b/Optalog/Lib/x32/liblcnsR32.lib index 6bb0da2..3462fd7 100644 Binary files a/Optalog/Lib/x32/liblcnsR32.lib and b/Optalog/Lib/x32/liblcnsR32.lib differ diff --git a/Optalog/Lib/x64/MakeLibR64.bat b/Optalog/Lib/x64/MakeLibR64.bat index 9a409f5..607bf43 100644 --- a/Optalog/Lib/x64/MakeLibR64.bat +++ b/Optalog/Lib/x64/MakeLibR64.bat @@ -1,2 +1,4 @@ -"c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\lib.exe" /def:liblcns.def /OUT:liblcnsR64.lib /machine:x64 \ No newline at end of file +"c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\bin\Hostx64\x64\lib.exe" /def:liblcns.def /OUT:liblcnsR64.lib /machine:x64 + +rem "c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\lib.exe" /def:liblcns.def /OUT:liblcnsR64.lib /machine:x64 \ No newline at end of file diff --git a/Optalog/Lib/x64/liblcns.def b/Optalog/Lib/x64/liblcns.def index f8670a8..9558cef 100644 --- a/Optalog/Lib/x64/liblcns.def +++ b/Optalog/Lib/x64/liblcns.def @@ -320,3 +320,15 @@ EXPORTS CNS_GetNestedPartInternalStatus@16 @449 NONAME CNS_SetCommonCutAdvancedQualityCheck = CNS_SetCommonCutAdvancedQualityCheck@8 @450 NONAME CNS_SetCommonCutAdvancedQualityCheck@8 @451 NONAME + CNS_SetNoInterpenetrationOnLastGroup = CNS_SetNoInterpenetrationOnLastGroup@8 @458 NONAME + CNS_SetNoInterpenetrationOnLastGroup@8 @459 NONAME + CNS_SetHoleRenester = CNS_SetHoleRenester@8 @460 NONAME + CNS_SetHoleRenester@8 @461 NONAME + CNS_ForceSquareOffcut = CNS_ForceSquareOffcut@12 @462 NONAME + CNS_ForceSquareOffcut@12 @463 NONAME + CNS_SetStrictNoMixPreference = CNS_SetStrictNoMixPreference@8 @464 NONAME + CNS_SetStrictNoMixPreference@8 @465 NONAME + CNS_SetPartIgnorePriority = CNS_SetPartIgnorePriority@4 @466 NONAME + CNS_SetPartIgnorePriority@4 @467 NONAME + CNS_SetPartIgnoreStrictNoMixPreference = CNS_SetPartIgnoreStrictNoMixPreference@4 @468 NONAME + CNS_SetPartIgnoreStrictNoMixPreference@4 @469 NONAME diff --git a/Optalog/Lib/x64/liblcnsR64.lib b/Optalog/Lib/x64/liblcnsR64.lib index f442e25..187ad81 100644 Binary files a/Optalog/Lib/x64/liblcnsR64.lib and b/Optalog/Lib/x64/liblcnsR64.lib differ