Code Monkey home page Code Monkey logo

mayo's Introduction

Windows CI Linux CI macOS CI Codacy Badge Downloads Version

Logo

Mayo the opensource 3D CAD viewer and converter

👓 Overview

  • Convert 3D files
    Mayo can read/write 3D files from/to STEP, IGES, STL and many other CAD formats

  • Visualize 3D files
    Mayo 3D viewer supports clip planes, exploding of assemblies, measurement of shapes, show/hide parts, ...

  • Cross platform
    Mayo runs on Windows, Linux and macOS

  • Solid foundations
    Mayo is developed in modern C++ with Qt and OpenCascade

For more details have a look at this fine review Introducing Mayo by Libre Arts
There's also a complete video on YouTube

⚡ Features

  • 3D clip planes with configurable capping

  • 3D exploding of the model tree allowing better exploration of complex designs

  • 3D measure tools for circles, angles, lengths, areas, bounding box, ...

  • 3D view cube providing intuitive camera manipulation

  • Quick access to CAD files recently open thanks to thumbnails in the Home page

  • Toggle item visibility within the Model tree(use checkbox)

  • Customizable mesh precision for BREP shapes, affecting visualization quality and conversion into mesh formats

  • Convert files to multiple CAD formats from command-line interface💻

💾 Supported formats

Format Import Export Notes
STEP AP203, 214, 242
IGES v5.3
BREP OpenCascade format
DXF
OBJ
glTF 1.0, 2.0 and GLB
VRML v2.0 UTF8
STL ASCII/binary
AMF v1.2 Text/ZIP(export)
PLY ASCII/binary
OFF
3MF
3DS
FBX
Collada
X3D
X(DirectX)
Image PNG, JPEG, ...

See also this dedicated wikipage for more details

🔍 3D viewer operations

Operation Mouse/Keyboard controls
Rotate mouseLeft + move
Pan mouseRight + move
Zoom mouseLeft + mouseRight + move
Zoom +/- mouseWheel(scroll)
Window zoom CTRL + mouseLeft + move
Instant zoom spaceBar
Select Object mouseLeft click
Select Objects SHIFT + mouseLeft clicks

Mayo supports also multiple 3D viewer navigation styles to mimic common CAD applications(CATIA, SOLIDWORKS, ...)

📦 Install

Release packages are available for Windows and Linux on the Releases page.

Alternatives for Windows:

winget install --id Fougue.Mayo
scoop bucket add extras
scoop install extras/mayo

🔨 How to build

Instructions for Windows
Instructions for Linux
Instructions for macOS

🎬 Gallery

Easy to use command-line utility for batch conversion of CAD files

Import of glTF file with textures

Import of STEP file with many parts

Import of PLY file defining point cloud

Options dialog with import/export configuration per CAD format

Home page with quick access to recent files

mayo's People

Contributors

andrsd avatar huguesdelorme avatar luzpaz avatar neuoy avatar sliedes avatar victorlamoine avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mayo's Issues

Ambiguous call to QLocale::toString()

Version a8cd9ad

  • Kubuntu 20.04
  • gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
  • Qt 5.12.8
  • OpenCascade 7.50
  • gmio OFF
../src/src/base/string_utils.cpp: In static member function ‘static QString Mayo::StringUtils::bytesText(uint64_t, const QLocale&)’:
../src/src/base/string_utils.cpp:97:56: error: call of overloaded ‘toString(uint64_t&)’ is ambiguous
   97 |         return tr("%1%2").arg(locale.toString(sizeBytes), tr("B"));
      |                                                        ^

Little question about displaying the step file colors with opencascade

Hi,

The robot program is now working and tested oke realtime with motors.
https://github.com/grotius-cnc/Skynet_Robot_Control_Rtos_Ethercat

Can you please point me in the right direction?
My last thing to solve is to display the step file colors as in mayo. After many hours i did not succeed. I thought maybe i can ask over here. Excuse me if you see this as polution of your repro.

