Создание каркаса крана со стрелой с помощью команд APREPRO

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

ВАЖНО: при создании подобных моделей необходимо обнулять нумерацию командой compress all и объединять сущности - merge all или работать с расположением для точного отслеживания нумерации сущностей.

Построение модели

Для задания констант в командной строке наберите команды:

#{a=2}
#{b=2}
#{c=2}
#{n=10}

Создайте фундамент с помощью поверхности с размерами {a} на {a} и удалите ее с сохранением сущностей более низкого уровня. Для этого в командную строку введите набор команд:

create surface rectangle width {a} height {a} zplane
delete Surface 1 keep_lower_geometry

Объедините сущности и обнулите нумерацию. Для этого в командную строку введите:

merge all
compress all

Создайте ярусы, для этого скопируйте кривые от 1 до 4 {n} раз на высоту {c}. В командную строку введите:

Curve all copy move z {c} repeat {n} 

Создайте вертикальные балки между ярусами и подкосы. Для данной операции воспользуемся циклом с использованием оператора {Loop}:

#{i=0} 
#{Loop(n)}
	create curve vertex {1+4*i} {5+4*i} #вертикаль
	create curve vertex {2+4*i} {6+4*i} #вертикаль
	create curve vertex {3+4*i} {7+4*i} #вертикаль
	create curve vertex {4+4*i} {8+4*i} #вертикаль

	create curve vertex {1+4*i} {6+4*i} #подкос
	create curve vertex {2+4*i} {7+4*i} #подкос
	create curve vertex {3+4*i} {8+4*i} #подкос
	create curve vertex {4+4*i} {5+4*i} #подкос

	#{i++}
#{EndLoop}

Логика построения несущих опор и подкосов на примере одного яруса (одной итерации цикла):

Объедините сущности и обнулите нумерацию. Для этого в командную строку введите:

merge all
compress all

Создание башни происходит через параметры:

  • сторон башенного крана {a}
  • начальной высоты башни {n*c}
  • высоты башни {hb}

Для задания константы в командной строке наберите:

#{hb=3}

Создайте башню, для этого в командную строку введите:

create curve location {a/2} {a/2} {n*c} location {a/8} {a/8} {n*c+hb}
create curve location {a/2} {-a/2} {n*c} location {a/8} {-a/8} {n*c+hb}
create curve location {-a/2} {-a/2} {n*c} location {-a/8} {-a/8} {n*c+hb}
create curve location {-a/2} {a/2} {n*c} location {-a/8} {a/8} {n*c+hb}

create curve location {-a/8} {a/8} {n*c+hb}  location {a/8} {a/8} {n*c+hb}
create curve location {a/8} {a/8}  {n*c+hb}  location {a/8} {-a/8} {n*c+hb}
create curve location {a/8} {-a/8} {n*c+hb}  location {-a/8} {-a/8} {n*c+hb}
create curve location {-a/8} {-a/8} {n*c+hb} location {-a/8} {a/8} {n*c+hb}

Объедините сущности и обнулите нумерацию. Для этого в командную строку введите:

merge all
compress all

Создайте стрелу с зазором {0.1*a}.

Для задания констант в командной строке наберите:

#{e=7}                 
#{b=2}                 
#{hs=1}
#{i=0}	
#{j=1}		

Для построения стрелы в командную строку введите набор команд:

#{Loop(e)} 		
create curve location {a/2+a*0.1+b*i} {a/2} {n*c} location {a/2+a*0.1+b*i} {-a/2} {n*c}
    #{If(j==e)}         
        #{Break}
    #{EndIf}             
create curve location {a/2+a*0.1+b*i} {-a/2} {n*c} location {a+a*0.1+b*i} {0} {n*c+hs}
create curve location {a+a*0.1+b*i} {0} {n*c+hs} location {a/2+a*0.1+b*i} {a/2} {n*c}
#{i++}			
#{j++}			
#{EndLoop}

Логика построения стрелы на примере одного цикла, последняя операция создает лишь одну горизонтальную кривую:

