Path.Area: honour 'from_center' in offset pocket mode

This commit is contained in:
Zheng, Lei
2017-11-28 16:10:46 +08:00
committed by Yorik van Havre
parent 4a9fea3657
commit 0cca82b530
3 changed files with 17 additions and 11 deletions

View File

@@ -1773,12 +1773,14 @@ TopoDS_Shape Area::getShape(int index) {
return myShape;
}
TopoDS_Shape Area::makeOffset(int index,PARAM_ARGS(PARAM_FARG,AREA_PARAMS_OFFSET),int reorient) {
TopoDS_Shape Area::makeOffset(int index,PARAM_ARGS(PARAM_FARG,AREA_PARAMS_OFFSET),
int reorient, bool from_center)
{
build();
AREA_SECTION(makeOffset,index,PARAM_FIELDS(PARAM_FARG,AREA_PARAMS_OFFSET),reorient);
AREA_SECTION(makeOffset,index,PARAM_FIELDS(PARAM_FARG,AREA_PARAMS_OFFSET),reorient,from_center);
std::list<shared_ptr<CArea> > areas;
makeOffset(areas,PARAM_FIELDS(PARAM_FARG,AREA_PARAMS_OFFSET));
makeOffset(areas,PARAM_FIELDS(PARAM_FARG,AREA_PARAMS_OFFSET),from_center);
if(areas.empty()) {
if(myParams.Thicken && myParams.ToolRadius>Precision::Confusion()) {
CArea area(*myArea);
@@ -1819,7 +1821,7 @@ TopoDS_Shape Area::makeOffset(int index,PARAM_ARGS(PARAM_FARG,AREA_PARAMS_OFFSET
}
void Area::makeOffset(list<shared_ptr<CArea> > &areas,
PARAM_ARGS(PARAM_FARG,AREA_PARAMS_OFFSET))
PARAM_ARGS(PARAM_FARG,AREA_PARAMS_OFFSET), bool from_center)
{
if(fabs(offset)<Precision::Confusion())
return;
@@ -1846,8 +1848,11 @@ void Area::makeOffset(list<shared_ptr<CArea> > &areas,
#endif
for(int i=0;count<0||i<count;++i,offset+=stepover) {
areas.push_back(make_shared<CArea>());
CArea &area = *areas.back();
if(from_center)
areas.push_front(make_shared<CArea>());
else
areas.push_back(make_shared<CArea>());
CArea &area = from_center?(*areas.front()):(*areas.back());
CArea areaOpen;
#ifdef AREA_OFFSET_ALGO
if(myParams.Algo == Area::Algolibarea) {
@@ -1948,7 +1953,7 @@ TopoDS_Shape Area::makePocket(int index, PARAM_ARGS(PARAM_FARG,AREA_PARAMS_POCKE
ExtraPass = -1;
Stepover = -stepover;
// make offset and make sure the loop is CW (i.e. inner wires)
return makeOffset(index,PARAM_FIELDS(PARAM_FNAME,AREA_PARAMS_OFFSET),-1);
return makeOffset(index,PARAM_FIELDS(PARAM_FNAME,AREA_PARAMS_OFFSET),-1,from_center);
}case Area::PocketModeZigZagOffset:
pm = ZigZagThenSingleOffsetPocketMode;
break;
@@ -2012,7 +2017,7 @@ TopoDS_Shape Area::makePocket(int index, PARAM_ARGS(PARAM_FARG,AREA_PARAMS_POCKE
CAreaPocketParams params(
tool_radius,extra_offset,stepover,from_center,pm,angle);
CArea in(*myArea);
// MakePcoketToolPath internally uses libarea Offset which somehow demands
// MakePocketToolPath internally uses libarea Offset which somehow demands
// reorder before input, otherwise nothing is shown.
in.Reorder();
in.MakePocketToolpath(out.m_curves,params);

View File

@@ -153,7 +153,7 @@ protected:
* See #AREA_PARAMS_OFFSET for description of the arguments.
*/
void makeOffset(std::list<std::shared_ptr<CArea> > &areas,
PARAM_ARGS_DEF(PARAM_FARG,AREA_PARAMS_OFFSET));
PARAM_ARGS_DEF(PARAM_FARG,AREA_PARAMS_OFFSET), bool from_center=false);
/** Make a pocket of the combined shape
*
@@ -218,7 +218,8 @@ public:
* If more than one offset is requested, a compound shape is return
* containing all offset shapes as wires regardless of \c Fill setting.
*/
TopoDS_Shape makeOffset(int index=-1, PARAM_ARGS_DEF(PARAM_FARG,AREA_PARAMS_OFFSET), int reoirent=0);
TopoDS_Shape makeOffset(int index=-1, PARAM_ARGS_DEF(PARAM_FARG,AREA_PARAMS_OFFSET),
int reoirent=0, bool from_center=false);
/** Make a pocket of the combined shape
*

View File

@@ -105,7 +105,7 @@
((double,extra_offset,PocketExtraOffset,0.0,"Extra offset for pocketing",App::PropertyDistance))\
((double,stepover,PocketStepover,0.0,\
"Cutter diameter to step over on each pass. If =0, use ToolRadius.",App::PropertyLength))\
((bool,from_center,FromCenter,true,"Start pocketing from center"))\
((bool,from_center,FromCenter,false,"Start pocketing from center"))\
((double,angle,Angle,45,"Pattern angle in degree",App::PropertyAngle))\
((double,angle_shift,AngleShift,0.0,"Pattern angle shift for each section", App::PropertyAngle))\
((double,shift,Shift,0.0,"Pattern shift distance for each section.\n"\