Как сделать полый цилиндр в SketchUp с помощью Ruby API

То, что мне нужно сделать, это в основном цилиндр, стенки которого имеют нулевую толщину. Теперь, если вам нужно лучше понять, что я подразумеваю под этим, представьте, что вы вручную рисуете круг, затем с помощью инструмента pushpull делаете его цилиндром, после чего вы удаляете верхнюю и нижнюю грани. Сначала я использовал метод, предложенный в этом посте:

Пробивка отверстия в цилиндре с помощью Sketchup Ruby API

где внешний и внутренний радиусы имели разницу около 1e-02 метра, но теперь я понимаю, что на самом деле это должна быть бесконечно малая толщина, такая, что независимо от того, насколько далеко вы увеличиваете масштаб, все, что вы видите, это линия.

Я попытался сделать это с помощью следующего базового фрагмента кода:

entities = Sketchup.active_model.active_entities

circle = entities.add_circle(Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1), 20)
face = entities.add_face(circle)
face.pushpull(-10, true)

# now from here, it can be either pushpulled downwards by the same amount (10 in this case
# leaving only a bottom face)
# or the entity 'face' can be erased (leaving only a top face) as in the following

entities.erase_entities(face)

Итак, мой вопрос: как удалить обе грани, чтобы оставить только цилиндр?

Спасибо.


person Dyounis    schedule 08.07.2014    source источник
comment
Dyounis, вы также можете спросить на Sketchucation.com и в группе Google Sketchup API. Изучение того, что API находится в моем списке задач. Я был бы признателен за любой совет, который вы могли бы предложить о том, как лучше всего это сделать. Если вы предпочитаете писать по электронной почте, мой адрес указан в моем профиле.   -  person Cary Swoveland    schedule 09.07.2014
comment
Спасибо, я только около 4 недель в самом SketchUp, но путь, по которому я пошел, начался с Документов разработчика: sketchup.com/intl/en/developer/index, к сожалению, фактических руководств мало, и с тех пор это вся документация. Знакомство с ruby ​​не важно, больше внимания уделяется методам, специфичным для API и создания объектов. Так что экспериментируйте и переходите прямо к задуманному вами проекту, исследуя его по ходу дела. На самом деле это небольшой компонент моего текущего проекта (который, к сожалению, будет моим единственным проектом с Ruby API).   -  person Dyounis    schedule 09.07.2014
comment
Вы можете проверить нормали лиц в объектах и ​​стереть те, которые не являются вертикальными. Избавляет вас от выполнения двух двухтактных операций.   -  person thomthom    schedule 10.07.2014
comment
Спасибо за совет...   -  person Cary Swoveland    schedule 10.07.2014


Ответы (1)


Я нашел ответ, решение состоит в том, чтобы сделать оба. То есть pushpull внутрь на ту же величину, затем удалите лицо с помощью: entities.erase_entities(face).

entities = Sketchup.active_model.active_entities

circle = entities.add_circle(Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1), 20)
face = entities.add_face(circle)

face.pushpull(-10, true)
face.pushpull(10, true)

entities.erase_entities(face)
person Dyounis    schedule 09.07.2014