плавное разнесение деталей сборки

Автор Sinus, 20.03.15, 16:37:45

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Sinus

Предложение. Доработать команду (добавить в настройках галочку "плавно") "разнести"  в 3D сборках  так чтобы разнесения и собирания деталей было плавное (детали плавно разлетаются и плавно собираются).

Алхимик

+1

Параметры необходимые для этого задаются в шагах, нужно только определится со скоростью.


Serious

А чем обосновано такое пожелание?
Для демонстрации эффектной сборки/разборки в видеороликах?

Алхимик

Ролики то одно, но может и в окне компаса достаточно показать... сейчас не видно как разбирается механизм, сейчас видно только два положения - промежуточных положений нет.

jurin

+0.5
Это все делается в Анимации, но наверно в сборке в некоторых моментах все же будет удобнее...

Алхимик

Цитата: jurin от 23.03.15, 12:09:32
Это все делается в Анимации
Да, но в сборке необходимо исключить все сопряжения деталей которые будут перемешаться. Хотя давно это было, может чего то поменяли и уже можно и без этого.

semenkontorovskij

+10

Присоединяюсь. Иногда это просто нужно для того, чтобы увидеть что и куда "вставляется".

Sinus

это предложение нужно, чтобы реализовать другое мое предложение - сохранение этого движения в формат gif анимации. А так вообще оно и само по себе нужное.

Sinus


предложение усложняется.
нужно не просто плавное разнесение и собирание.
нужно:
1. задавать общее время разнесения (собирания).
2.в каждом шаге нужна возможность задавать время начала разнесения и скорость (или на выбор - время окончания разнесения)
3. нужен индикатор разнесения (progressbar)
4. можно добавить новые две кнопки "плавно разобрать", "плавно собрать"  (кнопка активна только из разнесенного состояния.


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

Немного идет конфликт интересов с лобби библиотеки анимации, но я думаю не страшно.

чуть отступлю от темы пожелания

Из соседнего топика про перемещение детали увидел некий алгоритм(но я пока новичок в СДК), если нему прикрутить интерфейс с бегунками на затухающие функции(либо сплайн графики) по новым координатам разноса и я так понял простым смертным разнос недоступен по API

набросок собран на 16-й платформе по тому примеру:
d = iDocument3D.GetPart(0)
dpl = d.GetPlacement()
x=y=z=0
ok,x,y,z = dpl.GetOrigin(x, y, z)
iKompasObject.ksMessage( ' '.join( map( unicode, ["x = " , x , " y = " , y , " z = " , z] ) ) )
dpl.SetOrigin(200, 200, 200)
d.SetPlacement(dpl)
d.UpdatePlacement()
d.Update()

d - верхний объект

Vitalij Lysanov

Вариант  Макрос Компас и библиотека Pik10

При включении макроса компоненты разбегаются, затем плавно сбегаются.

Без проблем конечно не обходится.

Работать лучше с копией.

Все компоненты расфиксировать.

Макрос работает из режима изменения, т.е  войти в редактор сдвинуть вправо вниз и нажать "F5".

При частых перестроениях Компас конечно тормозит всю машину, пока выход - снимать диспетчером Компас.
В других режимах помогает скрытие компаса на время расчета, а затем восстановление. "Kompas.Visible=False"  "Kompas.Visible=True", но сейчас нужна анимация.

Включается индикация изменения сборки. 

В качестве бонуса на диск "С:" записывается файл с координатами компонентов, т.к. за аналог  использован макрос с записью координат компонентов, изменением  координат в ручном режиме и перестроением.


import Kompas6API5, LDefin3D, LDefin2D
Kompas, doc3d = start3d()


f2 = open("C:\Sborka_Koord.txt", "w")
f3 = open("C:\Sborka_Koord_TABL1.txt", "w")

it1 = iter(range(100))
m=[]
for nom in it1:
   try:

      iPart = Kompas6API5.ksPart(doc3d.GetPart(nom))
      iplac = Kompas6API5.ksPlacement(iPart.GetPlacement())
      x=y=z=0
      ok,x,y,z = iplac.GetOrigin(x, y, z)



      #      Kompas.ksMessage( ' '.join( map( unicode, ["x = " , x , " y = " , y , " z = " , z] ) ) )

      f2.write(str(nom))
      f2.write("\t\t\t")
      f3.write(str(nom))
      f3.write("\t\t\t")

      m.append(str(x))
      f2.write(str(x))
      f2.write("\t\t\t")
      f3.write(str(x))
      f3.write("\t\t\t")
     
      m.append(str(y))
      f2.write(str(y))
      f2.write("\t\t\t")
      f3.write(str(y))
      f3.write("\t\t\t")

      m.append(str(z))
      f2.write(str(z))
      f2.write("\t\t\t")
      f3.write(str(z))
      f3.write("\t\t\t")

      m.append("\n\n")
     
      f2.write("\n\n")
      f3.write("\n\n")
     

   except Exception:
         print "       nom!",nom

f2.close()
f3.close()

#2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
m=[]
t=[]
f1 = open("C:\Sborka_Koord_TABL1.txt", "r")
for   line in f1.readlines():
      m.append(line)


for masht in range(10,20,1):

    for   line in m:
          if line<>'\n':     
              t=line.split("\t")

              nom=t[0]
              iPart = Kompas6API5.ksPart(doc3d.GetPart(nom))       # первая деталь в сборке
             
              x=t[3]         
              y=t[6]         
              z=t[9]         
             
              x=(float(x)*masht)/10.0
              y=(float(y)*+masht)/10.0
              z=(float(z)*+masht)/10.0

              iplac.SetOrigin(x, y, z)
              iPart.SetPlacement(iplac)
              iPart.UpdatePlacement()
              iPart.Update()
                               
    f1.close()
         


for masht in range(200,100,-2):

    for   line in m:
          if line<>'\n':     
              t=line.split("\t")

              nom=t[0]
              iPart = Kompas6API5.ksPart(doc3d.GetPart(nom))       # первая деталь в сборке

              x=t[3]         
              y=t[6]         
              z=t[9]         
             
              x=(float(x)*masht)/100.0
              y=(float(y)*+masht)/100.0
              z=(float(z)*+masht)/100.0

              iplac.SetOrigin(x, y, z)
              iPart.SetPlacement(iplac)
              iPart.UpdatePlacement()
              iPart.Update()
                               
    f1.close()