Compare commits
1 Commits
temp-ui-cp
...
nurbs-open
Author | SHA1 | Date | |
---|---|---|---|
581ca8f763 |
@@ -699,6 +699,8 @@ if(UNIX AND NOT APPLE)
|
||||
mark_as_advanced(WITH_CXX11_ABI)
|
||||
endif()
|
||||
|
||||
option(WITH_OPENCASCADE "Enable opencascade for curve" ON)
|
||||
|
||||
# Installation process.
|
||||
option(POSTINSTALL_SCRIPT "Run given CMake script after installation process" OFF)
|
||||
mark_as_advanced(POSTINSTALL_SCRIPT)
|
||||
|
157
build_files/cmake/Modules/FindOpenCascade.cmake
Normal file
157
build_files/cmake/Modules/FindOpenCascade.cmake
Normal file
@@ -0,0 +1,157 @@
|
||||
# This script finds OpenCASCADE Technology libraries.
|
||||
# The script requires:
|
||||
# OpenCASCADE_DIR - root OCCT folder or folder with CMake configuration files
|
||||
#
|
||||
# Script will define the following variables on success:
|
||||
# OpenCASCADE_FOUND - package is successfully found
|
||||
# OpenCASCADE_INCLUDE_DIR - directory with headers
|
||||
# OpenCASCADE_LIBRARY_DIR - directory with libraries for linker
|
||||
# OpenCASCADE_BINARY_DIR - directory with DLLs
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
# MY_PLATFORM variable
|
||||
math (EXPR MY_BITNESS "32 + 32*(${CMAKE_SIZEOF_VOID_P}/8)")
|
||||
if (WIN32)
|
||||
set (MY_PLATFORM "win${MY_BITNESS}")
|
||||
elseif(APPLE)
|
||||
set (MY_PLATFORM "mac")
|
||||
else()
|
||||
set (MY_PLATFORM "lin")
|
||||
endif()
|
||||
|
||||
# MY_PLATFORM_AND_COMPILER variable
|
||||
if (MSVC)
|
||||
if (MSVC90)
|
||||
set (MY_COMPILER vc9)
|
||||
elseif (MSVC10)
|
||||
set (MY_COMPILER vc10)
|
||||
elseif (MSVC11)
|
||||
set (MY_COMPILER vc11)
|
||||
elseif (MSVC12)
|
||||
set (MY_COMPILER vc12)
|
||||
elseif (MSVC14)
|
||||
set (MY_COMPILER vc14)
|
||||
else()
|
||||
set (MY_COMPILER vc15)
|
||||
message (WARNING "Unknown msvc version. $$MY_COMPILER is used")
|
||||
endif()
|
||||
elseif (DEFINED CMAKE_COMPILER_IS_GNUCC)
|
||||
set (MY_COMPILER gcc)
|
||||
elseif (DEFINED CMAKE_COMPILER_IS_GNUCXX)
|
||||
set (MY_COMPILER gcc)
|
||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
set (MY_COMPILER clang)
|
||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
|
||||
set (MY_COMPILER icc)
|
||||
else()
|
||||
set (MY_COMPILER ${CMAKE_GENERATOR})
|
||||
string (REGEX REPLACE " " "" COMPILER ${MY_COMPILER})
|
||||
endif()
|
||||
set (MY_PLATFORM_AND_COMPILER "${MY_PLATFORM}/${MY_COMPILER}")
|
||||
|
||||
set (OpenCASCADE_DIR "" CACHE PATH "Path to Open CASCADE libraries.")
|
||||
|
||||
# default paths
|
||||
set (OpenCASCADE_INCLUDE_DIR "${OpenCASCADE_DIR}/inc")
|
||||
set (OpenCASCADE_LIBRARY_DIR "${OpenCASCADE_DIR}/${MY_PLATFORM_AND_COMPILER}/lib")
|
||||
set (OpenCASCADE_BINARY_DIR "${OpenCASCADE_DIR}/${MY_PLATFORM_AND_COMPILER}/bin")
|
||||
|
||||
# complete list of OCCT Toolkits (copy-paste from adm/UDLIST, since installed OCCT does not include UDLIST)
|
||||
set (OpenCASCADE_TKLIST "")
|
||||
set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKernel TKMath) # FoundationClasses
|
||||
set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKG2d TKG3d TKGeomBase TKBRep) # ModelingData
|
||||
set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKGeomAlgo TKTopAlgo TKPrim TKBO TKBool TKHLR TKFillet TKOffset TKFeat TKMesh TKXMesh TKShHealing) # ModelingAlgorithms
|
||||
set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKService TKV3d TKOpenGl TKMeshVS TKIVtk TKD3DHost) # Visualization
|
||||
set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKCDF TKLCAF TKCAF TKBinL TKXmlL TKBin TKXml TKStdL TKStd TKTObj TKBinTObj TKXmlTObj TKVCAF) # ApplicationFramework
|
||||
set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKXSBase TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP TKIGES TKXCAF TKXDEIGES TKXDESTEP TKSTL TKVRML TKXmlXCAF TKBinXCAF TKRWMesh) # DataExchange
|
||||
set (OpenCASCADE_TKLIST ${OpenCASCADE_TKLIST} TKDraw TKViewerTest) # Draw
|
||||
|
||||
# validate location of OCCT libraries and headers
|
||||
set (OpenCASCADE_INCLUDE_DIR_FOUND)
|
||||
set (OpenCASCADE_LIBRARY_DIR_FOUND)
|
||||
set (OpenCASCADE_LIBRARY_DEBUG_DIR_FOUND)
|
||||
set (OpenCASCADE_IMPLIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
set (OpenCASCADE_SHAREDLIB_RELEASE_FOUND)
|
||||
set (OpenCASCADE_SHAREDLIB_DEBUG_FOUND)
|
||||
if (EXISTS "${OpenCASCADE_INCLUDE_DIR}/Standard.hxx")
|
||||
set (OpenCASCADE_INCLUDE_DIR_FOUND ON)
|
||||
endif()
|
||||
|
||||
if (EXISTS "${OpenCASCADE_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
set (OpenCASCADE_LIBRARY_DIR_FOUND ON)
|
||||
elseif (NOT WIN32 AND EXISTS "${OpenCASCADE_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
set (OpenCASCADE_LIBRARY_DIR_FOUND ON)
|
||||
set (OpenCASCADE_IMPLIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
endif()
|
||||
|
||||
if (EXISTS "${OpenCASCADE_LIBRARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||
set (OpenCASCADE_LIBRARY_DEBUG_DIR_FOUND ON)
|
||||
elseif (NOT WIN32 AND EXISTS "${OpenCASCADE_LIBRARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
set (OpenCASCADE_LIBRARY_DEBUG_DIR_FOUND ON)
|
||||
set (OpenCASCADE_IMPLIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
elseif (OpenCASCADE_LIBRARY_DIR_FOUND)
|
||||
message (STATUS "Only release OpenCASCADE libraries have been found")
|
||||
endif()
|
||||
|
||||
if (NOT OpenCASCADE_LIBRARY_DIR_FOUND AND OpenCASCADE_LIBRARY_DEBUG_DIR_FOUND)
|
||||
set (OpenCASCADE_LIBRARY_DIR_FOUND ON)
|
||||
message (WARNING "Only debug OpenCASCADE libraries have been found")
|
||||
endif()
|
||||
|
||||
if (WIN32)
|
||||
if (EXISTS "${OpenCASCADE_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
set (OpenCASCADE_SHAREDLIB_RELEASE_FOUND ON)
|
||||
endif()
|
||||
if (EXISTS "${OpenCASCADE_BINARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
set (OpenCASCADE_SHAREDLIB_DEBUG_FOUND ON)
|
||||
endif()
|
||||
else()
|
||||
if (EXISTS "${OpenCASCADE_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
set (OpenCASCADE_SHAREDLIB_RELEASE_FOUND ON)
|
||||
endif()
|
||||
if (EXISTS "${OpenCASCADE_LIBRARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}TKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
set (OpenCASCADE_SHAREDLIB_DEBUG_FOUND ON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (OpenCASCADE_INCLUDE_DIR_FOUND AND OpenCASCADE_LIBRARY_DIR_FOUND)
|
||||
set (OpenCASCADE_FOUND ON)
|
||||
set (OpenCASCADE_INSTALL_PREFIX ${OpenCASCADE_DIR})
|
||||
|
||||
# Define OCCT toolkits so that CMake can put absolute paths to linker;
|
||||
# the library existance is not checked here, since modules can be disabled.
|
||||
foreach (aLibIter ${OpenCASCADE_TKLIST})
|
||||
add_library (${aLibIter} SHARED IMPORTED)
|
||||
|
||||
set_property (TARGET ${aLibIter} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
set_target_properties (${aLibIter} PROPERTIES IMPORTED_IMPLIB_RELEASE "${OpenCASCADE_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${OpenCASCADE_IMPLIB_SUFFIX}")
|
||||
if (OpenCASCADE_SHAREDLIB_RELEASE_FOUND)
|
||||
if (WIN32)
|
||||
set_target_properties (${aLibIter} PROPERTIES IMPORTED_LOCATION_RELEASE "${OpenCASCADE_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
else()
|
||||
set_target_properties (${aLibIter} PROPERTIES IMPORTED_LOCATION_RELEASE "${OpenCASCADE_LIBRARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (OpenCASCADE_LIBRARY_DEBUG_DIR_FOUND)
|
||||
set_property (TARGET ${aLibIter} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
|
||||
set_target_properties (${aLibIter} PROPERTIES IMPORTED_IMPLIB_DEBUG "${OpenCASCADE_LIBRARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${OpenCASCADE_IMPLIB_SUFFIX}")
|
||||
if (OpenCASCADE_SHAREDLIB_DEBUG_FOUND)
|
||||
if (WIN32)
|
||||
set_target_properties (${aLibIter} PROPERTIES IMPORTED_LOCATION_DEBUG "${OpenCASCADE_BINARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
else()
|
||||
set_target_properties (${aLibIter} PROPERTIES IMPORTED_LOCATION_DEBUG "${OpenCASCADE_LIBRARY_DIR}d/${CMAKE_SHARED_LIBRARY_PREFIX}${aLibIter}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
else()
|
||||
# fallback searching for CMake configs
|
||||
if (NOT "${OpenCASCADE_DIR}" STREQUAL "")
|
||||
set (anOcctDirBak "${OpenCASCADE_DIR}")
|
||||
find_package (OpenCASCADE CONFIG QUIET PATHS "${OpenCASCADE_DIR}" NO_DEFAULT_PATH)
|
||||
set (OpenCASCADE_DIR "${anOcctDirBak}" CACHE PATH "Path to Open CASCADE libraries." FORCE)
|
||||
else()
|
||||
find_package (OpenCASCADE CONFIG QUIET)
|
||||
endif()
|
||||
endif()
|
@@ -596,6 +596,10 @@ function(SETUP_LIBDIRS)
|
||||
link_directories(${GMP_LIBPATH})
|
||||
endif()
|
||||
|
||||
if(WITH_OPENCASCADE)
|
||||
link_directories(${OpenCASCADE_LIBRARY_DIR})
|
||||
endif()
|
||||
|
||||
if(WIN32 AND NOT UNIX)
|
||||
link_directories(${PTHREADS_LIBPATH})
|
||||
endif()
|
||||
|
@@ -738,3 +738,8 @@ if(WITH_COMPILER_CCACHE)
|
||||
set(WITH_COMPILER_CCACHE OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WITH_OPENCASCADE)
|
||||
find_package_wrapper(OpenCascade REQUIRED)
|
||||
endif()
|
||||
|
||||
|
@@ -791,6 +791,24 @@ if(WITH_GMP)
|
||||
)
|
||||
endif()
|
||||
|
||||
if(WITH_OPENCASCADE)
|
||||
add_definitions(-DWITH_OPENCASCADE)
|
||||
|
||||
list(APPEND INC_SYS
|
||||
${OpenCASCADE_INCLUDE_DIR}
|
||||
)
|
||||
SET(OpenCASCADE_LIBS
|
||||
TKTObjDRAW.a TKQADraw.a TKXDEDRAW.a TKDCAF.a TKDCAF.a TKXSDRAW.a
|
||||
TKViewerTest.a TKTopTest.a TKDraw.a TKXDESTEP.a TKBinXCAF.a TKXmlXCAF.a TKXDEIGES.a TKXCAF.a TKIGES.a TKSTEP.a TKSTEP209.a TKSTEPAttr.a
|
||||
TKSTEPBase.a TKXSBase.a TKStd.a TKStdL.a TKSTL.a TKXml.a TKBin.a TKXmlL.a TKBinL.a TKCAF.a TKXCAF.a TKLCAF.a TKCDF.a TKMeshVS.a TKOpenGl.a TKV3d.a TKService.a
|
||||
TKXMesh.a TKMesh.a TKOffset.a TKFeat.a TKFillet.a TKHLR.a TKBool.a TKBO.a TKShHealing.a TKPrim.a TKTopAlgo.a TKGeomAlgo.a TKBRep.a
|
||||
TKGeomBase.a TKG3d.a TKG2d.a TKMath.a TKernel.a
|
||||
)
|
||||
list(APPEND LIB
|
||||
${OpenCASCADE_LIBS}
|
||||
)
|
||||
endif()
|
||||
|
||||
# # Warnings as errors, this is too strict!
|
||||
# if(MSVC)
|
||||
# string(APPEND CMAKE_C_FLAGS " /WX")
|
||||
|
@@ -67,6 +67,35 @@
|
||||
|
||||
#include "BLO_read_write.h"
|
||||
|
||||
/* opencascade includes */
|
||||
|
||||
#include <IGESCAFControl_Reader.hxx>
|
||||
#include <STEPCAFControl_Reader.hxx>
|
||||
#include <Standard_Stream.hxx>
|
||||
#include <Standard_TypeDef.hxx>
|
||||
#include <StlAPI_Writer.hxx>
|
||||
#include <iostream>
|
||||
|
||||
#include <IMeshData_Status.hxx>
|
||||
#include <IMeshTools_Parameters.hxx>
|
||||
|
||||
#include <BRepBuilderAPI.hxx>
|
||||
#include <BRepTools.hxx>
|
||||
#include <BRep_Tool.hxx>
|
||||
#include <Geom_BSplineSurface.hxx>
|
||||
#include <TColStd_Array1OfInteger.hxx>
|
||||
#include <TColStd_Array1OfReal.hxx>
|
||||
#include <TColgp_Array2OfPnt.hxx>
|
||||
#include <TopoDS.hxx>
|
||||
#include <TopoDS_Iterator.hxx>
|
||||
#include <TopoDS_Vertex.hxx>
|
||||
|
||||
#include <BRepMesh_IncrementalMesh.hxx>
|
||||
#include <Geom_BSplineCurve.hxx>
|
||||
#include <Geom_Curve.hxx>
|
||||
#include <Geom_TrimmedCurve.hxx>
|
||||
#include <NCollection_Array1.hxx>
|
||||
|
||||
/* globals */
|
||||
|
||||
/* local */
|
||||
@@ -1391,6 +1420,209 @@ void BKE_nurb_makeFaces(const Nurb *nu, float *coord_array, int rowstride, int r
|
||||
return;
|
||||
}
|
||||
|
||||
/* An example code I got somewhere on the Internet, this works... */
|
||||
|
||||
TColgp_Array2OfPnt poles(0, 7, 0, 5); // ucol,vrow
|
||||
TColStd_Array1OfReal UKnots(0, 12);
|
||||
TColStd_Array1OfReal VKnots(0, 10);
|
||||
|
||||
TColStd_Array1OfReal UKnots1(0, 5);
|
||||
TColStd_Array1OfReal VKnots1(0, 3);
|
||||
UKnots1.SetValue(0, 0);
|
||||
UKnots1.SetValue(1, 1);
|
||||
UKnots1.SetValue(2, 2);
|
||||
UKnots1.SetValue(3, 3);
|
||||
UKnots1.SetValue(4, 4);
|
||||
UKnots1.SetValue(5, 5);
|
||||
VKnots1.SetValue(0, 0);
|
||||
VKnots1.SetValue(1, 1);
|
||||
VKnots1.SetValue(2, 2);
|
||||
VKnots1.SetValue(3, 3);
|
||||
TColStd_Array1OfInteger UMults(0, 5);
|
||||
UMults.SetValue(0, 4);
|
||||
UMults.SetValue(1, 1);
|
||||
UMults.SetValue(2, 1);
|
||||
UMults.SetValue(3, 1);
|
||||
UMults.SetValue(4, 1);
|
||||
UMults.SetValue(5, 4);
|
||||
TColStd_Array1OfInteger VMults(0, 3);
|
||||
VMults.SetValue(0, 4);
|
||||
VMults.SetValue(1, 1);
|
||||
VMults.SetValue(2, 1);
|
||||
VMults.SetValue(3, 4);
|
||||
int n = 7; //(ctr pnts-1)
|
||||
int k = 4; // degree+1
|
||||
int n1 = 5;
|
||||
int k1 = 4;
|
||||
int t = 0;
|
||||
int a = 0;
|
||||
int b = 0;
|
||||
|
||||
for (int j = 0; j <= n + k; j++) {
|
||||
if (j < k) {
|
||||
t = 0;
|
||||
a++;
|
||||
UKnots.SetValue(a, t);
|
||||
}
|
||||
|
||||
if (k <= j && j <= n) {
|
||||
t = j - k + 1;
|
||||
a++;
|
||||
UKnots.SetValue(a, t);
|
||||
}
|
||||
|
||||
if (j > n) {
|
||||
t = n - k + 2;
|
||||
a++;
|
||||
UKnots.SetValue(a, t);
|
||||
}
|
||||
}
|
||||
UKnots.SetValue(a, t);
|
||||
|
||||
for (int s = 0; s <= n1 + k1; s++) {
|
||||
if (s < k1) {
|
||||
t = 0;
|
||||
b++;
|
||||
VKnots.SetValue(b, t);
|
||||
}
|
||||
|
||||
if (k1 <= s && s <= n1) {
|
||||
t = s - k1 + 1;
|
||||
b++;
|
||||
VKnots.SetValue(b, t);
|
||||
}
|
||||
|
||||
if (s > n1) {
|
||||
t = n1 - k1 + 2;
|
||||
b++;
|
||||
VKnots.SetValue(b, t);
|
||||
}
|
||||
}
|
||||
/*
|
||||
knots = [knots ; t];
|
||||
end
|
||||
|
||||
knots_matrix = knots;
|
||||
*/
|
||||
// gp_Pnt P;
|
||||
// poles.SetValue(1,1,P);
|
||||
// poles.SetValue(1,1,P);
|
||||
poles.SetValue(0, 0, gp_Pnt(0, 0, 0));
|
||||
poles.SetValue(1, 0, gp_Pnt(0.4, 0, 0));
|
||||
poles.SetValue(2, 0, gp_Pnt(0.8, 0, 0));
|
||||
poles.SetValue(3, 0, gp_Pnt(1.2, 0, 0));
|
||||
poles.SetValue(4, 0, gp_Pnt(1.6, 0, 0));
|
||||
poles.SetValue(5, 0, gp_Pnt(2.0, 0, 0));
|
||||
poles.SetValue(6, 0, gp_Pnt(2.5, 0, 0));
|
||||
poles.SetValue(7, 0, gp_Pnt(3, 0, 0));
|
||||
|
||||
poles.SetValue(0, 1, gp_Pnt(0, 0.4, 0));
|
||||
poles.SetValue(1, 1, gp_Pnt(0.4, 0.4, 0.2));
|
||||
poles.SetValue(2, 1, gp_Pnt(0.8, 0.4, 0.3));
|
||||
poles.SetValue(3, 1, gp_Pnt(1.2, 0.4, 0.1));
|
||||
poles.SetValue(4, 1, gp_Pnt(1.6, 0.4, 0));
|
||||
poles.SetValue(5, 1, gp_Pnt(2.0, 0.4, 0.2));
|
||||
poles.SetValue(6, 1, gp_Pnt(2.5, 0.4, 0.1));
|
||||
poles.SetValue(7, 1, gp_Pnt(3, 0.4, 0));
|
||||
|
||||
poles.SetValue(0, 2, gp_Pnt(0, 0.8, 0));
|
||||
poles.SetValue(1, 2, gp_Pnt(0.4, 0.8, 0.5));
|
||||
poles.SetValue(2, 2, gp_Pnt(0.8, 0.8, 0.6));
|
||||
poles.SetValue(3, 2, gp_Pnt(1.2, 0.8, 0.2));
|
||||
poles.SetValue(4, 2, gp_Pnt(1.6, 0.8, 0.0));
|
||||
poles.SetValue(5, 2, gp_Pnt(2.0, 0.8, 0));
|
||||
poles.SetValue(6, 2, gp_Pnt(2.5, 0.8, 0.3));
|
||||
poles.SetValue(7, 2, gp_Pnt(3, 0.8, 0));
|
||||
|
||||
poles.SetValue(0, 3, gp_Pnt(0, 1.2, 0));
|
||||
poles.SetValue(1, 3, gp_Pnt(0.4, 1.2, 0.4));
|
||||
poles.SetValue(2, 3, gp_Pnt(0.8, 1.2, 0.4));
|
||||
poles.SetValue(3, 3, gp_Pnt(1.2, 1.2, 0.2));
|
||||
poles.SetValue(4, 3, gp_Pnt(1.6, 1.2, 0.0));
|
||||
poles.SetValue(5, 3, gp_Pnt(2.0, 1.2, 0.0));
|
||||
poles.SetValue(6, 3, gp_Pnt(2.5, 1.2, 0.5));
|
||||
poles.SetValue(7, 3, gp_Pnt(3, 1.2, 0));
|
||||
|
||||
poles.SetValue(0, 4, gp_Pnt(0, 1.6, 0));
|
||||
poles.SetValue(1, 4, gp_Pnt(0.4, 1.6, 0.3));
|
||||
poles.SetValue(2, 4, gp_Pnt(0.8, 1.6, 0.2));
|
||||
poles.SetValue(3, 4, gp_Pnt(1.2, 1.6, 0.1));
|
||||
poles.SetValue(4, 4, gp_Pnt(1.6, 1.6, 0.3));
|
||||
poles.SetValue(5, 4, gp_Pnt(2.0, 1.6, 0.2));
|
||||
poles.SetValue(6, 4, gp_Pnt(2.5, 1.6, 0.1));
|
||||
poles.SetValue(7, 4, gp_Pnt(3, 1.6, 0));
|
||||
|
||||
poles.SetValue(0, 5, gp_Pnt(0, 2.0, 0));
|
||||
poles.SetValue(1, 5, gp_Pnt(0.4, 2.0, 0));
|
||||
poles.SetValue(2, 5, gp_Pnt(0.8, 2.0, 0));
|
||||
poles.SetValue(3, 5, gp_Pnt(1.2, 2.0, 0));
|
||||
poles.SetValue(4, 5, gp_Pnt(1.6, 2.0, 0));
|
||||
poles.SetValue(5, 5, gp_Pnt(2.0, 2.0, 0));
|
||||
poles.SetValue(6, 5, gp_Pnt(2.5, 2.0, 0));
|
||||
poles.SetValue(7, 5, gp_Pnt(3, 2.0, 0));
|
||||
|
||||
Geom_BSplineSurface Surf(poles,
|
||||
UKnots1,
|
||||
VKnots1,
|
||||
UMults,
|
||||
VMults,
|
||||
3,
|
||||
3,
|
||||
Standard_False,
|
||||
Standard_False); // = new Geom_BSplineSurface();
|
||||
// TopoDS_Shape sh=Surf;
|
||||
// Handle(Geom_Surf) plz= new Geom_Surf(Surf);
|
||||
// Handle (AIS_Shape) ais= new AIS_Shape(sh);
|
||||
// Surf.Bounds(0,2,0,1);
|
||||
// myAISContext->DisplayAll(1,1);//>Display(Surf);
|
||||
|
||||
/* XXXXX: My code does not work........ */
|
||||
/* try to get cascade surface construction to work... not yet working it will crash. */
|
||||
|
||||
TColgp_Array2OfPnt poles = TColgp_Array2OfPnt(0, nu->pntsu, 0, nu->pntsv);
|
||||
TColStd_Array1OfReal uknots = TColStd_Array1OfReal(0, nu->orderu + nu->pntsu);
|
||||
TColStd_Array1OfReal vknots = TColStd_Array1OfReal(0, nu->orderv + nu->pntsv);
|
||||
TColStd_Array1OfInteger umults = TColStd_Array1OfInteger(0, nu->orderu + nu->pntsu);
|
||||
TColStd_Array1OfInteger vmults = TColStd_Array1OfInteger(0, nu->orderv + nu->pntsv);
|
||||
for (int u = 0; u < nu->pntsu; u++) {
|
||||
for (int v = 0; v < nu->pntsv; v++) {
|
||||
BPoint *bp = &nu->bp[u * nu->pntsu + v];
|
||||
poles.SetValue(u, v, gp_Pnt(bp->vec[0], bp->vec[1], bp->vec[2]));
|
||||
printf("pt uv %d %d %f %f %f\n ", u, v, bp->vec[0], bp->vec[1], bp->vec[2]);
|
||||
}
|
||||
}
|
||||
printf("pts uv %d %d\n ", nu->pntsu, nu->pntsv);
|
||||
printf("order uv %d %d\n ", nu->orderu, nu->orderv);
|
||||
for (int u = 0; u < nu->orderu + nu->pntsu; u++) {
|
||||
uknots.SetValue(u, nu->knotsu[u]);
|
||||
printf("%f ", nu->knotsu[u]);
|
||||
}
|
||||
printf("\n");
|
||||
for (int v = 0; v < nu->orderv + nu->pntsv; v++) {
|
||||
vknots.SetValue(v, nu->knotsv[v]);
|
||||
printf("%f ", nu->knotsv[v]);
|
||||
}
|
||||
printf("\n");
|
||||
for (int u = 0; u < nu->orderu + nu->pntsu; u++) {
|
||||
umults.SetValue(u, 0);
|
||||
}
|
||||
umults.SetValue(0, 4);
|
||||
umults.SetValue(nu->orderu + nu->pntsu - 1, 4);
|
||||
for (int v = 0; v < nu->orderv + nu->pntsv; v++) {
|
||||
vmults.SetValue(v, 0);
|
||||
}
|
||||
vmults.SetValue(0, 4);
|
||||
vmults.SetValue(nu->orderv + nu->pntsv - 1, 4);
|
||||
Geom_BSplineSurface surface = Geom_BSplineSurface(poles,
|
||||
uknots,
|
||||
vknots,
|
||||
umults,
|
||||
vmults,
|
||||
nu->orderu - 1,
|
||||
nu->orderv - 1,
|
||||
Standard_False,
|
||||
Standard_False);
|
||||
|
||||
/* allocate and initialize */
|
||||
len = totu * totv;
|
||||
if (len == 0) {
|
||||
|
Reference in New Issue
Block a user