Here is a piece of code that displays the robot. Maybe you can look at it, and have an idea or example to display the colors. Thanks a lot !

` Handle(TDocStd_Document) doc;

STEPCAFControl_Reader aReader; //https://old.opencascade.com/content/getting-part-properties-form-iges-file
aReader.SetColorMode(true);
aReader.SetNameMode(true);
aReader.SetLayerMode(true);
aReader.ReadFile("KR6_KR10_R900.stp");
doc = new TDocStd_Document("StepReader");
aReader.Transfer(doc);

// Assembly = XCAFDoc_DocumentTool::ShapeTool(doc->Main());

Handle(XCAFDoc_ShapeTool) Assembly = XCAFDoc_DocumentTool::ShapeTool(doc->Main());
TDF_LabelSequence frshapes;
Assembly->GetShapes(frshapes);
TopoDS_Shape shape = Assembly->GetShape(frshapes.Value(1));
Handle(AIS_Shape) ais_shape = new AIS_Shape(shape);

//get a label of shape.
TDF_Label aLabel;
aLabel = Assembly->FindShape(shape);

Handle(XCAFDoc_ColorTool) myColors = XCAFDoc_DocumentTool::ColorTool(doc->Main());

//TDF_LabelSequence ColLabels;
//myColors->GetColors(ColLabels);

Quantity_Color col;
XCAFDoc_ColorType ctype;
myColors->GetColor(aLabel,ctype,col);

ais_shape->SetColor(col);

m_context->Display(ais_shape,0);
m_view->Redraw();`

NEW BEE REQUEST

Please upload any video ,process for this project to be integration with opencascade7.4..please understand my situation as iam new bee to coding

steps i done
1.Install and able to built open cascade with vs2017 without any issues

Port to OpenCascade v7.5.0

OpenCascade released v7.5.0 on 9 november 2020(see announcement)
Adapt Mayo source code to support that version as well(and keep compatibility with v7.3.0 and v7.4.0)

Compilation error C2766 "std::hash<QString>" already defined

Compiling mayo develop branch(as of 09th july 2020) gives the error :

.../mayo/src/3rdparty/fougtools/qttools/core/qstring_hfunc.h(38): error C2766: explicit specialization ; 'std::hash<QString>' already defined
.../include/QtCore/qhashfunctions.h(204): note: see previous definition of 'hash<QString>'

Compiler: Visual C++ 2017 x64
Qt: 5.14.2

UTF-8 part name

Not sure if related to OpenCascade or Mayo but the part name displayed in Mayo does not support UTF-8 while the document name does:
image

I have noticed OpenCascade 7.5.0 brings some UTF-8 improvements but for writing files.

Color by surface

Hi, I'm trying to add these new features for .stp files (color by surface) and I'm following these instructions:

The "labelCube" in your example is the root of the model tree or a field in the step file?
In the second case, the step file must have a structure by shape?
For example, this is my step file

How debug the application

Hi,
which are the steps to debug the application?
Ide: Microsoft visual studio 2017
I click on "Open a project or solution" and...
I have to select a file from these formats .sln, .dsw , .vcv
Where I can found it?

Thanks

Load/save options from/to INI file

Add exchange feature in Options dialog.
This should allow to :

  • Load options from INI file
  • Save options to INI file

This includes also to load INI file at application startup with a new command line option named --settings <filepath>

The INI format is a human readable text-based format as provided with QSettings::IniFormat
Make sure stored values in the INI file are strings (ie beware of QVariant serialization)

Compile error

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.1 LTS
Release:	20.04
Codename:	focal
$ g++ --version
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

opencascade-7.4.0 compiled + installed from source

mkdir -p $HOME/software/mayo/build
cd $HOME/software/mayo/
git clone https://github.com/fougue/mayo.git src
cd build
export CSF_OCCTIncludePath=/usr/local/include/opencascade/
export CSF_OCCTLibPath=/usr/local/lib/
qmake ../src
make -j4
$ git status 
Sur la branche develop
Votre branche est à jour avec 'origin/develop'.

