STROYKA

Текущее время: 18 окт 2017, 02:19

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: SketchUp API проблема
СообщениеДобавлено: 06 июн 2012, 16:41 
Не в сети
Новичок

Зарегистрирован: 11 янв 2012, 11:42
Сообщений: 21
ребят помогите. проблема следующая: после того как прочертил линии методом add_line внутри группы, не получается методом add_curve внутри группы объединить в одну полилинию. Однако если группу разделить методом explode и после добавить полилинию то она становится полилинией как и надо. В чем проблема уже не знаю, все перепробывал. Help


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 06 июн 2012, 18:40 
Не в сети
VIP

Зарегистрирован: 24 апр 2010, 20:43
Сообщений: 373
а зачем чертить линии если нужно curve, так сразу и нужно писать add_curve

PS: Скорей всего нужно так
Код:
entities = Sketchup.active_model.entities
group = entities.add_group
entities = group.entities
entities.add_curve [0,0,0], [0,10,0], [1,20,0]

в этом случае всё будет строиться в группе. Это имелось ввиду??? ( начертить в группе???)

А лучше кусок кода написал бы - тогда бы и посмотрели что не так. А то что то я не чего не понимаю, что нужно и что не так.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 07 июн 2012, 14:37 
Не в сети
Новичок

Зарегистрирован: 11 янв 2012, 11:42
Сообщений: 21
Объясняю

Код:
entities = Sketchup.active_model.entities
group = entities.add_group
entities = group.entities
entities.add_face [0,0,0], [0,10,0], [1,20,0]
entities.add_curve [0,0,0], [0,10,0], [1,20,0]

так работает, а если я создам много поверхностей через цикл, то add_curve уже не работает е объединяется в полилинию, отладчик ошибок в коде не видит. уже и не знаю в какую сторону думать могу вот привести код:
Код:
s = 0
while s < q
i = 0
while i <= q/6
entities.add_face(mass[s][0][i], mass[s+1][0][i], mass[s+1][0][i+1])
entities.add_face(mass[s][0][i], mass[s][0][i+1], mass[s+1][0][i+1])
if (i > 0)
edge = entities.add_line(mass[s][0][i], mass[s+1][0][i]) #Нижняя горизонтальная
edge.soft = edge.smooth = true
else
mass_spiral_1.push(mass[s][0][i])
end
edge = entities.add_line(mass[s][0][i], mass[s+1][0][i+1]) #Наискосок
edge.soft = edge.smooth = true
edge = entities.add_line(mass[s][0][i+1], mass[s+1][0][i+1]) #Верхняя горизонтальная
if (i < q/6)
edge.soft = edge.smooth = true
end
if (s > 0)
edge = entities.add_line(mass[s][0][i], mass[s][0][i+1]) #Левая вертикальная
edge.soft = edge.smooth = true
else
mass_spiral_5.push(mass[s][0][i])
end
if (s < q - 1)
edge = entities.add_line(mass[s+1][0][i], mass[s+1][0][i+1]) #Правая вертикальная
edge.soft = edge.smooth = true
else
mass_spiral_6.push(mass[s+1][0][i])
end
i += 1
end
mass_spiral_2.push(mass[s][0][i])
mass_spiral_3.push(mass[s][2][0])
entities.add_face(mass[s][0][i], mass[s+1][0][i], mass[s+1][2][0])
entities.add_face(mass[s][0][i], mass[s][2][0], mass[s+1][2][0])
edge = entities.add_line(mass[s][0][i], mass[s+1][2][0]) #Наискосок
edge.soft = edge.smooth = true
edge = entities.add_line(mass[s][0][i], mass[s][2][0]) #Левая вертикальная
if (s > 0)
edge.soft = edge.smooth = true
end
edge = entities.add_line(mass[s+1][0][i], mass[s+1][2][0]) #Правая вертикальная
if (s < q - 1)
edge.soft = edge.smooth = true
end
i = 0
while i <= q/6
entities.add_face(mass[s][2][i], mass[s+1][2][i], mass[s+1][2][i+1])
entities.add_face(mass[s][2][i+1], mass[s][2][i], mass[s+1][2][i+1])
edge = entities.add_line(mass[s][2][i], mass[s+1][2][i]) #Нижняя горизонтальная
if (i > 0)
edge.soft = edge.smooth = true
end
edge = entities.add_line(mass[s][2][i], mass[s+1][2][i+1]) #Наискосок
edge.soft = edge.smooth = true
if (i < q/6)
edge = entities.add_line(mass[s][2][i+1], mass[s+1][2][i+1]) #Верхняя горизонтальная
edge.soft = edge.smooth = true
else
mass_spiral_4.push(mass[s][2][i+1])
end
edge = entities.add_line(mass[s][2][i], mass[s][2][i+1]) #Левая вертикальная
if (s > 0)
edge.soft = edge.smooth = true
else
mass_spiral_7.push(mass[s][2][i])
end
if (s < q - 1)
edge = entities.add_line(mass[s+1][2][i], mass[s+1][2][i+1]) #Правая вертикальная
edge.soft = edge.smooth = true
else
mass_spiral_8.push(mass[s+1][2][i])
end
i += 1
end
i = 0
s += 1
Sketchup.status_text = "Построено поверхностей (" + (s*(q*2.to_f/3 + 3.to_f*2)).to_i.to_s + "/" + num_face.to_i.to_s + ") " + (s*(q*2.to_f/3 + 3.to_f*2)*100/num_face).to_i.to_s + "%"
end