Для построения оставшихся подкосов стрелы в командную строку введите:

#{j=1}			
#{e1=e-1}			
#{Loop(e1)} 		

	create curve location {a/2+a*0.1+e*b-b*j} {-a/2} {n*c} location {a*0.1+e*b-b*j} {0} {n*c+hs}
	create curve location {a*0.1+e*b-b*j} {0} {n*c+hs} location {a/2+a*0.1+e*b-b*j} {a/2} {n*c}

	#{j++}		
#{EndLoop}

Логика построения оставшихся подкосов стрелы на примере одного цикла:

Для построения дополнительных подкосов в командную строку введите набор команд:

#{i=1}	
#{j=2}			
#{Loop(e)} 		

create curve location {a/2+a*0.1+b*(i-1)} {a/2} {n*c} location {a/2+a*0.1+b+b*(i-1)} {a/2} {n*c}
create curve location {a/2+a*0.1+b*(i-1)} {-a/2} {n*c} location {a/2+a*0.1+b+b*(i-1)} {-a/2} {n*c}
   #{If(j==e)}
   #{Break}
   #{EndIf}

create curve location {a+a*0.1+b*(i-1)} {0} {n*c+hs} location {a+a*0.1+b+b*(i-1)} {0} {n*c+hs}
#{i++}			
#{j++}			
#{EndLoop}

Логика построения дополнительных подкосов на примере одного цикла:

Объедините сущности и обнулите нумерацию. Для этого в командную строку введите:

merge all
compress all

Ниже приведён полный код программы:

reset
#{a=2}
#{b=2}
#{c=2}
#{n=10}

create surface rectangle width {a} height {a} zplane 	
delete Surface 1  keep_lower_geometry 

merge all
compress all

Curve all copy move z {c} repeat {n} 

#{i=0}				
#{Loop(n)} 			

	create curve vertex {1+4*i} {5+4*i} 	
	create curve vertex {2+4*i} {6+4*i}	
	create curve vertex {3+4*i} {7+4*i}	
	create curve vertex {4+4*i} {8+4*i}	

	create curve vertex {1+4*i} {6+4*i} 	
	create curve vertex {2+4*i} {7+4*i}	
	create curve vertex {3+4*i} {8+4*i}	
	create curve vertex {4+4*i} {5+4*i}	

	#{i++}			
#{EndLoop}			

merge all
compress all


#{hb=3}
create curve location {a/2} {a/2} {n*c} location {a/8} {a/8} {n*c+hb}
create curve location {a/2} {-a/2} {n*c} location {a/8} {-a/8} {n*c+hb}
create curve location {-a/2} {-a/2} {n*c} location {-a/8} {-a/8} {n*c+hb}
create curve location {-a/2} {a/2} {n*c} location {-a/8} {a/8} {n*c+hb}

create curve location {-a/8} {a/8} {n*c+hb}  location {a/8} {a/8} {n*c+hb}
create curve location {a/8} {a/8}  {n*c+hb}  location {a/8} {-a/8} {n*c+hb}
create curve location {a/8} {-a/8} {n*c+hb}  location {-a/8} {-a/8} {n*c+hb}
create curve location {-a/8} {-a/8} {n*c+hb} location {-a/8} {a/8} {n*c+hb}

merge all
compress all


#{e=7}                 
#{b=2}                 
#{hs=1}
#{i=0}	
#{j=1}			
#{Loop(e)} 		

create curve location {a/2+a*0.1+b*i} {a/2} {n*c} location {a/2+a*0.1+b*i} {-a/2} {n*c}
	
    #{If(j==e)}         
        #{Break}
    #{EndIf}             
create curve location {a/2+a*0.1+b*i} {-a/2} {n*c} location {a+a*0.1+b*i} {0} {n*c+hs}
create curve location {a+a*0.1+b*i} {0} {n*c+hs} location {a/2+a*0.1+b*i} {a/2} {n*c}

#{i++}			
#{j++}			
#{EndLoop}