rien à valider, la copie de travail est propre

Compile error:

$ make -j12
g++ -c -pipe -std=c++17 -O2 -std=gnu++1z -Wall -W -D_REENTRANT -fPIC -DHAVE_CONFIG_H -DHAVE_FSTREAM -DHAVE_IOSTREAM -DHAVE_IOMANIP -DHAVE_LIMITS_H -DOCCT_HANDLE_NOCAST -DLIN -DLININTEL -DOCC_CONVERT_SIGNALS -D_OCC64 -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../src -I. -Isrc/app -I../src/src/app -I../src/src/3rdparty -isystem /usr/local/include/opencascade -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o io_occ_step.o ../src/src/base/io_occ_step.cpp
../src/src/base/io_occ_step.cpp:66:50: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   66 |              "`life_cycle_stage` set to `design`") },
      |                                                  ^
../src/src/base/io_occ_step.cpp:69:52: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   69 |              "`life_cycle_stage` set to `analysis`") },
      |                                                    ^
../src/src/base/io_occ_step.cpp:70:82: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   70 |         { int(ProductContext::Both), textId("Both"), tr("Translates all products") }
      |                                                                                  ^
../src/src/base/io_occ_step.cpp:71:5: error: could not convert ‘{{((int)Mayo::IO::OccStepReader::ProductContext::Design), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::ProductContext::Analysis), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::ProductContext::Both), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}}’ from ‘<brace-enclosed initializer list>’ to ‘const Mayo::Enumeration’
   71 |     };
      |     ^
      |     |
      |     <brace-enclosed initializer list>
../src/src/base/io_occ_step.cpp:76:41: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   76 |              "(not with sub-assemblies)") },
      |                                         ^
../src/src/base/io_occ_step.cpp:80:79: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   80 |              "applications requiring specialized processing of assembly parts") },
      |                                                                               ^
../src/src/base/io_occ_step.cpp:84:71: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   84 |              "with specific product, as a complement to assembly mode") },
      |                                                                       ^
../src/src/base/io_occ_step.cpp:88:65: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   88 |              "all of them are read and put in a single compound") }
      |                                                                 ^
../src/src/base/io_occ_step.cpp:89:5: error: could not convert ‘{{((int)Mayo::IO::OccStepReader::AssemblyLevel::Assembly), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::AssemblyLevel::Structure), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::AssemblyLevel::Shape), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::AssemblyLevel::All), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}}’ from ‘<brace-enclosed initializer list>’ to ‘const Mayo::Enumeration’
   89 |     };
      |     ^
      |     |
      |     <brace-enclosed initializer list>
../src/src/base/io_occ_step.cpp:93:59: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   93 |           tr("Prefer `ADVANCED_BREP_SHAPE_REPRESENTATION`") },
      |                                                           ^
../src/src/base/io_occ_step.cpp:95:62: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   95 |           tr("Prefer `MANIFOLD_SURFACE_SHAPE_REPRESENTATION`") },
      |                                                              ^
../src/src/base/io_occ_step.cpp:97:75: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   97 |           tr("Prefer `GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION`") },
      |                                                                           ^
../src/src/base/io_occ_step.cpp:99:59: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
   99 |           tr("Prefer `FACETTED_BREP_SHAPE_REPRESENTATION`") },
      |                                                           ^
../src/src/base/io_occ_step.cpp:101:66: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
  101 |           tr("Prefer `EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION`") },
      |                                                                  ^
../src/src/base/io_occ_step.cpp:103:77: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
  103 |           tr("Prefer `GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION`") },
      |                                                                             ^
../src/src/base/io_occ_step.cpp:105:81: error: call to ‘static QString Mayo::IO::OccStepReader::Properties::tr(const char*, const char*, int)’ uses the default argument for parameter 2, which is not yet defined
  105 |           tr("Translate all representations (if more than one, put in compound)") },
      |                                                                                 ^