[b]entities.add_curve(mass_spiral_1.push(mass[q][0][0]))
entities.add_curve(mass_spiral_2.push(mass[q][1][0]))
entities.add_curve(mass_spiral_3.push(mass[q][1][1]))
entities.add_curve(mass_spiral_4.push(mass[q][2][q/6 + 1]))
entities.add_curve(mass_spiral_5.push(mass[0][1][0]))
entities.add_curve(mass_spiral_6.push(mass[q][1][0]))
entities.add_curve(mass_spiral_7.push(mass[0][2][q/6 + 1]))
entities.add_curve(mass_spiral_8.push(mass[q][2][q/6 + 1]))[/b]


Это конечно ничего не даст, однако если в последних 8 add_curve'ах entities заменить на Sketchup.active_model.entities, и перед этим разделить группу методом explode, то нужные мне линии объединяютя. Где косяк не знаю уже все перепробывал((((((


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 07 июн 2012, 15:00 
Не в сети
VIP

Зарегистрирован: 24 апр 2010, 20:43
Сообщений: 373
tonyfull писал(а):
Объясняю

Это конечно ничего не даст, однако если в последних 8 add_curve'ах entities заменить на Sketchup.active_model.entities, и перед этим разделить группу методом explode, то нужные мне линии объединяютя. Где косяк не знаю уже все перепробывал((((((


ну попробуй для начала так

entities = Sketchup.active_model.entities
group = entities.add_group
ents = group.entities

