كيف يمكنني "أفضل ملاءمة" مسار القاهرة التعسفية (Pycairo)؟

StackOverflow https://stackoverflow.com/questions/2292292

  •  21-09-2019
  •  | 
  •  

سؤال

يبدو أن المعلومات في stroke_extents() و ال translate(x, y) و scale(x, y) الوظائف ، يجب أن أكون قادرًا على اتخاذ أي مسار القاهرة التعسفية (أنا أستخدم Pycairo) و "أفضل ملاءمة". وبعبارة أخرى ، قم بتوسيعها وتوسيعها لملء المساحة المتاحة.

قبل رسم المسار ، قمت بتوسيع نطاق القماش بحيث يكون الأصل هو الزاوية السفلية اليسرى ، أعلى y+، اليمين هو x+، والارتفاع والعرض كلاهما 1. بالنظر إلى هذه الشروط ، هذه الرمز يبدو لتوسيع نطاق المسار بشكل صحيح:

# cr is the canvas
extents = cr.stroke_extents()
x_size = abs(extents[0]) + abs(extents[2])
y_size = abs(extents[1]) + abs(extents[3])
cr.scale(1.0 / x_size, 1.0 / y_size)

لا أستطيع لحياة لي معرفة الترجمة رغم ذلك. هل هناك نهج أبسط؟ كيف يمكنني "تناسب" مسار القاهرة على قماشها؟

يرجى طرح التوضيح إذا كان أي شيء غير واضح في هذا السؤال.

هل كانت مفيدة؟

المحلول

لقد وجدت حلاً أحبه (على الأقل لأغراضي). فقط قم بإنشاء سطح جديد ورسم السطح القديم على السطح الجديد.

نصائح أخرى

أما بالنسبة للمقياس فقط ، فقد فعلت شيئًا مشابهًا لضبط صورة داخل مربع مع نهج "أفضل ملاءمة". كما هو الحال في المقياس ، إليك الرمز:

available_width = 800
available_height = 600
path_width = 500    
figure_height = 700     

# formulas
width_ratio = float(available_width)/path_width
height_ratio = float(available_height)/figure_height
scale = min(height_ratio, width_ratio)

# result
new_path_width = path_width*scale
new_figure_height = figure_height*scale

print new_path_width, new_figure_height

يتم رسم الصورة محاذاة مع الأصل (أعلى اليسار في حالتي) ، لذلك ربما ينبغي القيام شيء مشابه لترجمة المسار.

أيضا ، هذا أفضل ملاءمة تهدف إلى الحفاظ على نسبة العرض إلى الارتفاع. إذا كنت تريد تمديد الشكل ، فاستخدم كل من النسب بدلاً من متغير "المقياس".

آمل أن أكون قد ساعدت

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top