../src/src/base/io_occ_step.cpp:106:5: error: could not convert ‘{{((int)Mayo::IO::OccStepReader::ShapeRepresentation::AdvancedBRep), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::ShapeRepresentation::ManifoldSurface), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::ShapeRepresentation::GeometricallyBoundedSurface), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::ShapeRepresentation::FacettedBRep), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::ShapeRepresentation::EdgeBasedWireframe), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::ShapeRepresentation::GeometricallyBoundedWireframe), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}, {((int)Mayo::IO::OccStepReader::ShapeRepresentation::All), Mayo::IO::OccStepReader::Properties::textId(const char*)(), <expression error>}}’ from ‘<brace-enclosed initializer list>’ to ‘const Mayo::Enumeration’
  106 |     };
      |     ^
      |     |
      |     <brace-enclosed initializer list>
make: *** [Makefile:1697 : io_occ_step.o] Erreur 1

Migrate to CMake

Current build system is QMake and it's still there for Qt6.
In the long-term the Mayo project should migrate to CMake

STEP and IGES assemblies support

Support defined colors in the 3D graphics view.
Also populate the construction tree structure with the assemblies.

This is all about supporting CAF documents.

Support of 3D clip planes

The new UI will allow users to add/remove clip planes in the 3D view.
Capping is configurable : solid/hatch, color, material, ...

info request where to find the current loaded drawing information.

Hi,

Excellent program !! I am able to compile it on linux debian buster through changing some include paths.

Trough the code complexity i can't really find how to retrieve positions of current loaded drawing parts. In my case a 6 axis robot in step file format. I would suspect some data array's, structs, or vector array's somewhere. But i am unable to find them.

I want to be able to rotate the parts, and translate them. It sounds quite easy. I can make buttons and sliders already in the program side tab. The slot and signals don't work, but i can connect them manually, no problem.

https://raw.githubusercontent.com/grotius-cnc/mayo/develop/mayo.png

Just imagine your program working as RoKiSim, this is a basic robot simulator, but then connected to real hardware by the hal layer of Ethercat RTos. See my reprository. It can also be connected to linuxcnc.

Is it possible to write some tiny header file for me that can be used for this job?
A few lines of code that are pointing out how to get the info out of the drawing would be perfect !

Support writing image files

Implement image export as a sub-class of Mayo::IO::Writer
This will allow to render model tree nodes into an offscreen and then write that to an image file.

Parameters :

  • Format (PNG, JPEG, ...)
  • Width x height
  • Compression/quality(when applicable)
  • Background
  • View orientation

Support reading of Collada files

This is already supported by FreeCAD, so I think that OpenCascade might already support this. I think is useful to export from STEP (CAD files) to Blender (for rendering) without relying on FreeCAD.

Display quantities according to a unit system

Quantities such as lengths, areas, volumes, and so on should be displayed according to a current unit system. The latter can be chosen by the user in the options dialog.
As as starter, provide SI and ImperialUK unit systems.

build with VS2019

when i build the project with Opencascade7.5 + Qt5.12 + VS2019, there are 9 errors :
错误 LNK2019 无法解析的外部符号 "public: static class std::unique_ptr<class Mayo::PropertyGroup,struct std::default_delete > __cdecl Mayo::IO::OccGltfReader::createProperties(class Mayo::PropertyGroup *)" (?createProperties@OccGltfReader@IO@Mayo@@sa?AV?$unique_ptr@VPropertyGroup@Mayo@@U?$default_delete@VPropertyGroup@Mayo@@@std@@@std@@PEAVPropertyGroup@3@@z),函数 "public: virtual class std::unique_ptr<class Mayo::PropertyGroup,struct std::default_delete > __cdecl Mayo::IO::OccFactoryReader::createProperties(struct Mayo::IO::Format const &,class Mayo::PropertyGroup *)const " (?createProperties@OccFactoryReader@IO@Mayo@@ueba?AV?$unique_ptr@VPropertyGroup@Mayo@@U?$default_delete@VPropertyGroup@Mayo@@@std@@@std@@AEBUFormat@23@PEAVPropertyGroup@3@@z) 中引用了该符号 mayo C:\Users\Administrator\Desktop\Qt\mayo-ci-occ7.5\io_occ.obj 1