ents.add_line(mass[s][0][i], mass[s+1][0][i+1]

И потом что то много циклов, думаю их стоит как то закончит

Ну вот так

model.commit_operation

А затем уже

ents.add_curve(mass_spiral_2.push(mass[q][1][0]))


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 07 июн 2012, 15:06 
Не в сети
Новичок

Зарегистрирован: 11 янв 2012, 11:42
Сообщений: 21
entities = Sketchup.active_model.entities
group = entities.add_group
ents = group.entities
такое вначале естественно есть, model.commit_operation не помогает, когда внутри группы, тогда почему-то не объединяется, что за печаль такая(


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 07 июн 2012, 15:14 
Не в сети
VIP

Зарегистрирован: 24 апр 2010, 20:43
Сообщений: 373
tonyfull писал(а):
model.commit_operation не помогает, когда внутри группы, тогда почему-то не объединяется, что за печаль такая(

Ну даже и незнаю что это такое.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 09 июн 2012, 09:55 
Не в сети
Новичок

Зарегистрирован: 11 янв 2012, 11:42
Сообщений: 21
Имеется две группы надо из одной вычесть другую. Типа аналог interset faces в меню правой кноки мыши и последующим удалении лишних поверхностей. Как это сделать из ruby/ Я новичок сильно не пинайте)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 09 июн 2012, 16:48 
Не в сети
VIP

Зарегистрирован: 24 апр 2010, 20:43
Сообщений: 373
Это довольно сложно сделать. Есть скрипт BoolTools- он это именно и делает - но делает это не совсем корректно.
То есть средствами руби этого сложно добиться.

нужно использовать group1.intersect(group2)

Посмотри скрипт Zorro2 http://forums.sketchucation.com/viewtopic.php?t=16038 там это функция применяеться intersect
А вот как потом вычесть всё лишнее - тут нужно придумать какой то свой алгоритм.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 10 июн 2012, 11:25 
Не в сети
Новичок

Зарегистрирован: 11 янв 2012, 11:42
Сообщений: 21
group1.intersect(group2) что делает конкретно? у меня этот метод возвращает false.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 11 июн 2012, 00:16 
Не в сети
VIP

Зарегистрирован: 24 апр 2010, 20:43
Сообщений: 373
а должен возвращать nil

ну а если нужно перечения устроить нужно было скрипт zorro изучить

вот код

Код:
group1.entities.intersect_with(false,group1.transformation,group1.entities,group1.transformation,false,[group2])


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 11 июн 2012, 13:40 
Не в сети
VIP

Зарегистрирован: 24 апр 2010, 20:43
Сообщений: 373
А вот ещё один скрипт на туже тему OSCoolean for SU 8 viewtopic.php?p=3684


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 20 июн 2012, 10:09 
Не в сети
Новичок

Зарегистрирован: 11 янв 2012, 11:42
Сообщений: 21
sketchup зависает при выполнении скрипта, однако когда выполение закончится, sketchup "развисает". Можно ли это как-нибудь победить?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 20 июн 2012, 10:39 
Не в сети
VIP

Зарегистрирован: 24 апр 2010, 20:43
Сообщений: 373
tonyfull писал(а):
sketchup зависает при выполнении скрипта, однако когда выполение закончится, sketchup "развисает". Можно ли это как-нибудь победить?

????
Это ж сколько же у вас групп одновременно пересекаеться??? 2группы или 5групп или 10групп.

При выполнении скрипта с двумя группами - зависаний не наблюдаеться если только ваши группы не имеют более 10 000 полигонов.

А вобще странный вопрос. Что то вроде того - попробуй угадать какой у меня скрипт?

Почему он зависает??? - да кто же знает что вы там понаписали.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 20 июн 2012, 10:45 
Не в сети
Новичок

Зарегистрирован: 11 янв 2012, 11:42
Сообщений: 21
Он зависает еще до того, как начинает объединять группы. А групп всего 2(.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: SketchUp API проблема
СообщениеДобавлено: 20 июн 2012, 10:50 
Не в сети
VIP

Зарегистрирован: 24 апр 2010, 20:43
Сообщений: 373
tonyfull писал(а):
Он зависает еще до того, как начинает объединять группы. А групп всего 2(.

я писал скрипт - нужно было выполнить кое-какие манипуляции. Вот на его выполнение у меня потребовалось времени около 3 часов.

Я посчитал и у меня получилось что скрипт в секунду выполняет 240 000 операций в секунду ( процесор 2.4Ггц)

Посчитайте сколько операций выполняет ваш скрипт?

Например - тот код что вы привели выше (блоки) сколько требуеться операций на его выполнения?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB