rgcv / CGAL.jl

CGAL meets Julia
MIT License
24 stars 8 forks source link

Implement boolean set operations 2D #4

Open mathieu17g opened 2 years ago

mathieu17g commented 2 years ago

I would like to implement boolean set operation 2D. What do I have to do beyond declaring all functions present in header files with args and doctring ?

EDIT: I have found https://github.com/rgcv/libcgal-julia repository. I understand that I have to implement de wrapping there.

rgcv commented 2 years ago

Hi,

Yes, you'll see that the julia side of things is relatively superficial with some added conversions. Arguably, the bulk of it is in the libcgal-julia C++ wrapper that leverages libcxxwrap.

There is no straightforward answer other than to look at CGAL's documentation, see what functions and data structures/classes interest you, and map them, somewhat via a trial-and-error process, and test them.

I've been detached from this package a while now, but have been meaning to take another look at it. Plenty of things need to be done:

The list could grow endlessly, but hopefully you'll understand why I haven't started re-tackling the package yet. Hopefully I'll find some time to sit down and take a proper look at the ecosystem again.

mathieu17g commented 2 years ago

Thanks for the guideline. I have looked into CxxWrap.jl. For now I have compiled the libcgaljulia... libraries locally. I go on now by trying to make a locally working CGAL.jl to test some modifications before starting to contribute to your work.

The list could grow endlessly, but hopefully you'll understand why I haven't started re-tackling the package yet.

That's worrying. Could you elaborate ? I was betting that it would be faster to contribute to your work than to rewrite some of CGAL algorithms in Julia especially those using arrangements.

rgcv commented 2 years ago

That's worrying. Could you elaborate ?

Yes, I've since left academia and got a job. Sort of have been focusing more on that, and when I have free time, maintaining the package isn't someone that comes to the forefront of my mind. Though, when I'm reminded of it, there's a lot of stuff that I wish could be done about it. Ideally, this would first be a 1-to-1 mapping of CGAL, mounting some julian flourishes on top to make it more convenient.

The https://github.com/JuliaGeometry org has quite a few comprehensive list of packages that may also help out, though I'm not sure if there's anything to do with arrangements. Assuming you've checked there, I'm afraid I have lost some touch with the whole ecosystem so I'm not really up to speed on what's shiny and new or has built up enough of a repertoire that could fit your needs.

mathieu17g commented 2 years ago

@rgcv for information, I have finally managed to build a copy of CGAL_jll and libcgal_julia_jll based on CGAL 5.3.1 after a lot of trial and error:

(CGAL) pkg> st
     Project CGAL v0.5.3
      Status `~/.julia/dev/CGAL/Project.toml`
  [1f15a43c] CxxWrap v0.12.0
  [ae029012] Requires v1.3.0
  [a133c068] CGAL2_jll v5.3.1+0 `https://github.com/mathieu17g/CGAL2_jll.jl#main`
  [e0ff6fd9] libcgal2_julia_jll v0.18.7+0 `https://github.com/mathieu17g/libcgal2_jll.jl#main`

I'm now facing issues at the CGAL.jl stage. It does not precompile. The error messages are pretty limited for me now, but I have to get better acquainted with CxxWrap.jl. Here is below the error message if you have any advice to get into it. If not, I guess I may have first to duplicate CGAL_jll and libcgal_julia_jll based on CGAL 5.3.0 and start from there.

julia> using CGAL
[ Info: Precompiling CGAL [15fcbb24-5a00-427b-98c5-e32879a22884]
ERROR: LoadError: TypeError: in Type{...} expression, expected UnionAll, got a value of type Core.SimpleVector
Stacktrace:
  [1] top-level scope
    @ none:1
  [2] eval
    @ ./boot.jl:373 [inlined]
  [3] makereftype(#unused#::Type{CGAL.VoronoiDiagram2{CGAL.DelaunayTriangulation2}}, mod::Module)
    @ CxxWrap.CxxWrapCore ~/.julia/packages/CxxWrap/ptbgM/src/CxxWrap.jl:660
  [4] wrap_reference_converters(julia_mod::Module)
    @ CxxWrap.CxxWrapCore ~/.julia/packages/CxxWrap/ptbgM/src/CxxWrap.jl:676
  [5] wrapfunctions(jlmod::Module)
    @ CxxWrap.CxxWrapCore ~/.julia/packages/CxxWrap/ptbgM/src/CxxWrap.jl:712
  [6] wrapmodule(so_path::String, funcname::Symbol, m::Module, flags::Nothing)
    @ CxxWrap.CxxWrapCore ~/.julia/packages/CxxWrap/ptbgM/src/CxxWrap.jl:732
  [7] top-level scope
    @ ~/.julia/dev/CGAL/src/CGAL.jl:47
  [8] include
    @ ./Base.jl:418 [inlined]
  [9] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::Nothing)
    @ Base ./loading.jl:1318
 [10] top-level scope
    @ none:1
 [11] eval
    @ ./boot.jl:373 [inlined]
 [12] eval(x::Expr)
    @ Base.MainInclude ./client.jl:453
 [13] top-level scope
    @ none:1
in expression starting at /Users/Mathieu/.julia/dev/CGAL/src/CGAL.jl:1

Could you explain to me the reason why you introduced Khepri?

rgcv commented 2 years ago

There seems to be an issue wrapping your libcgal_julia C++ lib. I haven't been keeping up with CxxWrap so I'm not sure what changed there that might cause the lib to break. Though, if v0.12 is being pulled, I'm guessing you compiled libcgal_julia against libcxxwrap_julia v0.9? If that isn't the case, I'd advise you to revise the dependency versions, try and rebuild libcgal_julia with the appropriate version and see if the error persists. If it does, I recommend checking what changed from libcxxwrap_julia v0.8 to v0.9. libcgal_julia is probably due some tweaking.

Could you explain to me the reason why you introduced Khepri?

Yes, this package (CGAL.jl) was birthed amidst my thesis work, The idea was to have this support Khepri.jl, an Algorithmic Design tool. To that end, I added some loosely coupled glue code that would allow for simple conversion to and fro Khepri types. However, that shouldn't impact you unless you are importing Khepri.

mathieu17g commented 2 years ago

Thanks for the hints. I have built against libcxxwrap_julia v0.9. Maybe it comes from CGAL-5.3.0 to CGAL-5.3.1 upgrade. Anyway, I have to better understand the C++ part in libcgal-julia.

mathieu17g commented 2 years ago

Hello, after a lengthy investigation using libcxxwrap_julia v0.9.1 and various versions of CGAL:

EDIT: It was a flash in the pan. It still does not work. I had forgotten to point back to the JLL version of libcgal-julia in CGAL.jl. It still does not work. I probably have to go back trying to debug the libcxxwrap_julia execution to find out what goes wrong in compilation with BinaryBuilder.jl cross-compiler...

Well, now:

Next: