fougue / mayo Goto Github PK
View Code? Open in Web Editor NEW3D CAD viewer and converter based on Qt + OpenCascade
License: BSD 2-Clause "Simplified" License
3D CAD viewer and converter based on Qt + OpenCascade
License: BSD 2-Clause "Simplified" License
Which version of Qt is used? Is msvc2017?
Some items(ViewCube, buttons in the 3D view, ...) look small on High DPI(eg 4k) monitors.
This is caused by usage of hard-coded pixel sizes in the source code.
Find a way to express sizes that are compatible for any screen resolution.
Resources:
https://doc.qt.io/qt-5/highdpi.html
https://doc.qt.io/qt-6/highdpi.html
https://unlimited3d.wordpress.com/2019/12/22/scalable-ui-and-high-dpi-screens
OpenCascade v7.5.0 introduced support of the glTF format for writing(see class RWGltf_CafWriter
)
Make use of that new capability
Support defined colors in the 3D graphics view.
Also populate the construction tree structure with the assemblies.
This is all about supporting CAF documents.
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();`
Add the HLR display mode for shape entities.
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
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 !
OpenCascade can write VRML files.
Make use of that capability
When mouse move, the lines of face is highlighting. If the face not lines is highlighting, It would be better.
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
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)
Current build system is QMake and it's still there for Qt6.
In the long-term the Mayo project should migrate to CMake
When I open this step file ,it got a error .
jdzl-step.zip
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.
Support reading Rhino files with the help of the OpenNURBS library.
See :
https://github.com/mcneel/opennurbs
http://www.cppblog.com/eryar/archive/2014/11/01/208741.html
http://www.cppblog.com/eryar/archive/2014/11/08/208819.html
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
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
Add exchange feature in Options dialog.
This should allow to :
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)
Export an XDE assembly (stored in TDocStd_Document
) to AMF using gmio.
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?
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.
$ 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
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.
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.
Version a8cd9ad
../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"));
| ^
OpenCascade v7.4.0 introduced support of the glTF format for reading.
Make use of that new capability
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.
Mayo systematically crashes on exit, the stack trace reveals that is related to Draw functions + Tcl calls
Display non-zoomable trihedron located at the 3D origin.
This helps to see where are placed loaded parts
This feature allows to graphically explode an assembly tree according to a distance factor.
Use this blog article as a reference :
https://cadexchanger.com/blog/implementation-of-exploded-views-in-cad-exchanger-sdk/
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.
OpenCascade v7.4.0 introduced support of the Wavefront OBJ format for reading.
Make use of that new capability
Would it be possible to do this so compiling wouldn't be necessary ?
this is also the way FreeCAD does it.
Provide conversion tool through CLI(Command Line Interface).
Something like :
$> mayo file.step --export file.obj --export file.stl
Potential helpers :
https://github.com/p-ranav/indicators
https://github.com/ikalnytskyi/termcolor
https://github.com/prakhar1989/progress-cpp
This feature is also related to #56
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
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?
Lets setup Travis CI for auto-build AppImage (portable package for Linux) for each commit:
../blob/master/.travis.yml
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:
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
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
}
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
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
OpenCascade v7.4.0 introduced AIS_ViewCube.
This feature consists of using this new tool when available.
Detailed description of what is possible :
https://www.openinventor.com/en/features/oil-gas-geosciences/viewing-cube
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)
Add area and volume properties in the "Data" section of any loaded part (shape or mesh).
Note:
For STEP validation properties, unfortunately OpenCascade (as of v7.3.0) can't load them for actual STEP files, this will be fixed in a later verison.
See https://tracker.dev.opencascade.org/view.php?id=29846
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 :
The new UI will allow users to add/remove clip planes in the 3D view.
Capping is configurable : solid/hatch, color, material, ...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.