Построение линий в Питоне

Главная Форумы Задать вопрос Построение линий в Питоне

Просмотр 9 сообщений - с 1 по 9 (из 9 всего)
  • Автор
    Сообщения
  • #5806 Score: 0
    Ренат Я.
    Модератор
    79 pts

    пытаюсь построить линии в питоне, задача первая линия (первая точка со второй точкой), вторая линия (вторая точка с третьей) и т.д.

    что-то идет не так)) в питоне пока не силен)

    #5807 Score: 0
    txt
    Модератор
    86 pts

    а так не пойдет? или нужно решение с использованием цикла…

     


    import clr
    clr.AddReference('ProtoGeometry')
    from Autodesk.DesignScript.Geometry import *
    #Введенные в этом узле данные сохраняется в виде списка в переменных IN.
    dataEnteringNode = IN

    clr.AddReference("RevitNodes")
    import Revit
    from Revit.Elements import *
    clr.ImportExtensions(Revit.GeometryConversion)

    pt_0= Point.ByCoordinates(0, 0, 0);
    pt_1=Point.ByCoordinates(0, 0, 100);
    pt_2=Point.ByCoordinates(0, 100, 100);
    pt_3=Point.ByCoordinates(0, 100, 0);

    line_0=Line.ByStartPointEndPoint(pt_0, pt_1)
    line_1=Line.ByStartPointEndPoint(pt_1, pt_2)
    line_2=Line.ByStartPointEndPoint(pt_2, pt_3)

    OUT=line_0, line_1, line_2

    #5808 Score: 0
    Ренат Я.
    Модератор
    79 pts

    так и у меня получается, надо строить из координат, которые подаю в питон
    у меня в скрипте строчка закомментированная, как раз это делает

    #5809 Score: 0
    txt
    Модератор
    86 pts

    на вход подается 1 точка? или несколько
    допустим одна (для нескольких делается также, анврап можно не писать) :

    #5810 Score: 0
    Ренат Я.
    Модератор
    79 pts

    на входе список точек, причем кол-во может быть разное, надо сделать цикл

    #5811 Score: 1
    Legantmar
    Хранитель
    474 pts

    #5812 Score: 1
    Khasan Mamaev
    Модератор
    186 pts

    для сокращения кода можно объявлять функции, типа такого:
    def pt(x,y,z):
    return Point.ByCoordinates(x,y,z)

    после чего точку можно создавать так pt(1,1,1)

    #5813 Score: 1
    txt
    Модератор
    86 pts

    Получилось так:


    line=[]

    for i in range(0, 3):

    pt_a=IN[i]
    pt_b=IN[i+1]
    c=Line.ByStartPointEndPoint(pt_a, pt_b)
    d=line.append(c)
    OUT=line

    если на входе список точек:

    #5814 Score: 1
    Ренат Я.
    Модератор
    79 pts

    всем спасибо за идеи! решил вот так, txt чутка твой скрипт модифицировал, чтобы уменьшить ручную работу

    import clr
    clr.AddReference('ProtoGeometry')
    from Autodesk.DesignScript.Geometry import *
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    
    points = UnwrapElement(IN[0])
    lines = []
    for i in range (0, points.Count - 1):
    	pt_start = IN[0][i]
    	pt_end = IN[0][i+1]
    	lines.append(Line.ByStartPointEndPoint(pt_start, pt_end))
    OUT=lines

Просмотр 9 сообщений - с 1 по 9 (из 9 всего)
  • Для ответа в этой теме необходимо авторизоваться.