Welcome! Log In Create A New Profile

Advanced

blender + reprap

Posted by ilalexey 
blender + reprap
March 14, 2011 09:19AM
Всем привет!
Давно уже не даёт покоя мысль соеденить эти два чуда. Поскольку программер из меня никакой(максимум над гуи подумать могу), пишу в надежде найти тут единомышленников.
Идея такова: использовать Blender как моделлер и затем из него же отправлять на печать/фрезеровку и тд.

Вдруг кому ещё эта тема интересна или есть какие соображения - велком сюда!
Re: blender + reprap
March 14, 2011 11:19AM
Re: blender + reprap
March 14, 2011 01:59PM
Идея конечно интересная, но после Art Of Illusion понять логику работы с Blender не могу, как-то все кажется сделано очень неудобно в нем. А из AOI все прекрасно сохраняется в STL и далее загружается в RepRap Host. Более того, некоторые кривые файлы STL, которые RepRap Host открывает некорректно, открываю в AOI и затем пересохраняю, после этого они открываются уже корректно.

Может конечно, я толком в Blender не разобрался, но по-моему стандартный режим просмотра AOI (три проекции + вид с любого направления) мне для трехмерного моделирования кажется гораздо более удобным, чем то, что дает Blender. Да и логика работы AOI понятна даже без изучения документации. Еще бы авторы исправили некоторые ошибки, приводящие к зависанию при многоуровневом выполнении булевых операций над объектами, и вообще был бы идеальный инструмент.
Re: blender + reprap
March 14, 2011 02:11PM
Art Of Illusion - это ваше предпочтение, моё - blender.
Мне вот вообще связка SolidWorks+CIMCO+replicatorg ближе, но я фанат блендера. Путей много и, в общем-то, можно обойтись тем, что уже есть. Топик о другом..
Re: blender + reprap
March 14, 2011 02:29PM
Может тогда поделитесь впечатлениями о Blender - насколько корректно он работает с трехмерными моделями, создаваемыми с помощью булевых операций: объединение, пересечение, вычитание. Насколько он корректно строит модели в сложных ситуациях (например, вычитание из одного цилиндра с разным радиусом оснований второго тоже с разным радиусом оснований, расположенных на одной оси. или вычитание из одного параллелипипеда другого при условии наличия двух общих поверхностей).

По теме - Blender неплохо состыковывается с Python, почему бы просто не вызывать из него конвертер в GCode и далее посылать GCode из Blender в консоль RepRap Host. Учитывая специфику работы хостовой программы (в реальном времени) мне кажется этот вариант предпочтительнее, сам Blender не будет загружен после вывода в консоль и может использоваться для дальнейшей разработки моделей. Думаю это реализовать несложно, мог бы разобраться с этим вопросом, но для начала хочу понять Blender, стоит ли он того, дает ли он какие-либо серьезные преимущества в работе.
Re: blender + reprap
March 14, 2011 02:46PM
сколько общаюсь с 3д прогами (с 98года), ещё не встречал булеаны на все 100 удовлетворяющие(прог много перепробовал). даже тот же солид даёт маху порой. RepRap Host(джава который) не хочу использовать, тк это отдельная тема, которая будет только мешать всей задумке.
Сам по себе блендер крут, главное понять все приемущества. Его родство с питоном очень на руку.
Думаю былобы не плохо в реал тайм показывать движение инструмента - аля блендер_емк2

Edited 1 time(s). Last edit at 03/14/2011 02:51PM by ilalexey.
Re: blender + reprap
March 15, 2011 04:05PM
Пока ждал электронику как раз проходил учебные уроки по блендеру(подшипник рисовал smiling smiley ). Осталось двойственное впечатление: с одной стороны инструмент мощный, а с другой -- этот инструмент скорее для мультипликации чем для конструкторского моделирования. Вот до AOI пока руки не дошли, но обязательно попробую.

