العمل الذي أرغب في لفت انتباهك إليه هو محاولة لكتابة نظام نمذجة 3D ثلاثية الأبعاد مرة أخرى. اكتب كما أود أن أراها.
وصفة لنظام ZenCad بسيطة جدا. مفهوم النمذجة ثلاثية الأبعاد لبرنامج OpenScad ، النواة الهندسية لـ OpenCascade ، python3 مثل الغراء ، مكتبة evalcache للحساب البطيئة للتخزين المؤقت العدواني للحسابات. أضف التوابل من عدة أدوات أخرى ، غي الموسم مع صلصة PyQt ، وقدم ، واثارة ، ولكن لا تهتز.

نظم CAD النصي
CAD ، أو حسب CAD لدينا ، هو نظام تصميم بمساعدة الكمبيوتر. على عكس برامج المحاكاة ثلاثية الأبعاد التفاعلية ، تفسر أنظمة CAD النصية كلمة "آلية" بالمعنى الذي يفهمه منشئوه عادة. هذا ، ليس كمجموعة من أدوات الحوسبة ، ولكن كخوارزمية واضحة جدًا تتطلب التدخل البشري فقط وقت إنشائها.
من خلال العمل باستخدام CAD ، فإننا لا نرسم النموذج مباشرة على الشاشة ، ولكننا نبني البرنامج الذي تم بناء عليه. بالنسبة للأشخاص المطلعين فقط على CAD التفاعلي ، يمكن وصف هذا النهج بأنه نموذج حدودي مطلق. بالمعنى الدقيق للكلمة ، غالبًا ما يتم استخدام البرامج النصية لاستكمال بيئة تفاعلية ، لكتابة أدوات إضافية ، ولكن العمل في CAD نظيفة ذات نموذج نصي يتطلب تنظيمًا مختلفًا لسير العمل ، وطريقة تفكير ، وقد صمم لمجموعة مختلفة من المهام.
CAD الأكثر شهرة ونقية في الوقت الراهن هو OpenScad.
في البداية كان OpenScad
هناك دائرة معينة من الأشخاص الذين يفضلون Compass و SolidWorks و FreeCad و OpenScad الدنيوي والمتواضع. من الصعب إلى حد ما الإجابة على سؤال ما سر نجاحها ، ولكن يمكن القول على وجه اليقين أنها خفيفة الوزن ومرنة بما يكفي للاستخدام ، ولديها الحد الأدنى من الإعدادات. أجزاء من النماذج المكتوبة عليه من السهل إعادة استخدامها.
ومع ذلك ، openscad لديه بعض العيوب المزعجة:
- openscad يعمل فقط مع شبكات الشبكات.
- openscad لديه حد قابلية منخفضة إلى حد ما ، فإنه يبدأ في التأخير بقوة على النماذج الكبيرة.
- openscad صعب للغاية للتكامل مع الأنظمة الأخرى ، والسبب في ذلك هو استخدام لغتها الخاصة.
لسوء الحظ ، على الرغم من قوة نهج البرمجة النصية ، فإن تجاوز نطاق النمذجة الوامضة لكتابة نماذج بسيطة باستخدام OpenScad يمثل مشكلة كبيرة.
اللغة والجميع
أول شيء أريد إصلاحه هنا هو استخدام لغة للأغراض العامة كأداة قتالية. يتيح لك استخدام لغة الأغراض العامة استخدام اكتمال إمكانياتها النحوية ومجموع المكتبات المكتوبة مسبقًا لحل مشاكل النمذجة ثلاثية الأبعاد.
مقارنة بين ZenCad و OpenScad GUIsواجهة ZenCad:

واجهة OpenScad:

