我正在嘗試通過讀取檔案來生成各種gate symbols(AND、NOT、XNOR、MUX 等) 。但是我在從檔案中
讀取相關坐標時遇到了問題。.slibarc.slib
我不明白如何使用這些坐標并繪制弧線?
.slib 檔案中圓弧的格式令人困惑。
這是示例:

.slibarcan和 for的格式line
line (66 * SCALE, 80 * SCALE, 0 * SCALE, 80 * SCALE);
line (94 * SCALE, 70 * SCALE, 62 * SCALE, 70 * SCALE);
.
.
arc (145 * SCALE, 100 * SCALE, 94 * SCALE, 70 * SCALE,94.9268 * SCALE,126.774 * SCALE);
arc (94 * SCALE, 130 * SCALE, 145 * SCALE, 100 * SCALE,94.9268 * SCALE, 73.2256 * SCALE);
arc (61 * SCALE, 130 * SCALE, 61 * SCALE, 70 * SCALE,8.75 * SCALE, 100 * SCALE);
第一行說從 O (145,100) 到 F(94,70)
畫一條弧 第二行說從 L(94,130) 到 O(145,100)
畫一條弧 第三行說從 K(62,30) 到 E( 62,70)
我試圖通過使用線中的第一個 4 個坐標來繪制弧線(但不知道如何使用剩余的 2 個坐標?)
QPainterPath path; // arc from L ---> F
path.moveTo(94,70);
QRect bound1 (44,70,102,60);
path.arcTo(bound1,90,-180);
QPainterPath path1; // arc from K ---> E
path1.moveTo(62,70);
QRect bound2 (42,70,40,60);
path1.arcTo(bound2,90,-180);
我得到以下輸出:

但,
或門的輸入線未連接到第一個弧。
我只使用前四個坐標。如何使用剩余的 2 個坐標來繪制圓弧?
那么如何使用所有給定的坐標.slib來繪制一個arc?
注意: SCALE 在檔案開頭定義。
uj5u.com熱心網友回復:
看起來前兩個坐標對是假想圓上的兩個點,第三對是該圓的中心。它們一起描述了一個圓弧部分。為此arcTo,我們構建了一個QRectF圓的邊界,即具有給定的中心和邊2*radius。
因此,以下應該起作用:
QPointF from, to; // first and second coordinate pair
QPointF center; // third coordinate pair
// Bounding rectangle is a square around center.
QLineF lineFrom{center, from};
QLineF lineTo{center, to};
qreal radius = lineFrom.length();
QRectF bounding{ center - QPointF{radius, radius}, center QPointF{radius, radius}};
// Use QLineF to calculate angles wrt horizontal axis.
qreal startAngle = lineFrom.angle();
qreal sweep = lineFrom.angleTo(lineTo);
QPainterPath path;
path.moveTo(from);
path.arcTo(bounding, startAngle, sweep);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491171.html
標籤:C qt qt5 qt4 qgraphicsview
