пропадают элементы

Главная Форумы Задать вопрос пропадают элементы

Помечено: 

Просмотр 8 сообщений - с 1 по 8 (из 8 всего)
  • Автор
    Сообщения
  • #4841 Score: 0
    Юлия
    Участник

    На мой взгляд, странность))

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

    подскажите, пожалуйста, что можно сделать

    #4843 Score: 4
    ИваСерж
    Хранитель
    133 pts

    Вот прямо сегодня столкнулся с такой проблемой. Подробней рассказал Лобанов в своих уроках

    https://youtu.be/XIGpuP23k9k?list=PLVCDzVIlOckHsZcqkq3DmzdGcq2503l1G&t=1175

    Решение: создавать элементы не средствами Динамо, с через питон.
    Я использовал команду doc.Create.NewFamilyinstance. Тогда семейства создаются без привязки к Динамо. Если нужно, могу подсказать как работать с NewFamilyinstance.

    p.s.

    import Revit
    clr.ImportExtensions(Revit.Elements)

    Element.ToDSType(False) – если мы создали элемент в Dynamo (и его не было в Revit) – Dynamo будет отслеживать. Т.е. при очередном запуске старый элемент будет удаляться и создаваться новый!

    Element.ToDSType(True) – Dynamo не будет отслеживать и при каждом запуске будут создаваться новые элементы, старые удаляться не будут.

     

    #4848 Score: 0
    Юлия
    Участник

    Спасибо большое! попробую все способы)

    буду рада подсказке про  NewFamilyinstance

    #4849 Score: 2
    Legantmar
    Хранитель
    467 pts

    вместо нода Family Instance by Point
    нужно создать нод python script:

    с таким кодом (обращаю ваше внимание на строчку 27):

    #4850 Score: 0
    Юлия
    Участник

    Спасибо!

    #4851 Score: 0
    ИваСерж
    Хранитель
    133 pts

    Вдогонку.
    Вчера тестил свой скрипт. Оказалось, что даже при использовании Element.ToDSType(True) последний элемент сидит в памяти Динамо.
    У меня получилась такая последовательность дейтсвий:
    1 выполнение скрипта. Устанавливается Семейсвто 1 по координатам 1. Семейство 1 и его координаты закладываются в память.
    2 последующие выполнения скрипта.- ставится Семейство из памяти, фактически дублируется. Скрип пересчитывается, устанавливается Семейство 2, семейство 2 записывается в память.

    Когда я 5 раз запустил скрип, то вместо ожидаемых 5 розеток получил 9 розеток. 4*2 + последняя не продублировавшаяся.

    Пришлось вспомнить о перезагрузке скрипта с помощью нода ПроРуБим ForcedChildrensEval. Назначаю в питоне переменную равную значению из ForcedChildrensEval и запускаю установку семейств по этому значению.
    С программной точки зрения, когда скриптпытается поставить дубль из памяти, его принудительно обновляет ForcedChildrensEval и поставить дубль не дает. После обновления семейство ставится в штатном режиме.
    Код примера на питоне изменил так:

    В Динамо выглядит так

    #4852 Score: 0
    Legantmar
    Хранитель
    467 pts

    в процессе редактирования такое возможно..
    для этого нужно закрыть скрипт (а еще лучше и динамо) и открыть заново.

    #10011 Score: 0
    Xuan Li
    Участник

    Hi all

    Whwn i run PyS Auto dimension for rebars an error ”
    <h1 id=”caas-title” class=”caas__title caas-content-result-mt”>IronPythonEvaluator.EvaluateIronPythonScript operation failed”</h1>
    import clr
    clr.AddReference(‘RevitAPI’)
    import Autodesk
    from Autodesk.Revit.DB import *
    from System.Collections.Generic import *
    import System
    import math

    clr.AddReference(‘ProtoGeometry’)
    from Autodesk.DesignScript.Geometry import *

    from operator import itemgetter, attrgetter

    clr.AddReference(“RevitNodes”)
    import Revit
    clr.ImportExtensions(Revit.Elements)
    clr.ImportExtensions(Revit.GeometryConversion)
    clr.ImportExtensions(Revit.GeometryReferences)

    clr.AddReference(“RevitServices”)
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager

    doc = DocumentManager.Instance.CurrentDBDocument
    uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
    uiapp=DocumentManager.Instance.CurrentUIApplication
    app = uiapp.Application

    gopt = Options()
    gopt.ComputeReferences = True
    view = doc.ActiveView
    gopt.View = view

    list0=[]
    for i in IN[0]:
    typename = i.GetType().Name
    if typename = “x”
    list0.append(i)

    coord=[]
    ids=[]
    list=[]
    elem=list0
    listcurve= UnwrapElement(elem[0]).GetCenterlineCurves(0,0,0)
    curve= listcurve[0].ToProtoType()
    pt0=curve.PointAtParameter(1)
    x01 = curve.PointAtParameter(0).X
    y01 = curve.PointAtParameter(0).Y

    listcurve2= UnwrapElement(elem[1]).GetCenterlineCurves(0,0,0)
    curve2= listcurve2[0].ToProtoType()
    pt02=curve2.PointAtParameter(1)
    x02 = curve2.PointAtParameter(0).X
    y02 = curve2.PointAtParameter(0).Y

    if abs(y01-y02)<10:
    for i in list0:
    listcurve= UnwrapElement(i).GetCenterlineCurves(0,0,0)
    curve= listcurve[0].ToProtoType()
    coord.append(curve.PointAtParameter(1).X)
    ids.append(UnwrapElement(i).Id)
    elif abs(x01-x02)<10:
    for i in list0:
    listcurve= UnwrapElement(i).GetCenterlineCurves(0,0,0)
    curve= listcurve[0].ToProtoType()
    coord.append(curve.PointAtParameter(1).Y)
    ids.append(UnwrapElement(i).Id)

    list=zip(coord, ids)
    list2=sorted(list, key=itemgetter(0))

    list3=[]
    for i in range(len(list2)):
    elemId=list2[i][1]
    list3.append(doc.GetElement(elemId).ToDSType(True))

    elem=list3
    listcurve= UnwrapElement(elem[0]).GetCenterlineCurves(0,0,0)
    curve= listcurve[0].ToProtoType()
    pt0=curve.PointAtParameter(1)
    x0 = curve.PointAtParameter(0).X
    x1 = curve.PointAtParameter(1).X
    y0 = curve.PointAtParameter(0).Y
    y1 = curve.PointAtParameter(1).Y
    z0 = curve.PointAtParameter(0).Z
    z1 = curve.PointAtParameter(1).Z
    if abs(y01-y02)<10:
    if z0>z1:
    pt0= Point.ByCoordinates(x0, y0, z1-300)
    pt1= Point.ByCoordinates(pt0.X+100, pt0.Y, pt0.Z)
    line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()

    elif z0<z1:
    pt0= Point.ByCoordinates(x0, y0, z0-300)
    pt1= Point.ByCoordinates(pt0.X+100, pt0.Y, pt0.Z)
    line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()

    if y0>y1:
    pt0= Point.ByCoordinates(x0, y1-300, 0)
    pt1= Point.ByCoordinates(pt0.X+100, pt0.Y, pt0.Z)
    line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()

    elif y0<y1:
    pt0= Point.ByCoordinates(x0, y0-300, 0)
    pt1= Point.ByCoordinates(pt0.X+100, pt0.Y, pt0.Z)
    line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()

    elif abs(x01-x02)<10:
    if z0>z1:
    pt0= Point.ByCoordinates(x0, y0, z1-300)
    pt1= Point.ByCoordinates(pt0.X, pt0.Y+100, pt0.Z)
    line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()

    elif z0<z1:
    pt0= Point.ByCoordinates(x0, y0, z0-300)
    pt1= Point.ByCoordinates(pt0.X, pt0.Y+100, pt0.Z)
    line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()

    if x0>x1:
    pt0= Point.ByCoordinates(x1-300, y1, 0)
    pt1= Point.ByCoordinates(pt0.X, pt0.Y+100, pt0.Z)
    line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()

    elif x0<x1:
    pt0= Point.ByCoordinates(x0-300, y0, 0)
    pt1= Point.ByCoordinates(pt0.X, pt0.Y+100, pt0.Z)
    line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()

    ref= ReferenceArray()
    for i in list3:
    rebar=UnwrapElement(i)
    geo= rebar.get_Geometry(gopt)
    enum = geo.GetEnumerator()
    enum.MoveNext()
    linerebarref = enum.Current.Reference
    ref.Append(linerebarref)

    TransactionManager.Instance.EnsureInTransaction(doc)
    newdim1 = doc.Create.NewDimension(doc.ActiveView, line, ref)
    TransactionManager.Instance.TransactionTaskDone()

    seg=[]
    segments = UnwrapElement(newdim1).Segments
    for i in segments:
    seg.append(i.ValueString)

    rebarref=[]
    for i in list3:
    rebar=UnwrapElement(i)
    geo = rebar.get_Geometry(gopt)
    enum = geo.GetEnumerator()
    enum.MoveNext()
    linerebarref = enum.Current.Reference
    rebarref.append(linerebarref)

    ref1=ReferenceArray()

    rebar=UnwrapElement(elem[0])
    geo = rebar.get_Geometry(gopt)
    enum = geo.GetEnumerator()
    enum.MoveNext()
    linerebarref = enum.Current.Reference
    ref1.Append(linerebarref)

    dimseg=[]
    k=[]
    k.append(0)
    dimk=[]
    for i in range(len(seg)-1):
    if seg[i]==seg[i+1]:
    continue
    elif seg[i] != seg[i+1]:
    rebar=UnwrapElement(elem[i+1])
    geo = rebar.get_Geometry(gopt)
    enum = geo.GetEnumerator()
    enum.MoveNext()
    linerebarref = enum.Current.Reference
    ref1.Append(linerebarref)
    #ref1.Append(rebarref[i+1])
    k.append(i+1)
    dimseg.append(seg[i])
    dimk.append(k)
    continue

    rebar=UnwrapElement(elem[-1])
    geo = rebar.get_Geometry(gopt)
    enum = geo.GetEnumerator()
    enum.MoveNext()
    linerebarref = enum.Current.Reference
    ref1.Append(linerebarref)

    dimseg.append(seg[-1])
    k.append(len(elem)-1)
    p=[]
    for i in range(len(k)-1):
    p.append(k[i+1]-k[i])

    TransactionManager.Instance.EnsureInTransaction(doc)
    newdim2 = doc.Create.NewDimension(doc.ActiveView, line, ref1)
    segments = UnwrapElement(newdim2).Segments
    for i in range(len(p)):
    if p[i]==1:
    segments[i].ValueOverride = dimseg[i]
    else:
    segments[i].ValueOverride = str(p[i])+ “x” + dimseg[i] + “=” + str(p[i]*int(dimseg[i]))

    doc.Delete(UnwrapElement(newdim1).Id)
    TransactionManager.Instance.TransactionTaskDone()
    OUT=newdim2

    #newdim2.ToDSType(False)

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