يؤدي استخدام python إلى تبسيط رمز opencad عن طريق جعل رمز النموذج أكثر شفافية مقارنةً بـ OpenScad.
من المريح جدًا ، على سبيل المثال ، تصفية سحابة النقطة باستخدام بناء جملة المولدات.
مثال: تصفية مجموعة من النقاط. بفضل python ، التي تحتل لقب ملك الغراء بشكل غير رسمي في النظام البيئي للبرمجيات الحديثة ، تتكامل zencad بسهولة مع المكتبات وأنظمة البرامج الأخرى. يمكننا استخدام sympy في برنامج نصي واحد لإنشاء سطح تحليلي ، numpy لمعالجة سحابة نقطة تم إنشاؤها على هذا السطح ، وبطبيعة الحال ، zencad للبناء والتصور والمعالجة اللاحقة.
مثال: بناء بسيط لكل نقطة على حدة from zencad import * import numpy xcoords = numpy.linspace(-10,10,50) ycoords = numpy.linspace(-10,15,50) lines = [ interpolate([point(x, y, 0.01*(x**2 + y**3)) for x in xcoords]) for y in ycoords ] wires = [] for l in lines: trans = translate(0,0,-30) sf = l.endpoints() w=sew([l, segment(sf[0], trans(sf[0])), trans(l), segment(sf[1], trans(sf[1]))]) wires.append(w) for l in lines: disp(l.left(30)) disp(loft(wires) - halfspace().down(10)) show()

الأساس المتين لـ OpenCascade
إن رياضيات الشبكات متعددة الأضلاع أبسط بكثير من رياضيات تمثيل الحدود ، لكن تمثيل الحدود عملي أكثر بكثير. على وجه الخصوص ، تعاني شبكات المضلعات من مشكلة انفجار اندماجي ، والتي تظهر بشكل خاص عندما يحين الوقت لتقديم نموذج. في OpenScad ، غالبًا ما يكون من الضروري تطوير منتج بدرجة دقة أقل بكثير من دقة النموذج الحقيقي ، الذي ينتهك نقاوة النموذج.
وبالتالي ، فإن النقطة الثانية للتنفيذ هي استخدام نواة هندسية كاملة تستخدم تمثيل الحدود بدلاً من نموذج الشبكة. لا يعتمد ZenCad ، المبني حول النواة الهندسية للقراصنة في OpenCascade ، بالطبع ، على توفير إمكاناته الكاملة في بيئة الثعبان. محاولة نقل OpenCascade بشكل كامل ستؤدي إلى كتابة pythonOCC ثانية. يأخذ ZenCad الجزء العلوي ، في محاولة للحفاظ على التوازن بين الوظيفة وبيئة العمل.
مثال: زجاجة برمجيات OpenCascade لعبت في ZenCad استمرارية التقاليد. الأصل كمصدر لكل شيء
حلول بناء جملة zencad ، باتباع مثال شقيقه الأكبر ومعلم OpenScad ، تقلل من عدد الكيانات في المكتبة. مثل OpenScad ، ZenCad غير قادر بشكل أساسي على إنشاء بدائية عند النقطة (س ، ص ، ض) ، على الرغم من أن OpenCascade يسمح بذلك. تقوم ZenCad أولاً بإنشاء بدائية في الأصل ، ثم تقوم بتعيين الموضع الذي تحتاجه باستخدام التحويلات. التحولات في ZenCad موجودة ككائنات منفصلة وكطرق للهيئات.
مجموعة من التحويلات قياسية وتتضمن الترجمة ، الدوران ، الانعكاس ، والتكبير / التصغير.
الكسل
لتقليل وقت الحساب ، يتم تحسين الرياضيات في ZenCad ، ويتم تخزين جميع الحسابات مؤقتًا بشكل كبير. تهتم مكتبة delal blockchain [/ del] evalcache ، التي تحدثت عنها على صفحات Habrahabr منذ بعض الوقت ، بإدارة خوارزميات التخفيف: التخزين المؤقت على القرص لأشجار الحوسبة البطيئة . يحفظ Zencad نتائج الحساب في ذاكرة تخزين مؤقت مشتركة ، يمكن مراقبة حالتها من خلال واجهة متخيل. تعمل خوارزمية تجزئة sha512 المستخدمة مع التكرار الملحوظ على إلغاء إمكانية تصادم مفاتيح التجزئة للكائنات البطيئة (تبلغ مساحة التجزئة 10 ^ 74 ضعف عدد الذرات في الكون).
عند إنشاء هذا النموذج ، فإنه يولد أربعة ميغابايت من الهندسة وخلال أول مرور يمكن حسابه لفترة طويلة إلى حد ما:

