..


2023/03/30




2023/03/29

	正しい位置(この exe の場合は,ウィンドウの中央)に移動できていない.
	

	回転する時,回転の中心(ベクトルデータの中心)に移動できていなかった.
	


	あとは,文字の回転(傾き).

	文字の傾きは,( X , 高さ/2 ) を中心として回転させる.




2023/03/28

	「縦書き」の動作が正しくない.
	

	::CreateFontIndirect の LOGFONT の値がうまくなかった.	次のものを指定して対応.
	{
		lf.lfOrientation = 0 ;
		lf.lfEscapement  = 0 ; 
		}
	

	::GetGlyphOutline を使用する時の動作としては,「@フォント」を指定して,求めたポリラインを -90 している.




2023/03/27

v_PLF GetTTOutline (...,const UINT chr,...) GetOutline (...,const UINT chr,...,P2A* ptA)
vv_PLF GetTTOutline (..., LPCTSTR str,...) GetOutline (..., LPCTSTR str,...,P2A* ptA)
DrawTTOutline(dc,point,tate,str,ch,cw,rx,ry,faceName,weight)
DrawTTOutline GetOutline で戻される curves は,PolyPolygon の nCount . GetOutline (...,str,&ptA) を直接,または間接的に呼び出している. 間接の場合は,「P2A の配列」が戻される. 2 重ループで,「POINT の配列」と「頂点数の配列」に変換する. 直接の場合は,P2A と「頂点数の配列」が戻される. それぞれを, 「POINT の配列」と「頂点数の配列」に変換している. コードを作成したタイミングが異なるためか,PolyPolygon に与えるデータの確保の方法が異なる. この関数は 2000/03 には存在していて,Parts などから利用していた. 単体テスト用プロジェクト FOutLSDI , FOutLine を利用してテスト予定. これらのプロジェクトは Parts などを使っていない. ここから呼出している ::GetOutline などは,TTOline.hxx では公開していない. 縦書き フォントは @ が付加されたものを TextH として登録. その時 RX は -90 している.