Edited 2 time(s). Last edit at 03/15/2011 04:07PM by Sergey.
Re: blender + reprap
March 15, 2011 05:44PM
blender - это уже классика мультиплатформенного 3д. Не кад система, конечно, но многие народы склоняются в его сторону.
Много скриптов написано в пользу технарей. Постоянное развитие. Поддерживает много форматов. В принципе, моделить можно и в солиде/акаде.
Вместо AOI резонней FreeCAD пользовать конструкторам. Ещё не разбирался с FreeCAD, но тоже вроде с питоном дружит. Может даже его лучше взять за базу, чем blender(хоть и весит на порядок больше).
Re: blender + reprap
March 18, 2011 01:51AM
Посмотрел обучающий курс по AutoCAD Inventor.
Изготовление детали из пластика

После него и Blender, и AOI отдыхают, да и FreeCAD думаю тоже. Эх, найти бы ещё аналогичный бесплатный продукт...
Re: blender + reprap
March 27, 2011 09:00AM
Может повторюсь, но топик не о том, какой софт использовать, а о связке блендер+сангвино
Re: blender + reprap
February 20, 2013 04:48AM
Здравствуйте, друзья!

Хотел высказать свое мнение о блендере.

Отступление: Очень надеюсь на то что, ilalexey не потерял интерес к данной теме и возможно в скором будущем будет возможно генерировать gcode прямо в самом блендере.

Блендер - великолепный и гибкий инструмент (ключевое слово). С помощью него можно создать не только отличного качества технические модели, но так же великолепные аморфные объекты и конструкции, так же можно заняться просто скульптингом (а тут булевые операции неотъемлемая часть).
Техническое моделирование: В блендере, 1.00 = 1 мм (лично мне так удобно, но можно выставить не числовые координаты, а метрические, например). И могу сказать, что недостаток средств, в данном виде моделирования, в блендере нет.
На счет булевых операций: Благодаря н-гонам, при булевой операции сетка выстраивается очень логично, а если есть какие либо подозрения, то сочетания клавиш shift+ctrl+alt+M покажут вам косяки.
Скульптинг: В последних релизах была введена в строй динамическая топология, что просто великолепно для наших целей, а если необходимо снять топологию, то есть куча аддонов, облегчающие это занятие.
Экспорт моделей: Не могу понять почему, но никогда не сталкивался с косяками экспорта. Главное перед экспортом - в режиме редактирования найти возможные косяки (комбинацию клавиш, выше), удалить ненужные вертексы (W -> Remove Doubles), и в конце нажать Ctrl+N (повернуть нормали).
Интерфейс: Ну, ребята, куда уж гибче и проще? Хоть 1000 видов, с разных сторон создай! Это же так просто!
Вывод: Стоит добавить, что любой аддон (плагин) можно написать на python, но я в этом не силен. Мощнейший инструмент репрапера, из свободных!

Послесловие: это только лишь мое мнение и никого (если такое возможно) не хотел задеть!

Напоследок фото того что я моделировал:
Re: blender + reprap
February 20, 2013 05:14AM
И вам добрый день!
Интерес не пропал. Руки не доходят - хватаюсь за кучу проектов. На фото нынешний проект(вариация GRBL).
Начал было разбираться с интерфейсом, но.. в блендере много изменилось по сравнению со старыми версиями (года 2006) и с наскоку, понятно, ничего не вышло. Надеюсь, когданибудь продолжу.
пс: моделька у вас очень классная! Дети начали болеть темой таких кукол. Настаивают на скорейшем завершении станка чпу, чтобы делать такие вещи. Даже начали 3D интересоваться - станку ведь надо информацию откудато черпатьsmiling smiley


Re: blender + reprap
May 12, 2013 03:49PM
В общем после долгих экспериментов перешел к такой схеме работы: создаю модель в Autodesk 123, экспортирую в STL, затем открываю её в Blender, снова экспортирую её в STL (Autodesk сохраняет STL в сжатом формате, который не понимает RepRap Host, поэтому приходится пересохранять в Blender) и печатаю из RepRap Host.

Пока ещё косяки описанные в топике jaiq и которые необходимо исправлять в режиме редактирования Blender ни разу не встретились, что говорит о корректной обработке 3D логики в Autodesk 123. Что не скажешь о моделях, созданных другими программами.

Blender мощный инструмент, но все-таки больше для аморфных моделей и скульптинга, но не для технического моделирования. Но это конечно моё мнение.