العمل مع الأسطح الملولبة مكلف حسابيًا:

مشكلة طوبولوجيا الانعكاس. طريقة النقطة القريبة
OpenScad لا يوجد لديه عمليات الشطب أو التقريب. OpenCascade يوفر لهم. هذه عمليات مهمة للغاية ، وسيكون من العار عدم أخذها في الخدمة لصالح ZenCad. هناك عمليات أخرى تتطلب تحديد كائن طوبولوجي ، على سبيل المثال ، عملية أخذ نموذج رقيق الجدران في مثال زجاجة OpenCascade. في نظام CAD الرسومي ، نشير إلى كائن طوبولوجي (الحافة ، الوجه ، الرأس) مع الماوس. عند كتابة السيناريو ، ليس لدينا مثل هذه الفرصة. Native OpenCascade يحل مشكلة الانعكاس ويستخدمها للعمل مع CAD الرسم. على الرغم من أن ZenCad يدعم انعكاس النموذج ، إلا أن استخدامه كأداة أساسية له عدد من العيوب المهمة. أولاً ، يزداد مستوى المعرفة المطلوبة لاستخدام هذه الأدوات بشكل حاد ، لأنه يجب على الأقل فهم مفهوم الطوبولوجيا الداخلي. ثانياً ، بمجرد ظهور ذلك في البرنامج النصي ، فإن انسجام الخوارزميات البطيئة ينهار فورًا ، كما أن رمز النموذج معقد للغاية. في عملية الانعكاس والتجديد المطول ، استقرت على طريقة النقطة القريبة. باختصار ، عند إجراء عمليات تعتمد على الطوبولوجيا ، يتجاوز البرنامج الكائن ويجد الكائن الطوبولوجي الأقرب إلى النقطة المحددة من بين من يدخلون الجسم. يعتبر هذا العنصر محددًا. مثل هذا الحل هو أكثر تكلفة من الناحية الحسابية ، ولكن بسبب التخزين المؤقت ، فإنه يعمل بشكل جيد. يستخدم هذا النهج لجميع العمليات التي تعتمد على عناصر الهيكل.
كما ذكر أعلاه ، يتم الحفاظ على إمكانية انعكاس النموذج ، بالمعنى العام ، كما هو مبين في المثال أعلاه (مثال: تصفية مجموعة من النقاط).
علامة Q و Marker W
يمكن أن يكون من الصعب قراءة أبعاد النموذج من الشاشة بسبب عدم وضوح المقياس. في جزء منه ، يمكن للعلامات حل هذه المشكلة. إن وجود علامات بينية سهلة الاستخدام (غير أكثر سهولة في أي مكان) ، تشير العلامات إلى الإحداثيات وتظهر المسافة ، مما يبسط تحليل الهندسة واختيار نقاط لعمليات مثل الشطب / التقريب.