2023/03/24

	QSpline2Polyline(P2A* lpptPolygon, LPPOINTFX lppfSpline)

	GetT2Outline	(LPTTPOLYGONHEADER lpHeader, DWORD size,CUIntArray* count,P2A* pt)
			cInSpline = ::QSpline2Polyline(pt, spline);



	GetOutline		(CDC* dc,const UINT chr,GLYPHMETRICS* gm,CUIntArray* countA,P2A* ptA)

		if (dc->GetGlyphOutline(chr,GGO_NATIVE,gm,size,buf,&mat) == size) {
			curves = GetT2Outline((LPTTPOLYGONHEADER)buf, size,countA,ptA) ;
			}



	GetOutline		(CDC* dc,LPCTSTR str,const BOOL tate,CUIntArray* countA,P2A* ptA)

		curves1 = GetOutline(dc,chr,&gm,&countA1,&ptA1) ;



	GetOutline		(																				//
						CDC* dc,const P2& point,const BOOL tate,LPCTSTR str,LPCTSTR faceName,
						CUIntArray* countA,P2A* ptA,												//
						const int ch,const int cw=0,const double rx=0,const double ry=0,
						const int weight=FW_DONTCARE	)

			curves = ::GetOutline(dc,str,tate,countA,ptA) ;



	GetOutline		(CArray<P2A,P2A>* p2aA,
						CDC* dc,const P2& point,const BOOL tate,LPCTSTR str,LPCTSTR faceName,
						const int ch,const int cw=0,const double rx=0,const double ry=0,
						const int weight=FW_DONTCARE)

		int	curves = ::GetOutline(dc,point,tate,str,faceName,&countA,&ptA,ch,cw,rx,ry,weight) ;



	DrawTTOutline	(CDC* dc,const P2& point,const BOOL tate,const CString& str,
						const int ch,const int cw,const double rx,const double ry,
						const CString& faceName,const int weight)

		if (useP2A_Ary) {	curves = ::GetOutline(&p2aA,dc,point,tate,str,faceName,             ch,cw,rx,ry,weight) ;	}
		else			{	curves = ::GetOutline(      dc,point,tate,str,faceName,&countA,&ptA,ch,cw,rx,ry,weight) ;	}




	Parts::DrawTextH	,	Parts::DrawTextV	(CDC* pDC,const Scale& scale)

		DrawTTOutline(pDC,P2(point.x,point.y),FALSE,text.GetText(),ch,cw,rx,ry,text.GetFont(),FW_THIN) ;
		DrawTTOutline(pDC,P2(point.x,point.y),TRUE ,text.GetText(),ch,cw,rx,ry,faceName,      FW_THIN) ;





	PartsA	CTToPADlg::MakePA(
		const	P2& point,const BOOL tate,LPCTSTR str,LPCTSTR faceName,
		const	int	ch,const int cw,
		const	double r_x, const double ry,const int weight)

		if (m_UsePolyPolygon)
		{
			vv_PLF	vv_plf = ::GetTTOutline(dc.GetSafeHdc(),str,(tate==TRUE),faceName,ch,cw,rx,ry,weight) ;
			pa = vv_PLF_ToPartsA(vv_plf) ;
			}
		else
		{
			::GetOutline(&p2aAry,&dc,point,tate,str,faceName,ch,cw,rx,ry,weight) ;
			}

		P2A_Ary.Copy(p2aAry) ;




	BOOL CTToPADlg::MakePA()

			PartsA	paTmp = MakePA(point,tate,str,faceName,ch,cw,rx,ry,weight) ;




	void CTToPADlg::OnEditchangeFaceName() 

			PA = MakePA(P2(0),FALSE,str,faceName,ch,0,rx,0,0) ;




	void CTToPADlg::OnPaint() 

			if (m_UsePolyPolygon && P2A_Ary.GetSize()>0) {
				p2aAry.Copy(P2A_Ary) ;
				int		nCount = ::P2AA_ToPointAry(p2aAry,&points,&polyCounts) ;
					dc.PolyPolygon(points.GetData(),(int*)polyCounts.GetData(),nCount) ;
				}
			else {
				PA.Draw(&m_Image) ;
				}



	void CTToPADlg::OnConvertDXF() 

			PartsA		pa = PA ;
			vv_PLF		vv_plf   = ::PartsA_To_PLF(pa) ;
			PLF_c_cw	plf_c_cw = ::PLF_to_ccw_cw(vv_plf) ;

			PLF_face_l	plf_f_l = ::PLF_triangulation(v_plf) ;
			{	//	triangles
				pa += vv_PLF_ToPartsA(plf_f_l.Faces) ;
				}
			PartsA_C3D	pc3 ;	pc3 = pa ;
			CString		faceDXF		= ::GetChangeExt(NameTXI,_T(".face.dxf")) ;
			pc3.Export(faceDXF) ;



	FOutLine プロジェクトの OnPaint

		{
			UINT	previousBkMode = dc.SetBkMode(TRANSPARENT) ;
			{
				CPen	pen(PS_SOLID,2,RGB(255,255,0)) ;
				CPen*	oldPen = dc.SelectObject(&pen) ;
				DrawTTTextOut(&dc,point,m_Tate,m_String,ch,cw,rx,ry,m_FaceName,m_Weight*100) ;
				dc.SelectObject(oldPen) ;
				}
			{
				CPen	pen(PS_SOLID,2,RGB(255,0,255)) ;
				CPen*	oldPen = dc.SelectObject(&pen) ;
				DrawTTOutline(&dc,point,m_Tate,m_String,ch,cw,rx,ry,m_FaceName,m_Weight*100) ;
				dc.SelectObject(oldPen) ;
				}
			dc.SetBkMode(previousBkMode) ;
			}

		





2023/03/23

	意図しない座標のデータが存在するのは,オリジナルのデータか,TTPOLYCURVE の処理がうまくないのかはまだ調べていない.

	データを簡単に見ただけでは,どこが原因かわからない.穴の処理の問題か?
	
		穴を結合する順番がうまくないため,クロスしているものと思われる.




2023/03/22

	うまく処理できないデータ
	HG行書体 "線"
	 

	HG明朝E "線"
	 

	これらのデータでは,同じポリラインを結合しようとして消えてしまった.
	




2023/03/17

	::GetGlyphOutline を使用して,ポリゴン化したもの.穴にはまだ対応できていない.