please help me

Create an AppImage for Mayo

Would it be possible to do this so compiling wouldn't be necessary ?
this is also the way FreeCAD does it.

Color a single component

Hi,
I'm trying to add a new feature to the program. I would like to color a single selected item with the color I prefer.
Above all, I add this line:

 m_propertyReferredColor.setUserReadOnly(false);

In this way, I could choose the color.

Now I want to ask you this great favor.

  1. It is possible to change also the component's color in response to the changes in the properties I did?
  2. It is possible to make this change permanent? Because If I selected another component this change (the color I choose) disappears.

compile error!

There are two compile error. Win10, qt5.10, vs2017, occt7.3

qt_utils.obj: error: LNK2019: unresolved external symbol "public: __cdecl TCollection_ExtendedString::TCollection_ExtendedString(char16_t const * const)" (??0TCollection_ExtendedString@@qeaa@QEB_S@Z) referenced in function "public: static class TCollection_ExtendedString __cdecl occ::QtUtils::toOccExtendedString(class QString const &)" (?toOccExtendedString@QtUtils@occ@@sa?AVTCollection_ExtendedString@@AEBVQString@@@z)

qt_utils.obj: error: LNK2019: unresolved external symbol "public: char16_t const * __cdecl TCollection_ExtendedString::ToExtString(void)const " (?ToExtString@TCollection_ExtendedString@@QEBAPEB_SXZ) referenced in function "public: static class QString __cdecl occ::QtUtils::toQString(class TCollection_ExtendedString const &)" (?toQString@QtUtils@occ@@sa?AVQString@@AEBVTCollection_ExtendedString@@@z)

MinGW 8.1.0 not supported

Hi,

I just failed to compile mayo with the current MinGW 64 release 8.1.0.

Mayo uses the magic enum library. This library does not support the current MinGW release 8.1.0. The MinGW version 8.1.0 is also the version that ships with Qt. Because of this problem, it is not possible to build mayo with the current MinGW release.

Build Error

Hi,
What is the "(n)make" command?
It's a simple "make"? I run "make" (mingw32-make.exe) and there are errors due to Tab spaces.
"Makefile.Release:516: *** missing separator. Stop. " so I fix it by adding a tab.
But there is a new error and I don't know how to fix it. "*** [Makefile.Release:514: {src\base}.cpp{release}.obj] Error 1"

If I run "nmake" instead of "make", I get this error:
"-DNDEBUG -fo release\mayo_resource.res mayo_resource.rc
'rc' is not recognized as an internal or external command,
operable program or batch file.
NMAKE : fatal error U1077: 'rc' : return code '0x1'"

Thanks

Mayo software run issue

Hi, I'm not sure i fully understood, how do i enter the actual program.
I've installed Mayo, OpenCascade and i have Qt.
What is the actual run program? do i need to run something from the Qt or from console?

Undefined reference to BSplCLib::MovePointAndTangent

  • Kubuntu 20.04
  • OpenCascade 7.5.0 compiled from source
  • Qt 5.12.8
export CSF_OCCTIncludePath=/home/victor/software/opencascade-7.5.0/install/include/opencascade/
export CSF_OCCTLibPath=/home/victor/software/opencascade-7.5.0/install/lib/
qmake ../src
git version 2.25.1
Project MESSAGE: Mayo version 0.3.0.605-cbee613 release
Project MESSAGE: Qt version 5.12.8
Project MESSAGE: OpenCascade version 7.5.0
Project MESSAGE: gmio OFF
make -j12
$ ./mayo 
./mayo: symbol lookup error: /lib/x86_64-linux-gnu/libTKG2d.so.7: undefined symbol: _ZN8BSplCLib19MovePointAndTangentEdRK8gp_Vec2dS2_dibiiRK18NCollection_Array1I8gp_Pnt2dERKS3_IdESA_RS5_Ri

