А нет-ли такого скрипта? |
Home· Статьи · Вакансии · Чертежи · 3D Галерея · 2D Галерея · Форум · Форум Realtime | Реклама |  Конкурсы | RAR Award | Правила |
Здравствуйте, гость ( Вход | Регистрация )
А нет-ли такого скрипта? |
27/11/2017, 23:38
Сообщение
#2581
|
|
MaxMan Группа: Пользователи Сообщений: 180 Регистрация: 04/05/2006 Из: Ryazan Пользователь №: 30 816 |
Вопрос на миллион, конечно. Я бы начал с разбиения всех криволинейных участков сплайна на отрезки некоторой длины (какой-то минимальный шаг для сохранения кривизны, возможно как-раз зависимый от кривизны). Затем по всем этим координатам для каждого сплайна по отдельности генерить код команд для резака и форматом его писать в файл. Код ss = stringstream "" cmd = "G01" pts = #([1,1,0],[2,2,0],[2,3,0],[4,4,0],[3,5,0]) for p in pts do ( format "% X% Y% Z%\n" cmd p.x p.y p.z to:ss ) Я не смогу применить, не знаю вернее как, эти команды. А сплайны в сцене у меня сразу все разбитые, я привык вообще не использовать интерполяцию, всегда в ноль, нет промежуточных линий, при построении использую только линию, без интерполяции, любая фигура у меня состояит из набора прямых линий. одно время автозаменой пытался вот из этого скрипта делать G-код. Этот скрипт генерирует "тело" OBJ файла в окне листенера. Я удалял чтото, чтото менял на команды, но очень много возни, возвращался назад к программе Ace/ Поможешь? Взяв этот скрипт за основу? CODE global baseVertex = 0 global baseTVertex = 0 global baseNVertex = 0 function toDec f = ( local i = f as integer return i ) function outputHeader =( format "\n" format "Copy and paste the following lines into a\n" format "text editor, and save them as a .obj file.\n" format "\n" format "# -----------------\n" format "# Start of obj file\n" format "mtllib Unnamed.mtl\n" flushStringStream ) function outputFooter =( format "# end of obj file\n" format "# ---------------\n" format "\n" flushStringStream ) function outputNode node = ( format "g %\nusemtl %\n" node.name node.material local m = snapshotAsMesh node for v = 1 to m.numVerts do ( local vert = m.verts[v] format "v % % %\n" vert.pos.x vert.pos.y vert.pos.z flushStringStream ) format "\n" if m.numtverts > 0 do ( -- Texture coordinates for vt = 1 to m.numtverts do ( local tvert = getTVert m vt format "vt % % %\n" tvert.x tvert.y tvert.z ) format "\n" -- Also print out the normals, because some importers -- can't handle faces with textures but not normals for f =1 to m.numFaces do ( local vn = getFaceNormal m f format "vn % % %\n" vn.x vn.y vn.z flushStringStream ) format "\n" ) local mv = m.verts for f =1 to m.numFaces do ( local vface =getface m f local x = baseVertex + toDec(vface.x) local y = baseVertex + toDec(vface.y) local z = baseVertex + toDec(vface.z) if m.numtverts > 0 then ( local tvface = gettvface m f local tx = baseTVertex + toDec(tvface.x) local ty = baseTVertex + toDec(tvface.y) local tz = baseTVertex + toDec(tvface.z) local n = baseNVertex + f format "f %/%/% %/%/% %/%/%\n" x tx n y ty n z tz n flushStringStream ) else ( format "f % % %\n" x y z ) ) format "\n" baseVertex = baseVertex + m.numVerts baseTVertex = baseTVertex + m.numtverts baseNVertex = baseNVertex + m.numFaces ) function PrintObj = ( outputHeader() for c in rootNode.children do outputNode c outputFooter() ) PrintObj() В вложении сцена с примером для реза и бигования одного из листов A4 Сообщение отредактировал Ded_ - 27/11/2017, 23:48
Прикрепленные файлы
|
|
|
28/11/2017, 00:43
Сообщение
#2582
|
|
уже всё сделал Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 |
выделяешь шейп и запускаешь.
само собой это лишь пример CODE outputStream = StringStream ""
shp = selection[1] shapePoints = for splineIndex = 1 to numSplines shp collect ( pts = for knotIndex = 1 to numKnots shp splineIndex collect getKnotPoint shp splineIndex knotIndex if isClosed shp splineIndex do append pts pts[1] pts ) fn laserStop ss:outputStream = format "M5\n" to:ss fn laserStart ss:outputStream = format "M3\n" to:ss fn goto cmd pt ss:outputStream = format "% X% Y% Z%\n" cmd (formattedPrint pt.x format:".4f") (formattedPrint pt.y format:".4f") (formattedPrint pt.z format:".4f") to:ss G00 = "G00" G01 = "G01" -- ... -- etc laserStop() for item in shapePoints do ( goto G00 item[1] laserStart() for pt in item do goto G01 pt laserStop() ) clearListener() format "%\n" outputStream |
|
|
28/11/2017, 12:00
Сообщение
#2583
|
|
MaxMan Группа: Пользователи Сообщений: 180 Регистрация: 04/05/2006 Из: Ryazan Пользователь №: 30 816 |
выделяешь шейп и запускаешь. само собой это лишь пример Код outputStream = StringStream "" shp = selection[1] shapePoints = for splineIndex = 1 to numSplines shp collect ( pts = for knotIndex = 1 to numKnots shp splineIndex collect getKnotPoint shp splineIndex knotIndex if isClosed shp splineIndex do append pts pts[1] pts ) fn laserStop ss:outputStream = format "M5\n" to:ss fn laserStart ss:outputStream = format "M3\n" to:ss fn goto cmd pt ss:outputStream = format "% X% Y% Z%\n" cmd (formattedPrint pt.x format:".4f") (formattedPrint pt.y format:".4f") (formattedPrint pt.z format:".4f") to:ss G00 = "G00" G01 = "G01" -- ... -- etc laserStop() for item in shapePoints do ( goto G00 item[1] laserStart() for pt in item do goto G01 pt laserStop() ) clearListener() format "%\n" outputStream Спасибо огромное! Jahman, а это твоя страница? : Учиться я не могу, не мое это, голова занята другим, поэтому рассчитываю на твою помощь всегда. У меня нет не чего коммерческого, я не зарабатываю на этом, просто увлечение на время когда дома сижу, работаю в сервисе, ремонтирую бытовую технику. Но уже стыдно клянчить ) Скажи куда перевести, или что, где купить у тебя? И еще , есть много людей кто мучается с DXF файлами и невозможностью открыть их в программе для ЧПУ станка, конкретно Laseraxes, я сниму видео по твоему скрипту и ссылку на подробную информацию отправлю на твой ресурс. Куда мне их направлять. Ты для продажи им сделай с учетом интерполяции вершин созданных в максе. Сообщение отредактировал Ded_ - 28/11/2017, 12:18 |
|
|
28/11/2017, 12:56
Сообщение
#2584
|
|
уже всё сделал Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 |
Да не надо ничего покупать Я чисто ради фана.
Гугл говорит, что в кореле можно на VisualBasic'e скриптить кстати. Так что макс тут наверняка даже лишний |
|
|
28/11/2017, 13:25
Сообщение
#2585
|
|
MaxMan Группа: Пользователи Сообщений: 180 Регистрация: 04/05/2006 Из: Ryazan Пользователь №: 30 816 |
Да не надо ничего покупать Я чисто ради фана. Гугл говорит, что в кореле можно на VisualBasic'e скриптить кстати. Так что макс тут наверняка даже лишний Да Корел в той среде - основная программа. То что я все пытаюсь открыть в Максе, это мой архаизм, или лень, изучать что-то другое. А там Макс тоже не популярен, там Корел или Скетч только основные программы. Но для меня этот скрипт просто панацея, чтобы за оставшиеся пару часов вечера успеть чтото вырезать и склеить, чем сидеть конвертировать векторы из разных программ и потом еще ждать когда станок вырежет, а тут я заново создам все линии используя привязку, чтобы вручную указать оптимальные движение по линиям, все программы для разверток делают чихарду из последовательности вершин, очень много порожняка в движении головки, он больше кактается из угла в улол, чем режет. Благодаря этому скрипту я понатукаю линию так , как мне нужно для минимального холостого хода между линиями и сразу готов G-код. Спасибо. Сообщение отредактировал Ded_ - 28/11/2017, 13:33 |
|
|
28/11/2017, 13:49
Сообщение
#2586
|
|
уже всё сделал Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 |
QUOTE я заново создам все линии используя привязку, чтобы вручную указать оптимальные движение по линиям ты имортишь dxf и потом по нему руками все шейпы переделываешь? QUOTE все программы для разверток делают чихарду из последовательности вершин а можно какойнить примитивный пример? сам исходник и максовский файл вдруг еще какую свистелку получится прикрутить Сообщение отредактировал Jahman - 28/11/2017, 13:50 |
|
|
28/11/2017, 17:36
Сообщение
#2587
|
|
MaxMan Группа: Пользователи Сообщений: 180 Регистрация: 04/05/2006 Из: Ryazan Пользователь №: 30 816 |
Цитата я заново создам все линии используя привязку, чтобы вручную указать оптимальные движение по линиям ты имортишь dxf и потом по нему руками все шейпы переделываешь? Ага , руками все перерисовываю, для оптимизации холостого хода. и соединения вершин где можно. Цитата все программы для разверток делают чихарду из последовательности вершин а можно какойнить примитивный пример? сам исходник и максовский файл вдруг еще какую свистелку получится прикрутить Пример - конечно, я даже очень рад ) Он простой , но не бесполезный, только что нарисовал по фото с нуля, это маска "голова кошки", к новому году может кому пригодится, размер головы 53-57, очень просто клеить. мало сегментов. Забавная штука для детей будет, бумагу лучше брать больше 200 грамм на метр плотность, маска без ребер жесткости. В общем выкладываю все файлы в вложении, всю последовательность моих действий от модели до развертки в формате DXF: - первый файл 1_Cat_papercraft_MAX.zip ( 26,19 килобайт ) Кол-во скачиваний: 104 сцена из макса - второй файл 2_Cat_papercraft_3DS.zip ( 2,26 килобайт ) Кол-во скачиваний: 103 это экспортер из сцены макса для программы развертки - третий файл 3_Cat_for_Pepakura.v4_PDO.zip ( 14,6 килобайт ) Кол-во скачиваний: 113 готовая сцена в программе которая развертывает модель, по принципу это как Unwrap UVW (diamond mapping) с функциями сохраненияв вектор и добавления клапанов для склейки и редактирования... в программе указал видимые ребра для бигования с углом только менее 169 градусов - четвертый файл 4_Cat_Pepakura_export_DXF_6_list.zip ( 7,97 килобайт ) Кол-во скачиваний: 115 это файлы листов для печати в формате DXF (6 листов в архиве) Сообщение отредактировал Ded_ - 28/11/2017, 17:40 |
|
|
28/11/2017, 23:12
Сообщение
#2588
|
|
уже всё сделал Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 |
Глянул как dxf импортится, вроде все годно выглядит.
Особенно после того как выделяешь все вершины cutline шейпа и делашь weld с минимальным порогом, ну и corner всем узлам после этого. Ты вероятно только mountainLine и valleyLine перерисовываешь для оптимального прохода? А вот алгоритм нахождения оптимальной последовательности резов, наверное как раз и есть вопрос на миллион. Типичная Сообщение отредактировал Jahman - 28/11/2017, 23:14 |
|
|
28/11/2017, 23:57
Сообщение
#2589
|
|
MaxMan Группа: Пользователи Сообщений: 180 Регистрация: 04/05/2006 Из: Ryazan Пользователь №: 30 816 |
Глянул как dxf импортится, вроде все годно выглядит. Особенно после того как выделяешь все вершины cutline шейпа и делашь weld с минимальным порогом, ну и corner всем узлам после этого. Ты вероятно только mountainLine и valleyLine перерисовываешь для оптимального прохода? А вот алгоритм нахождения оптимальной последовательности резов, наверное как раз и есть вопрос на миллион. Типичная Ага, только mountainLine и valleyLine, в принципе не так долго, детальки крупные теперь, до этого у меня были очень мелкие развертки, я пока разворачивал устал, а клеить не захотел вообще ) |
|
|
29/11/2017, 00:14
Сообщение
#2590
|
|
уже всё сделал Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 |
QUOTE Задача коммивояжёра относится к числу трансвычислительных: уже при относительно небольшом числе городов (66 и более) она не может быть решена методом перебора вариантов никакими теоретически мыслимыми компьютерами за время, меньшее нескольких миллиардов лет. А в какой последовательности в конечном счете эти резы производятся? 1.mountainLine 2.valleyLine 3. cutLine ?? Сообщение отредактировал Jahman - 29/11/2017, 00:15 |
|
|
29/11/2017, 11:38
Сообщение
#2591
|
|
Давно уже Группа: Координатор Сообщений: 9 675 Регистрация: 24/06/2002 Из: Зеленоград Пользователь №: 158 |
Помнится был скриптец который назначал Object ID и Material ID случайно ил или на все, или на выбранные объекты. Чего-то найти не могу.
|
|
|
29/11/2017, 13:08
Сообщение
#2592
|
|
MaxMan Группа: Пользователи Сообщений: 180 Регистрация: 04/05/2006 Из: Ryazan Пользователь №: 30 816 |
Цитата Задача коммивояжёра относится к числу трансвычислительных: уже при относительно небольшом числе городов (66 и более) она не может быть решена методом перебора вариантов никакими теоретически мыслимыми компьютерами за время, меньшее нескольких миллиардов лет. А в какой последовательности в конечном счете эти резы производятся? 1.mountainLine 2.valleyLine 3. cutLine ?? Я объединению все линии сгиба в один сплайн, перерисовывая его по своему, как ты говорил, про коммивояжера. Прохожу лазерем по нему снача с маленьким током, чтобы не прорезал бумагу, потом беру Cut линию и следом режу по ней сильным током. " этапа получается. И вот я что подумал, лазер когда холодные режет чуть лучше, а когда нагревается похуже, и линии сгиба (внутрь или наружу, не важно) получаются неоднородные на разных листах. Вот бы все резать одним сплайном! только вместо линий для сгиба использовать пунктир, что бы была перфорация, это было бы вообще круто, размер перфорации 1мм через 2 мм или настраивать как в векторных редакторах. Тогда для реза одного листа будет достаточно одного кода. |
|
|
29/11/2017, 13:14
Сообщение
#2593
|
|
MaxMan Группа: Пользователи Сообщений: 180 Регистрация: 04/05/2006 Из: Ryazan Пользователь №: 30 816 |
Помнится был скриптец который назначал Object ID и Material ID случайно ил или на все, или на выбранные объекты. Чего-то найти не могу. Может это? http://3dcenter.ru/forum/index.php?showtop...st&p=919865 + Опс, да, он недоступен и названия нет. Тогд вот , в описании , что добавлена кнопка случайного назаначения ID Сообщение отредактировал Ded_ - 29/11/2017, 13:35 |
|
|
29/11/2017, 15:15
Сообщение
#2594
|
|
уже всё сделал Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 |
сперва запускаем такой вот скрипт, он определит функцию для конверта сплайна в прерывистый
CODE fn shapeToDotShape shp step gap = if isKindOf shp SplineShape do ( local shp2 = splineShape name:(uniqueName (shp.name + "_dotted")) shp2slineCount = 0 for i=1 to numsplines shp do ( count = numKnots shp i for k=1 to count do ( kk = k+1 if k == count do ( kk = 1 if not isClosed shp i do continue ) p1 = getKnotPoint shp i k p2 = getKnotPoint shp i kk vec = normalize (p2 - p1) dist = distance p1 p2 if dist >= (gap + step) then ( for x=1 to dist / (gap + step) do ( addNewSpline shp2 shp2slineCount += 1 addKnot shp2 shp2slineCount #corner #line p1 addKnot shp2 shp2slineCount #corner #line (p1 + vec * step) p1 += vec * (gap + step) ) if distance p1 p2 >= step do ( addNewSpline shp2 shp2slineCount += 1 addKnot shp2 shp2slineCount #corner #line p1 addKnot shp2 shp2slineCount #corner #line (p1 + vec * step) p1 += vec * (gap + step) ) updateShape shp2 ) ) ) if shp2slineCount == 0 then delete shp2 else shp2 ) затем выделяем нужные сплайны, вбиваем в листенер сиё с нужными значениями шага и пропуска и на танцы CODE select ( for s in selection collect ( if (ss = shapeToDotShape s 1.0 2.0) != undefined then ss else dontCollect))
Сообщение отредактировал Jahman - 29/11/2017, 15:20 |
|
|
29/11/2017, 16:08
Сообщение
#2595
|
|
Давно уже Группа: Координатор Сообщений: 9 675 Регистрация: 24/06/2002 Из: Зеленоград Пользователь №: 158 |
Помнится был скриптец который назначал Object ID и Material ID случайно ил или на все, или на выбранные объекты. Чего-то найти не могу. Может это? Не, я не про эти - те которые в элементах. Вроде нашел |
|
|
Bots |
Системное сообщение
|
|
|
|
|
Текстовая версия | Сейчас: 25/04/2024 - 19:39 |