تتبع مصدر التحديثات
مثل الأخ الأكبر (OpenScad) ، فإن ZenCad قادر على تحديث النموذج الذي تم إنشاؤه عند تعديل الملف المصدر. بالاقتران مع نظام التخزين المؤقت ، يتيح لك ذلك تعديل البرنامج النصي بشكل ملائم تمامًا ، بحيث يكون أمام عينيك في الوقت الفعلي تقريبًا الحالة المتغيرة للمنتج.
الرسوم المتحركة
مزايا zencad لا تنتهي عند هذا الحد.
بإمكان ZenCad (بفضل opencascade سريع النواة) إعادة رسم المشهد في الوقت الفعلي ، مما يتيح لك تحريك نموذج ثلاثي الأبعاد. يتم تنفيذ الرسوم المتحركة بواسطة وظيفة بيثون عادية وتسمح لك بمعاملة نفسك بحرية تامة. نظرًا لأننا في بيئة بيثون ، فإن zencad قادر على تصور البيانات من مصادر خارجية كحركات طراز (على سبيل المثال ، باستخدام multithreading + tcpsocket). وبالتالي ، يمكن استخدام الزنكاد ، على سبيل المثال ، للاختبار شبه الطبيعي للمنتجات الآلية. يا مرحبا أكشاك! مرحبا روس! من الجميل أن أراك في الجمهور أيضًا. مكتبة للمهارات الحركية ، والتي من شأنها أن تبسط إلى حد كبير بناء سلاسل الحركية من المتلاعبين الروبوتية ، بالمناسبة ، قيد التطوير.
لا تزال الرسوم المتحركة في الوقت الحالي في إصدار شبه تجريبي (خاصة فيما يتعلق بالتحكم في الكاميرا) لذلك لن أتناولها بالتفصيل.
تصدير - استيراد
حاليًا ، يتم دعم التصدير والاستيراد بتنسيق brep ، والذي يسمح بالتكامل مع freecad والتصدير بتنسيق stl ، مما يسمح بإنشاء نماذج للطباعة ثلاثية الأبعاد. ويدعم أيضا لقطة للشاشة. بما في ذلك التلقائي. على وجه الخصوص ، يتم إنشاء لقطات الشاشة في الدليل الإلكتروني تلقائيًا بواسطة ZenCad.
الوضع الحالي
في الوقت الحالي ، لا يزال ZenCad بعيدًا عن الاكتمال ، ومع ذلك فهو يعمل بشكل كامل في الجزء الذي يكون فيه جاهزًا.
تتوفر المكتبة في pipy لمحاور دبيان المتوافقة مع إصدارات python3.5 و python3.6 و python3.7
(قد تحتاج إلى تثبيت qt5 افتراضيًا ، نظرًا لبعض مشاكل المكونات الإضافية في PyQt5)
python3 -m pip install zencad apt install qt5-default
تشغيل واجهة المستخدم الرسومية من سطر الأوامر:
python3 -m zencad
تشغيل واجهة المستخدم الرسومية من برنامج بيثون:
لسوء الحظ ، فإن تقدم النظام لا يتم بالسرعة التي نرغب فيها. لم يتم تنفيذ معظم أجزاء هندسة الأبعاد ثنائية الأبعاد و api للعمل مع الأسطح بعد ، ودعم تصدير واستيراد التنسيقات القياسية ، ومعالجة الأخطاء ليست شفافة دائمًا ، ولم يتم إجراء الاختبارات التلقائية ، وتم تصميم مكتبات لإنشاء الوصلات الملولبة ومنتجات التروس ولم يتم تنفيذها بعد. كمحرر خارجي ، وهو أمر غير طبيعي تماما ، هو المتشددين فجأة! Sublime Text ... أريد أيضًا تحسين النظام بحيث يمكن تشغيله في نظام Windows (وهذا يتطلب الكثير من العمل الاستخباراتي الخبير).
ومع ذلك ، يتيح لك zencad الآن تصميم نماذج ثلاثية الأبعاد معقدة للغاية ، وإنشاء نماذج للطباعة ثلاثية الأبعاد ، وحتى تصور حركيات الآليات.
روابط المشروع
github: https://github.com/mirmik/zencad ، https://github.com/mirmik/servoce
pypi: https://pypi.org/project/zencad/ ، https://pypi.org/project/pyservoce/
دليل
شكرا لاهتمامكم