#{j=1}			
#{e1=e-1}			
#{Loop(e1)} 		

	create curve location {a/2+a*0.1+e*b-b*j} {-a/2} {n*c} location {a*0.1+e*b-b*j} {0} {n*c+hs}
	create curve location {a*0.1+e*b-b*j} {0} {n*c+hs} location {a/2+a*0.1+e*b-b*j} {a/2} {n*c}

	#{j++}		
#{EndLoop}

#{i=1}	
#{j=2}			
#{Loop(e)} 		

create curve location {a/2+a*0.1+b*(i-1)} {a/2} {n*c} location {a/2+a*0.1+b+b*(i-1)} {a/2} {n*c}
create curve location {a/2+a*0.1+b*(i-1)} {-a/2} {n*c} location {a/2+a*0.1+b+b*(i-1)} {-a/2} {n*c}
   #{If(j==e)}
   #{Break}
   #{EndIf}

create curve location {a+a*0.1+b*(i-1)} {0} {n*c+hs} location {a+a*0.1+b+b*(i-1)} {0} {n*c+hs}
#{i++}			
#{j++}			
#{EndLoop}

merge all
compress all

Создание блоков

Так как кривые имеют разные сечения, то их необходимо добавлять в разные блоки. Кривые будем добавлять в блоки в соответствии с их номером или координатой центра тяжести сущности.

ВАЖНО: блоки должны иметь правильную последовательность создания и не содержать дубликаты элементов (команда - set duplicate block elements off).

Для удобства перенесем геометрическую модель в положительную область. Для этого в командную строку введите:

move Curve all midpoint x {a/2} y {a/2} include_merged

Создайте первый блок для ярусов башни. В него будут добавляться кривые, начиная с 1 до 4*(n+1) (оператором «до» является команда to). В командную строку введите:

set duplicate block elements off
block 1 add curve 1 to {4*(n+1)}

Создайте второй блок для стрелы. В данный блок будут добавляться кривые, у которых координата центра тяжести по Х имеет большую величину, чем {a/2+a/2}. Для этого в командную строку введите:

set duplicate block elements off
block 2 add curve with x_coord>{a/2+a/2}

Создайте третий блок для башни. Аналогично, как было сделано в блоке 2, но только по оси Z, для этого в командную строку введите:

set duplicate block elements off
block 3 add curve with z_coord>{c*n}

Создайте четвертый блок для подкосов. В данном блоке будут использоваться два условия для осей X и Y и команда «except», которая исключает кривые, удовлетворяющие условию. Введите в командную строку команду для условия по оси X:

set duplicate block elements off
block 4 add curve with x_coord>{0.1} except with x_coord={a/2+a/2} 

Для условия по оси Y введите в командную строку, команду set duplicate block elements off еще раз можно не прописывать, для блока 4 это было сделано выше:

block 4 add curve with y_coord>{0.1} except with y_coord={a/2+a/2}

Так как блоки создавались с правильной последовательностью, то для создания пятого блока воспользуемся командой - all.

Создайте пятый блок для опорных стержней. В данный блок будут добавляться все оставшиеся кривые. В командную строку введите:

set duplicate block elements off
block 5 add curve all

Ниже приведён полный код программы:

move Curve all midpoint x {a/2} y {a/2} include_merged
set duplicate block elements off
block 1 add curve 1 to {4*(n+1)}
set duplicate block elements off
block 2 add curve with x_coord>{a/2+a/2}
set duplicate block elements off
block 3 add curve with z_coord>{c*n}
set duplicate block elements off
block 4 add curve with x_coord>{0.1} except with x_coord={a/2+a/2} 
block 4 add curve with y_coord>{0.1} except with y_coord={a/2+a/2}
set duplicate block elements off
block 5 add curve all

Выводы:

  • Если дублирование не включено (команда - set duplicate block elements off), то все кривые, принадлежащие блокам, не будут добавляться в новые;
  • Если есть необходимость добавления большого количества кривых, необязательно делать с помощью одной команды с условиями выбора, можно добавлять их постепенно, для этого обязательно нужно указывать ID блока.
И еще статьи из раздела