En las lecciones siguientes, creará una serie de reglas para administrar el contenido del ensamblaje.
Paso de parámetros del ensamblaje a las piezas
Este modelo incluye una pieza denominada manifold_block:1, que contiene reglas de iLogic. Se debe pasar el parámetro de nivel de ensamblaje a la pieza.
Cree una regla denominada assembly_to_parts_rule. Esta regla define los parámetros en la pieza según los valores correspondientes de los parámetros de control en el ensamblaje. La función Parámetro especifica el nombre del componente y el del parámetro.

Parameter("manifold_block:1", "block") = block
Parameter("manifold_block:1", "component_type") = component_type
Parameter("manifold_block:1", "port_a_size") = port_a_size
Parameter("manifold_block:1", "port_b_size") = port_b_size
Parameter("manifold_block:1", "port_c_size") = port_c_sizeEdición de reglas de nivel de pieza en un ensamblaje
En el aprendizaje Pieza de bloques múltiples, hemos añadido una regla a la pieza de bloques múltiples que controla los estilos T y Codo. También se debe añadir en el nivel de ensamblaje. En lugar de volver a escribir la regla existente, se copia el original.
En la cinta de opciones, haga clic en 
.
Añada una nueva regla llamada component_type_rule. 
If component_type = "standard" Then port_b_size = port_a_size port_c_size = port_a_size End If
Cuando se cambia el tamaño de puerto de Port A, se deben realizar varias tareas:
Se añade una regla para hacerlo:
Cree una regla denominada port_a_rule. La primera parte de esta regla ajusta el espaciado del patrón del tornillo según la información almacenada en la tabla iPart de la pieza de unión.

i = iPart.FindRow("port_a_union", "port_size", "=", port_a_size)
port_a_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw")
port_a_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw")La siguiente pieza de la regla selecciona la correspondiente fila de iPart dentro de la pieza del tornillo según el tamaño de puerto seleccionado.

If port_a_size = .50 Then
iPart.ChangeRow("port_a_union_screw", "Screw-01")
ElseIf port_a_size = 0.75 Then
iPart.ChangeRow("port_a_union_screw", "Screw-02")
ElseIf port_a_size = 1.00 Then
iPart.ChangeRow("port_a_union_screw", "Screw-02")
ElseIf port_a_size = 1.25 Then
iPart.ChangeRow("port_a_union_screw", "Screw-03")
ElseIf port_a_size = 1.50 Then
iPart.ChangeRow("port_a_union_screw", "Screw-04")
ElseIf port_a_size = 2.00 Then
iPart.ChangeRow("port_a_union_screw", "Screw-04")
ElseIf port_a_size = 2.50 Then
iPart.ChangeRow("port_a_union_screw", "Screw-05")
ElseIf port_a_size = 3.00 Then
iPart.ChangeRow("port_a_union_screw", "Screw-06")
End If
port_a_union_part_number = iProperties.Value("port_a_union", "Project", "Part Number")Port B es diferente de Port A y Port C, ya que no existe en un bloque múltiple con estilo de codo. Si el bloque múltiple tiene un estilo de codo, debe desactivarse la cubierta de unión y los tornillos de unión que se utilizan para este puerto. También debe desactivarse las restricciones de coincidencia asociadas con la cubierta de unión.
Debido al hecho de desactivar componentes, establecemos un nivel de detalle antes de escribir la regla. Las reglas que afectan a elementos relacionados con el nivel de detalle de un ensamblaje precisan que se defina y guarde un nivel de detalle personalizado antes de escribir las reglas. Si el nivel de detalle personalizado no está definido, iLogic genera un mensaje de error.
Definición de un nivel de detalle
Ya se puede escribir la regla.
Cree una regla denominada port_b_rule. 
If block = "elbow" Then isTee = False ElseisTee = True End If
Usaremos esta variable posteriormente para definir otros parámetros.

Constraint.IsActive("port_b_cap_center") = isTee
Constraint.IsActive("port_b_cap_hole") = isTee
Constraint.IsActive("port_b_cap_face") = isTee
Constraint.IsActive("port_b_cap_screw") = isTeeTenga en cuenta que es posible utilizar la variable isTee para activar o desactivar estas restricciones según el valor del parámetro block.

Component.IsActive("port_b_union") = isTee
Component.IsActive("port_b_screw_pattern") = isTeeEstas líneas utilizan la variable isTee. Cuando el patrón de tornillo está desactivado, el componente de tornillo también se desactiva.

if isTee Then
i = iPart.FindRow("port_b_union", "port_size", "=", port_b_size)
port_b_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw")
port_b_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw")
port_b_union_part_number = iProperties.Value("port_b_union", "Project", "Part Number")
End IfTodo este bloque dentro se debe incluir dentro de una sentencia de If isTee, con el fin de que estas líneas se procesen únicamente en el caso de un bloque múltiple con estilo en T. La sentencia If isTee Then es equivalente a If isTee = True Then, pero proporciona un formato de expresión más conciso.
En primer lugar, se elige la fila pertinente en la tabla de iPart de la pieza de unión, correspondiente al valor del parámetro port_b_size; a continuación, se extraen los valores para utilizar los desfases de patrón x e y. Después, se extrae el número de pieza de unión y su valor se almacena en otro parámetro para usarse como referencia posteriormente.

If port_b_size = .50 then
iPart.ChangeRow("port_b_union_screw", "Screw-01")
elseif port_b_size = .75 then
iPart.ChangeRow("port_b_union_screw", "Screw-02")
elseif port_b_size = 1.00 then
iPart.ChangeRow("port_b_union_screw", "Screw-02")
elseif port_b_size = 1.25 then
iPart.ChangeRow("port_b_union_screw", "Screw-03")
elseif port_b_size = 1.50 then
iPart.ChangeRow("port_b_union_screw", "Screw-04")
elseif port_b_size = 2.00 then
iPart.ChangeRow("port_b_union_screw", "Screw-04")
elseif port_b_size = 2.50 then
iPart.ChangeRow("port_b_union_screw", "Screw-05")
elseif port_b_size = 3.00 then
iPart.ChangeRow("port_b_union_screw", "Screw-06")
End IfLa regla para Port C es casi la misma que para Port A, con una excepción: todo lo que hace referencia a Port A debe hacer referencia a Port C en su lugar.
Abra el Navegador de reglas.
Añada una nueva regla llamada port_c_rule. 
i = iPart.FindRow("port_c_union", "port_size", "=", port_c_size)
port_c_y_dist_between_screws = iPart.CurrentRowValue("y_dist_betwn_screw")
port_c_x_dist_between_screws = iPart.CurrentRowValue("x_dist_betwn_screw")
If port_c_size = .50 then
iPart.ChangeRow("port_c_union_screw", "Screw-01")
elseif port_c_size = .75 then
iPart.ChangeRow("port_c_union_screw", "Screw-02")
elseif port_c_size = 1.00 then
iPart.ChangeRow("port_c_union_screw", "Screw-02")
elseif port_c_size = 1.25 then
iPart.ChangeRow("port_c_union_screw", "Screw-03")
elseif port_c_size = 1.50 then
iPart.ChangeRow("port_c_union_screw", "Screw-04")
elseif port_c_size = 2.00 then
iPart.ChangeRow("port_c_union_screw" "Screw-04")
elseif port_c_size = 2.50 then
iPart.ChangeRow("port_c_union_screw", "Screw-05")
elseif port_c_size = 3.00 then
iPart.ChangeRow("port_c_union_screw", "Screw-06")
End If
port_c_union_part_number = iProperties.Value("port_c_union", "Project", "Part Number")