2014-09-22 33 views
0

我正在使用C中的X11庫中的XDrawPoint(d, w, DefaultGC(d, s), x, y) ;在屏幕上繪製一個點。 xy是要繪製點的x和y座標。如何使用XDrawPoint設置起始位置

問題是,如果我想繪製XDrawPoint(d, w, DefaultGC(d, s), -x, y) ;該點不顯示在屏幕上。我認爲這是因爲初始位置設置爲0,0,這使得點消失。

是否可以在屏幕中間設置起始位置,因此當繪製負x和y座標時,點仍顯示出來?

感謝

+0

分在任何計算您的點的座標,你想要的系統,然後變換座標,只需奇大小將截斷中然後將它們發送到'XDraw ...'函數。 – 2014-09-23 23:12:04

回答

0

據我所知,沒有辦法打電話XDrawPoint()時從左上角更改原點。

儘管XDrawPoints()允許您指定CoordModePrevious的模式來指定相對於前一個的座標,但我假設您不希望在每個點之前的窗口中心繪製一個點。

一種可能的方式來實現繪製中樞將自己進行計算,並添加您的積分爲使用一個簡單的結構偏移

typedef struct { 
    int x; 
    int y; 
} ORIGIN; 

ORIGIN origin; 

,然後將其設置爲中間窗口w:使用

Window  urw;    // unused root window 
unsigned int ux, uy, ub, ud; // unused width, height, border, depth 
unsigned int w, h; 

XGetGeometry(d, w, &urw, &ux, &uy, &w, &h, &ub, &ud); 

origin.x = w/2; 
origin.y = h/2; 

最後,作爲一個爲你的繪圖偏移:

XDrawPoint(d, w, DefaultGC(d, s), origin.x+x, origin.y+y); 

當然,你將不得不重新計算你的出身,如果窗口將被調整大小和當2

+0

如果我的屏幕尺寸是300×300,那麼你的解決方案將150和x加到y座標上?事情是,我試圖在每個八分區中繪製一條線,並交換x1,x2,y1,y2,因爲該線不反映線,它將其繪製在其他地方。 – 2014-09-23 16:01:35

+0

我想我誤解了這個問題。我的印象是你想要的座標範圍從0變到300到-150到+150。 – polarysekt 2014-09-24 00:16:13