$ c++filt _ZN8BSplCLib19MovePointAndTangentEdRK8gp_Vec2dS2_dibiiRK18NCollection_Array1I8gp_Pnt2dERKS3_IdESA_RS5_Ri
BSplCLib::MovePointAndTangent(double, gp_Vec2d const&, gp_Vec2d const&, double, int, bool, int, int, NCollection_Array1<gp_Pnt2d> const&, NCollection_Array1<double> const&, NCollection_Array1<double> const&, NCollection_Array1<gp_Pnt2d>&, int&)

Update 1

It's using system libraries (installed most probably because of FreeCAD) instead of the ones I have compiled:

find /home/victor/software/opencascade-7.5.0/ -name "*libTKG2d*"
/home/victor/software/opencascade-7.5.0/install/lib/libTKG2d.so
/home/victor/software/opencascade-7.5.0/install/lib/libTKG2d.so.7
/home/victor/software/opencascade-7.5.0/install/lib/libTKG2d.so.7.5.0
/home/victor/software/opencascade-7.5.0/build/lin64/gcc/lib/libTKG2d.so
/home/victor/software/opencascade-7.5.0/build/lin64/gcc/lib/libTKG2d.so.7
/home/victor/software/opencascade-7.5.0/build/lin64/gcc/lib/libTKG2d.so.7.5.0

Selection in 3D graphics

The entities selected in the application tree should also appear selected in the 3D graphics.
Also make this interaction works in the other sense : when the user selects some items in the 3D view then update selection in the application tree accordingly.

Display 3D mouse position in active view

As mouse is moving in the active 3D view, show the coords of the "projected" 3D mouse position aside the GUI document selector.
When a graphical object (eg AIS_Shape) is hovered then show the coords of the "picked" mouse point on the object, otherwise show the mouse position projected on a plane centered at the origin.

Show/hide inner document tree nodes

Provide the possibility to show/hide document sub tree nodes(tree nodes below entity roots) in the "Model tree" panel.
For example this would be a nice to have for XCAF entities like STEP assembly : show/hide a component, an instance, ...
For XCAF the usage of AIS_ColoredDrawer::SetHidden() seems the way to go.

Display the visibility status with a checkbox in the "Model tree" panel

Support writing glTF files

OpenCascade v7.5.0 introduced support of the glTF format for writing(see class RWGltf_CafWriter)
Make use of that new capability

Build on macOS Big Sur fails unless QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.14

Without setting the MacOS version equal to or higher than 10.14, the build fails because certain std::variant functionalities were not available before 10.14.
Specifically, in occ_static_variables_rollback.cpp, the std::get<T>(record.value) in lines 97, 99, 101 throws an error message " occ_static_variables_rollback.cpp:97:71: error: 'get<int, int, double, std::__1::basic_string >' is unavailable: introduced in macOS 10.14
variant:1394:22: note: 'get<int, int, double, std::__1::basic_string >' has been explicitly marked unavailable here"

This can be fixed by updating mayo.pro with

macx {
    QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.14
}

Setup Travis CI for build AppImage (portable binary package for Linux)

Lets setup Travis CI for auto-build AppImage (portable package for Linux) for each commit:

  1. Create ../blob/master/.travis.yml
  2. https://github.com/appimage/AppImageKit
    1.1. https://github.com/probonopd/linuxdeployqt
    1.2 https://github.com/linuxdeploy
  3. https://github.com/probonopd/uploadtool
  4. Enable Travis CI pushing to GitHub releases for this repo.

For example, take a look on LeoCAD .travis.yml implementation:

And here is how resulted builds would look like:

For any AppImage packaging questions & support:

Support reading glTF files

OpenCascade v7.4.0 introduced support of the glTF format for reading.
Make use of that new capability

Convert mouse position to world coordinates

hi;
the V3dView_to3dPosition function works only if there is an object under the mouse cursor, but when its an empty space (false only in perspective views) the coordinates are not correct?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.