I've checked in a patch to IntLigne::Copy(FloatLigne*) that improves performance on my box.
Previously, it had been taking 0.10 sec (4.74%), but now has been reduced to 0.03 sec (1.47%).
I don't think I made any algorithmic changes, and booleans seems to still be working right, but I'd appreciate it if someone could keep an eye on it in case a goof got introduced.
Bryce
Before: % cumulative self time seconds seconds name 11.85 0.25 0.25 Shape::SwapEdges(int, int) 7.11 0.40 0.15 Shape::ConvertToShape(Shape*, fill_typ, bool) 4.74 0.50 0.10 IntLigne::Copy(FloatLigne*) <---- 3.79 0.58 0.08 Shape::SwapPoints(int, int) 3.32 0.65 0.07 Shape::CmpToVert(NR::Point, NR::Point, bool, bool) ...
After: % cumulative self time seconds seconds name 13.73 0.28 0.28 Shape::SwapEdges(int, int) 7.35 0.43 0.15 Shape::ConvertToShape(Shape*, fill_typ, bool) 5.39 0.54 0.11 Shape::SwapPoints(int, int) 3.43 0.61 0.07 FloatLigne::InsertBord(int, float, int) 3.43 0.68 0.07 FloatLigne::Flatten() 3.43 0.75 0.07 Shape::TesteIntersection(SweepTree*, SweepTree*, NR::Point&, double&, double&, bool) 2.94 0.81 0.06 Shape::AddEdge(int, int) 2.45 0.86 0.05 Shape::TesteAdjacency(Shape*, int, NR::Point, int, bool) 2.45 0.91 0.05 Shape::CheckAdjacencies(int, int, Shape*, int) 1.96 0.95 0.04 Shape::CheckEdges(int, int, Shape*, Shape*, bool_op) 1.96 0.99 0.04 Shape::SortEdges() 1.47 1.02 0.03 sp_repr_attr(SPRepr const*, char const*) 1.47 1.05 0.03 IntLigne::Copy(FloatLigne*) <---- 1.47 1.08 0.03 nr_path_matrix_bbox_union(NRBPath const*, NR::Matrix const&, NRRect*) 1.47 1.11 0.03 nr_object_check_instance_type(void*, unsigned) ...