1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Вопрос по chamferEdges

Тема в разделе "MAXScript", создана пользователем Александр Боровских, 21 авг 2014.

Модераторы: Savin Denis
  1. Александр Боровских

    Александр Боровских Пользователь сайта

    С нами с:
    25.08.2013
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    2
    Здравствуйте.
    Совсем недавно начал изучать MAXScript и возник вопрос связанный с командой obj.EditablePoly.chamferEdges. В ней указывается величина, на которую делается фаска, но как сделать число сегментов самой фаски?
    Смотрел через Макро рекодер, но хотелось бы узнать может есть вариант попроще и покороче в написании кода?

    PS: Может быть кто-нибудь знает статьи или литературу по создании геометрии (сложной геометрии) при помощи MAXScript?
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Объект EditablePoly имеет свойство edgeChamferSegments, которое обозначает число сегментов самой фаски. Сначала нужно установить число сегментов самой фаски, а потом сделать chamferEdges.
    Пример: Число сегментов самой фаски=3
    Код:
    obj.EditablePoly.edgeChamferSegments=3
     
  3. Александр Боровских

    Александр Боровских Пользователь сайта

    С нами с:
    25.08.2013
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    2
    На данную статью натыкался, но при ее использовании получал ошибку от макса:
    "Unknown property: "edgeChamferSegments" in <MixinInterface:EditablePoly>"

    Прикреплю код, может быть я где-нибудь сильно перемудрил

    Код:
    max select all
    max delete
    clearlistener()
    arrSpline = #()
    arrAttach = #()
    widthSpline
    newObj
    newSplineObj
     
    fn createSpline = (
        for i = 1 to 10 do (
            objSpline = Rectangle name:(uniquename("stepSpline_")) wirecolor: black material: meditMaterials[1]
            if i == 1 then objSpline.pos = [0, 0, 0]
            else objSpline.pos = [0, objSpline.length * (i - 1), 0]
            lenghtSpline = objSpline.length
            widthSpline = objSpline.width
            append arrSpline objSpline
        )
    )
     
    fn createFirstBox = (
        newSplineObj = copy arrSpline[1]
        addModifier newSplineObj (Extrude amount: 5 segments: 2)
        convertToPoly newSplineObj
        newSplineObj.edges[#centerEdge] = #(3, 7, 10, 12)
        move newSplineObj.edges[#centerEdge] [ 0, 0, (5 / 2) - 0.5 ]
        polyop.setFaceSelection newSplineObj #{6, 8}
        newSplineObj.extrudeFaces 0.5
        polyop.setFaceSelection newSplineObj #{7, 12, 18}
        newSplineObj.extrudeFaces 0.5
        polyop.setEdgeSelection newSplineObj #{40..42}
        newSplineObj.EditablePoly.edgeChamferSegments=3
        newSplineObj.EditablePoly.chamferEdges 0.40
        newSplineObj.wirecolor = color 0 0 0
        newSplineObj.material = meditMaterials[1]
        )
     
    createSpline()
    createFirstBox()
     
    for i = 1 to arrSpline.count do (
        newObj = copy newSplineObj
        move newObj.edges[8] [0, 0, -3]
        move newObj [0,lenghtSpline * i,3 * i]
        append arrAttach newObj
    )
     
    for i = 1 to arrAttach.count do polyop.attach newSplineObj arrAttach[i]
    max views redraw
     
  4. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    У меня нет возможности проверить. Пишем тогда так:
    Код:
    obj.edgeChamferSegments=3
    newSplineObj.edgeChamferSegments=3
     
  5. Владислав Бодюл

    Владислав Бодюл Активный участник

    С нами с:
    08.03.2011
    Сообщения:
    44
    Симпатии:
    2
    Баллы:
    12
    Код:
    max select all
    max delete
    clearlistener()
    arrSpline = #()
    arrAttach = #()
    widthSpline
    newObj
    newSplineObj
    lenghtSpline
     
    fn createSpline = (
        for i = 1 to 10 do (
            objSpline = Rectangle name:(uniquename("stepSpline_")) wirecolor: black material: meditMaterials[1]
            if i == 1 then objSpline.pos = [0, 0, 0]
            else objSpline.pos = [0, objSpline.length * (i - 1), 0]
            lenghtSpline = objSpline.length
            widthSpline = objSpline.width
            append arrSpline objSpline
        )
    )
     
    fn createFirstBox = (
        newSplineObj = copy arrSpline[1]
        addModifier newSplineObj (Extrude amount: 5 segments: 2)
        convertToPoly newSplineObj
        newSplineObj.edges[#centerEdge] = #(3, 7, 10, 12)
        move newSplineObj.edges[#centerEdge] [ 0, 0, (5 / 2) - 0.5 ]
        polyop.setFaceSelection newSplineObj #{6, 8}
        newSplineObj.extrudeFaces 0.5
        polyop.setFaceSelection newSplineObj #{7, 12, 18}
        newSplineObj.extrudeFaces 0.5
        polyop.setEdgeSelection newSplineObj #{40..42}
        newSplineObj.baseObject.edgeChamferSegments=3
        newSplineObj.EditablePoly.chamferEdges 0.40
        newSplineObj.wirecolor = color 0 0 0
        newSplineObj.material = meditMaterials[1]
        )
     
    createSpline()
    createFirstBox()
     
    for i = 1 to arrSpline.count do (
        newObj = copy newSplineObj
        move newObj.edges[8] [0, 0, -3]
        move newObj [0,lenghtSpline * i,3 * i]
        append arrAttach newObj
    )
     
    for i = 1 to arrAttach.count do polyop.attach newSplineObj arrAttach[i]
    max views redraw
     
  6. Владислав Бодюл

    Владислав Бодюл Активный участник

    С нами с:
    08.03.2011
    Сообщения:
    44
    Симпатии:
    2
    Баллы:
    12
    Вместо
    Код:
    newSplineObj.EditablePoly.edgeChamferSegments=3
    пишем
    Код:
    newSplineObj.BaseObject.edgeChamferSegments=3
    и переменную lenghtSpline нужно было в самом начале написать.
     
  7. Александр Боровских

    Александр Боровских Пользователь сайта

    С нами с:
    25.08.2013
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    2
    Спасибо, люди добрые!
    Все заработало.

    И можно еще вопросик. В данном скрипте создается экструдом бокс с ребрами по центру высоты. Вот и хочется узнать, есть ли в макс скрипте способ их определять и выделять автоматически, без введения в скрипт ручных значений? Пример даже с изменением этих самых количеств ребер приведет уже к неудачным результатам скрипта.
     
Модераторы: Savin Denis

Поделиться этой страницей