Кстати вопрос по теме статьи - а как можно автоматизировать процесс, описанный в первом предложении? Autodesk 123 - Blender - RepRap Host?
Re: blender + reprap
May 13, 2013 02:59PM
После очередных таких экспериментов и задумался о создании и отправке "еды" на чпу из блендера.
Хостом так и не повезло воспользоваться - только репликатор_ж
По поводу создания. Мой бедный комп уже трещит по швам от груды 3д софта(менталитет софтохалявника позволяетsmiling smiley
под разные задачи свой софт. чего нет в одной проге, есть в другой. И без Deep_Exploration туго былобы.
..но зачем весь винигрет, когда есть блендерsmiling smiley
Re: blender + reprap
May 28, 2013 02:24PM
Привет всем.
..не прошло и три года..
Начал потихоньку шевеиться. Пока спал, появилось несколько чудных вещей(на которых учусь и куски чего пользую):
Blender CAM
Cura
shapeoko
eibriel
Ultimaker & More
#####
скрипт пока ничего не делает, кроме коннекта. Насколько корректно - хз. дуина моргает, блендер в консоль пишет то, что прописали

# ##### BEGIN GPL LICENSE BLOCK #####
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License
#  as published by the Free Software Foundation; either version 2
#  of the License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software Foundation,
#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####

bl_info = {
    'name': 'GRBL',
    'author': 'Russia_RepRap_User_Group [forums.reprap.org]',
	"version": (0, 0, 1),
	"blender": (2, 6, 7),
	"location": "Properties > render",
	"description": "GRBL g-code sender",
	"warning": "there is no warranty .. by now",
	"wiki_url": "http://forums.reprap.org/read.php?54,76841",
	"tracker_url": "",
	"category": "Scene"}

if "bpy" in locals():
    import imp
    imp.reload(serial)
else:
    from . import serial
    
import bpy
#import math
#import time
#import sys 
from bpy.props import *

ser = serial.Serial()

# Definitions
bpy.types.Scene.serial_lmc = StringProperty(
	name="Serial Port",
	description="Serial port connection",
	default="/dev/ttyACM0",
	maxlen=20)
bpy.types.Scene.connected = BoolProperty(
	name="Connected",
	description="Connected to Serial",
	options = {'SKIP_SAVE'},
	default=False)

bpy.types.Scene.s_baud = EnumProperty(
	items = [('9600', '9600', '9600'), 
			('19200', '19200', '19200'),
			('38400', '38400', '38400'),
			('57600', '57600', '57600'),
			('115200', '115200', '115200')],
	name = "Baudrate")

bpy.types.Scene.XY_go = FloatProperty(
    name = "XY", default = 5, 
    min = 0, max = 10)
bpy.types.Scene.Z_go = FloatProperty(
    name = "Z", default = 5, 
    min = 0, max = 10)

bpy.types.Scene.sendtoser = StringProperty(
	name="Send To Port",
	description="Send string to port",
	default="",
	maxlen=20)

#   GUI
class OBJECT_OT_grblPanel(bpy.types.Panel):
	bl_label = "grbl g-code sender"
	bl_idname = "grbl"
	bl_space_type = "PROPERTIES"
	bl_region_type = "WINDOW"
	bl_context = "render"
	
	def draw(self, context): 
		layout = self.layout
		col = layout.column()
		#col.label(text="g-code sender")
		col.prop(context.scene, "serial_lmc")
		layout.prop(context.scene, "s_baud")
		row = layout.row()
		row.operator("connect.grbl")
		row.operator("disconnect.grbl")
		supercolumn = col.column()
		if (not bpy.context.scene.connected):
		  supercolumn.enabled=False
		layout.label("JOG")
		row = layout.row()
		row.prop(context.scene, "sendtoser")
		row.operator("my.button", text="Send").number=13
		row = layout.row()
		row.prop(context.scene, "XY_go")
		row.prop(context.scene, "Z_go")
		#row = layout.row()  
		#box = row.box()
		#box.label("JOG")
		#box.operator("my.button", text="1").number=1
		#box.operator("my.button", text="2").number=2
		#box.operator("my.button", text="3").number=3

		row = layout.row()
		split = row.split()
		col = split.column()
		col.operator("my.button", text="1").number=1
		col.operator("my.button", text="X-").number=2
		col.operator("my.button", text="3").number=3
		#split = split.split(percentage=0.18)
		col = split.column()
		col.operator("my.button", text="+Y").number=4
		col.operator("my.button", text="home").number=5
		col.operator("my.button", text="-Y").number=6
		#split = split.split(percentage=0.24)
		col = split.column()
		col.operator("my.button", text="7").number=7
		col.operator("my.button", text="+X").number=8
		col.operator("my.button", text="9").number=9
		#split = split.split(percentage=0.28)
		col = split.column()
		col.operator("my.button", text="+Z").number=10
		col.operator("my.button", text="0Z").number=11
		col.operator("my.button", text="-Z").number=12

class OBJECT_OT_connectgrbl(bpy.types.Operator):
	# connect serial
	bl_idname = "connect.grbl" #name used to refer to this operator
	bl_label = "Connect" #operator's label
	bl_description = "Connect with the rig via Serial" #tooltip
    
	def invoke(self, context, event):
		import bpy
		if (ser.isOpen()):
			self.report({'INFO'}, "Connection alrady open, nothing to do")
			return {"FINISHED"}
		#ser.baudrate = 115200
		ser.baudrate = bpy.context.scene.s_baud
		ser.port = 0
		ser.portstr = bpy.context.scene.serial_lmc
		ser.timeout = 0
		ser.writeTimeout = 1
		try:
			ser.open()
		except:
			pass
        
		if (ser.isOpen()):
			bpy.context.scene.connected=True
			self.report({'INFO'}, "Connected")
			print(ser.baudrate)
		else:
			bpy.context.scene.connected=False
			self.report({'WARNING'}, "Connection fail")
          
		return{"FINISHED"}

class OBJECT_OT_disconnectgrbl(bpy.types.Operator):
	bl_idname = "disconnect.grbl" #name used to refer to this operator
	bl_label = "Disconnect" #operator's label
	bl_description = "Disconnect Serial" #tooltip

	def invoke(self, context, event):
		import bpy
		ser.close()
		if (not ser.isOpen()):
			bpy.context.scene.connected=False
			self.report({'INFO'}, "Connection terminated")
		else:
			bpy.context.scene.connected=True
			self.report({'WARNING'}, "The connection is still open!! :O")

		return{"FINISHED"}

class OBJECT_OT_Button(bpy.types.Operator):
	bl_idname = "my.button"
	bl_label = "Button"
	number = bpy.props.IntProperty()
	row = bpy.props.IntProperty()
	loc = bpy.props.StringProperty()

	def execute(self, context):
		if self.loc:
			words = self.loc.split()
			self.row = int(words[0])
			self.number = int(words[1])
		print("Row %d button %d" % (self.row, self.number))
		return{'FINISHED'}    
		
def register():	
	bpy.utils.register_module(__name__)

	try:
		bpy.utils.unregister_class(bpy.types.RENDER_PT_render)
		bpy.utils.unregister_class(bpy.types.RENDER_PT_dimensions)
		bpy.utils.unregister_class(bpy.types.RENDER_PT_antialiasing)
		bpy.utils.unregister_class(bpy.types.RENDER_PT_motion_blur)
		bpy.utils.unregister_class(bpy.types.RENDER_PT_shading)
		bpy.utils.unregister_class(bpy.types.RENDER_PT_performance)
		bpy.utils.unregister_class(bpy.types.RENDER_PT_post_processing)
		bpy.utils.unregister_class(bpy.types.RENDER_PT_stamp)
		bpy.utils.unregister_class(bpy.types.RENDER_PT_output)
		bpy.utils.unregister_class(bpy.types.RENDER_PT_bake)
		bpy.utils.unregister_class(bpy.types.RENDER_PT_freestyle)
	except:
		pass;
    
def unregister():
	bpy.utils.unregister_module(__name__)

	pass
    
if __name__ == "__main__":
	register()


Re: blender + reprap
April 16, 2015 06:03PM
Та-же каша, но зато Blender_2.74


Attachments:
open | download - GRBL.py (9.5 KB)
Re: blender + reprap
April 19, 2015 03:21AM
В общем, всё упёрлось в "threading", в чём я совсем ничего не понимаю.
Суть проблемы - считывание/запись в порт на лету.
-----
ещё одна ссылка на проект по теме.
Тоже на питоне, но для принтеров.
Sorry, only registered users may post in this forum.

Click here to login