-
CDemo資料庫內容補正
-
倉儲python-solvespace已更新
未支援項目
*某些項目未紀錄於DOC.exe中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | SLVS_C_PT_FACE_DISTANCE
SLVS_C_PT_ON_FACE
SLVS_C_LENGTH_RATIO
SLVS_C_EQ_LEN_PT_LINE_D
SLVS_C_EQ_PT_LN_DISTANCES
SLVS_C_EQUAL_ANGLE
SLVS_C_EQUAL_LINE_ARC_LEN
SLVS_C_SYMMETRIC
SLVS_C_SYMMETRIC_HORIZ
SLVS_C_SYMMETRIC_VERT
SLVS_C_SYMMETRIC_LINE
SLVS_C_AT_MIDPOINT
SLVS_C_SAME_ORIENTATION
SLVS_C_ANGLE
SLVS_C_PARALLEL
SLVS_C_PERPENDICULAR
SLVS_C_ARC_LINE_TANGENT
SLVS_C_CUBIC_LINE_TANGENT
SLVS_C_PROJ_PT_DISTANCE
SLVS_C_WHERE_DRAGGED
SLVS_C_CURVE_CURVE_TANGENT
|
今天編譯完slvs_python.hpp,並推送至倉儲python-solvespace。
因為大部分都是強硬約束的關係,只測試過部分功能。
編譯流程
使用Netbeans編譯slvs_python.hpp和slvs.i,旁邊的constrainteq.cpp供參考函式。

slvs.i
class Constraint {
Constraint();
public:
...
static Constraint some_other_constraint(
System* system,
int type, Workplane workplane, double value,
Point ptA, Point ptB, Entity entityA, Entity entityB,
Slvs_hGroup group = USE_DEFAULT_GROUP);
標準的約束條件格式如上,其實所有的約束函式都是透過slvs_python.hpp輸入constrainteq.cpp的約束做計算。
slvs_python.hpp
class Constraint {
...
public:
static Constraint some_other_constraint(
System* system,
int type, Workplane workplane, double value,
Point ptA, Point ptB, Entity entityA, Entity entityB,
Slvs_hGroup group = USE_DEFAULT_GROUP) {
return init(system, Slvs_MakeConstraint(
0, group,
type,
workplane.handle(),
value,
ptA.handle(), ptB.handle(),
entityA.handle(), entityB.handle()));
}
...
但是由於約束SLVS_C_EQUAL_ANGLE會用到四個Entity,預設只有開啟2個,另外的EntityC、EntityD沒有開啟,而相切約束需要的布林值other和other2亦沒有加入。
所以只能從slvs.h添加這4個值。

其他項目也要加上4個空位,以免出錯。
對照constrainteq.cpp中需要的項目,在slvs_python.hpp中填上需要的值的類型,應該就可以運作了。
測試了一些新加入的約束,如果slvs_python.hpp中填上的類型正確,就會解題,不過「重複約束」的結果似乎是歸類在「過度約束」裡。

而如果本身類型填錯,就會回傳錯誤碼-1。

但是函式庫中只有SLVS_C_WHERE_DRAGGED會抓住點(而且還是有移動量),還要研究一下如何鎖住這些點的位置。
今天幫忙編寫CDemo,使其擁有Solvespace全部約束的功能。
會找時間翻修一下之前的紀錄。
Comments
comments powered by Disqus