Win 10 10586 3D Builder
3MF 形式ではいたデータが,10586 にしてから開けないでいた.エラー : 0x80004005
model タグに,xmlns 属性が必要になった?
<model unit= "millimeter " xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02 " >
ply だと,
3MF でのテクスチャは未だ.
2016/05/02 テクスチャなどの大文字,小文字も区別される?また,path も / から正しく指定する必要がある.
テクスチャの場合,colorid の指定が object の属性では効果がなくなった?
triangle 内での指定が必要?
::SaveUTF8
xml などを保存する時, ::SaveUTF8(outName, outStr) ; の様にしていた.
動作としてはそれ程問題なかったように思うが,32 ビット exe で対象のデータが 50 MB 位を超えるとメモリ不足に…
例えば 100 MB の xml データの場合,
もとのデータの Xml_E で 200 M,tstring の outStr でも 200 M.
保存する前に,UNICODE から,UTF8 に変換するために 100 M.
200 M の連続領域が確保できないことが多いみたい.
::SaveUTF8 で,v_tstring (文字列の配列)形式のものを作成.
bool SaveUTF8 (LPCTSTR pathName,const v_tstring& strAry)
{
FILE* ofp = ::Open_File(pathName,_T(“wb”)) ;
for (size_t index=0 ; index<strAry.size() ; index++) {
tstring str = strAry[index] + _T(“\r\n”) ;
std::string u8Str = ::To_UTF8(str.c_str()) ;
v_char v_chr = ::To_v_char(u8Str) ;
::fwrite(&v_chr[0],sizeof(char),v_chr.size(),ofp) ;
}
::fclose(ofp) ;
return true ;
}
UNICODE から UTF8 への変換時間などはそれほど気にならない.100 MB のファイル 800,000 行で 10 秒程度.
幾つかの形式で保存した時のファイルサイズ
OBJ | AMF | DAE | X3D | PLY | AC | |
---|---|---|---|---|---|---|
サイズ MB | 111 | 368 | 85 | 29 | 191 | 57 |
比率 | 1.00 | 3.31 | 0.76 | 0.26 | 1.71 | 0.51 |
VC 6 Release inline
次の様な呼出しで,Release ビルドでうまく動作しないことがあった.
…\PntFnc\TCrossL\TCrossLD.cpp 2 円の交点のエラー時の動作
Vd2 cp1 = ::get_point_on_line (l1c,l2c,l1r) ;
デバッグ版では意図した動作となる.
inline Vd2 get_point_on_line ( const Vd2& ls, const Vd2& le, const double d )
{
if (ls == le) { return ls ; }
Vd2 unit = (le-ls).Normalized() ;
Vd2 pos = ls + unit * d ;
return pos ;
}
ls と le を比較している部分で抜けてしまっている?
VC 7 では OK.
よくわからないので,間接的に呼出す様に変更.
inline Vd2 get_point_on_line(const Vd2& ls,const Vd2& le,const double d) { return get_point_on_line_(ls,le,d); }