Hallo NX'ler,
ich halte beide Szenarien für möglich, wobei das Open NX (z.B. Visual Basic Journal) sicherlich die flexibelste und leistungsfähigste Umgebung scheint. Trotzdem würde ich in Deinem Falle zu einer KF Regel raten, das diese sehr einfach bei Geometrieänderungen mit abgefragt werden, während ein Journal nur nach einem gesonderten Journal Aufruf Ändderungen vornimmt. Sicherlich kann man auch in einem Journal einen Ereignis / Event Handler einbauen. Dass halte ich aber in Deinem Fall für "Mit Kanonen auf Spatzen schießen".
Siehe mal in der NX Automation Hilfe unter KF. Dort gitb es ein kleine "Door" / "Room" Tutorial als Einstieg in KF. In jdem Fall, ob KF oder Journal ist grundlegende Porgrammierkenne notwendig. Wobei der Anspruch im VB sicherlich viel höher ist. Das KF scheint zwar im ersten Eindruck etwas hölzern, ist aber für komplexere geometrische Abhängigkeiten, die nicht mehr mit dem Expression Editor erzeugt werden können, genau die richtige Lösung.
In deinem Fall musst Du das Objekt in die KF Umgebung "adoptieren". Zusätzlich solltest Du nun ein "Child" vom Typ "NX_expression" einfügen, damit Deine KF Umgebung eine einfachn Parameter für die "Expressions" Umgebung erzeugen kann. Nun musst du die verschiedenen KF Attribute der beiden KF Objekte in Bezieheungen bringen (Nutze einfach die rechte Mausfunktion "Referenz" ím KF Navigator). Dort kann mna auch sehr einfache "Wenn... Dann..." Bedingungen einfügen. Beachte, dass Du häufig für geometrische Änderungen aber auch "Point" und "Vector" KD Typen brauchst.
Als Beispiel mal eine KF Klasse, mit der man einen Block erzeugen kann, dessen Eckdaten dann für eine OpenFOAM Beschreibung angezeigt werden können:
#! NX/KF 5.0
Defclass: GEA_OpenFOAM_Block (%ui_comp);
#+
This is use to create a block with definitions for OpenFOAM Blockmesh.
#-
# nx_application attributes
(String) application_name: "OpenFOAM Block";
(Boolean) use_slaves?: TRUE;
(Name) Apply_state: Edit;
(list) DialogItems:
{
block_center:,
XparametersGroup:,
YparametersGroup:,
ZparametersGroup:,
blockmesh_info:;
# trans:;
};
(string) Title: "Create OpenFOAM Block";
(string) cue: "Create a Block";
(child) block_center:
{
class, %ui_comp_point;
Sensitivity, true;
Point, point(0,0,0);
LabelString, "Block center";
GwifType, 0;
};
(child) XparametersGroup:
{
class, %ui_comp_group;
Title, "X Parameters";
Column, 1;
Members,
{
x_grid:,
x_pos:,
x_neg:
};
Group, true;
};
(child) YparametersGroup:
{
class, %ui_comp_group;
Title, "Y Parameters";
Column, 1;
Members,
{
y_grid:,
y_pos:,
y_neg:
};
Group, true;
};
(child) ZparametersGroup:
{
class, %ui_comp_group;
Title, "Z Parameters";
Column, 1;
Members,
{
z_grid:,
z_pos:,
z_neg:
};
Group, true;
};
(child) BlockMeshGroup:
{
class, %ui_comp_group;
Title, "Blockmesh";
Members,
{
blockmesh_string:;
};
Group, true
};
(child) x_grid:
{
class, %ui_comp_expression;
Title, "X Grid Size";
value, 5;
};
(child) x_pos:
{
class, %ui_comp_integer;
Title, "X Offset (+)";
value, 5;
};
(child) x_neg:
{
class, %ui_comp_integer;
Title, "X Offset (-)";
value, 5;
};
(child) y_grid:
{
class, %ui_comp_expression;
Title, "Y Grid Size";
value, 5;
};
(child) y_pos:
{
class, %ui_comp_integer;
Title, "Y Offset (+)";
value, 5;
};
(child) y_neg:
{
class, %ui_comp_integer;
Title, "Y Offset (-)";
value, 5;
};
(child) z_grid:
{
class, %ui_comp_expression;
Title, "Z Grid Size";
value, 5;
};
(child) z_pos:
{
class, %ui_comp_integer;
Title, "Z Offset (+)";
value, 5;
};
(child) z_neg:
{
class, %ui_comp_integer;
Title, "Z Offset (-)";
value, 5;
};
#(child) trans:
#{
# class, %ui_comp_integer;
# Title, "translucency";
# value, 20;
#};
(child) blockmesh_info:
{
class, %ui_comp_button;
Title, "OpenFOAM blockmesh description";
};
#(Method Integer) OnInitialize Instance $instance) @{
# if ($instance = trans: ) then @{
# #%ui_comp_setCacheValue(self:, Size:, uiSize:, Value);#
# ug_vd_si_set_translucency(body:, trans:value: );
# }
# #else if ($instance = uiLoc: ) then @{
# # %ui_comp_setCacheValue(self:, Loc:, uiLoc:, Point); }
# else doNothing;
# 0;
#};
#Update Mechanism for UI blocks (Action Listeners)
(Method uncached Integer) Update Instance $instance)
@{
if ($instance = blockmesh_info then
@{
ug_printvalues("This is the description of the block in the OpenFOAM" +"~n"+
"blockmesh format. Copy the segment below into the" +"~n"+
"related blockmesh dictionary file to the" +"~n"+
"constant\polymesh" +"~n"+
"sub folder of your OpenFOAM case directory" +"~n"+
"***************************************************" +"~n"+
"convertToMeters 1;" +"~n"+
"" +"~n"+
"vertices" +"~n"+
"(" +"~n"+
" (" + format("%8.3f",LocalX(BLOCK rigin * 0.001) +
" " + format("%8.3f",LocalY(BLOCK rigin * 0.001) +
" " + format("%8.3f",LocalZ(BLOCK rigin * 0.001) + ")" +"~n" +
" (" + format("%8.3f",LocalX(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , 0 , 0) ) * 0.001) +
" " + format("%8.3f",LocalY(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , 0 , 0) ) * 0.001) +
" " + format("%8.3f",LocalZ(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , 0 , 0) ) * 0.001) + ")" +"~n"+
" (" + format("%8.3f",LocalX(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , 0) ) * 0.001) +
" " + format("%8.3f",LocalY(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , 0) ) * 0.001) +
" " + format("%8.3f",LocalZ(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , 0) ) * 0.001) + ")" +"~n"+
" (" + format("%8.3f",LocalX(BLOCK rigin: + vector( 0 , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , 0) ) * 0.001) +
" " + format("%8.3f",LocalY(BLOCK rigin: + vector( 0 , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , 0) ) * 0.001) +
" " + format("%8.3f",LocalZ(BLOCK rigin: + vector( 0 , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , 0) ) * 0.001) + ")" +"~n" +
" (" + format("%8.3f",LocalX(BLOCK rigin: + vector( 0 , 0 , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) +
" " + format("%8.3f",LocalY(BLOCK rigin: + vector( 0 , 0 , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) +
" " + format("%8.3f",LocalZ(BLOCK rigin: + vector( 0 , 0 , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) + ")" +"~n"+
" (" + format("%8.3f",LocalX(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , 0 , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) +
" " + format("%8.3f",LocalY(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , 0 , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) +
" " + format("%8.3f",LocalZ(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , 0 , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) + ")" +"~n"+
" (" + format("%8.3f",LocalX(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) +
" " + format("%8.3f",LocalY(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) +
" " + format("%8.3f",LocalZ(BLOCK rigin: + vector( x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value: , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) + ")" +"~n"+
" (" + format("%8.3f",LocalX(BLOCK rigin: + vector( x_pos:value: * 0 , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) +
" " + format("%8.3f",LocalY(BLOCK rigin: + vector( x_pos:value: * 0 , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) +
" " + format("%8.3f",LocalZ(BLOCK rigin: + vector( x_pos:value: * 0 , y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value: , z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value: ) ) * 0.001) + ")" +"~n"+
");" +"~n"+
"" +"~n"+
"blocks" +"~n"+
"(" +"~n"+
" hex ( 0 1 2 3 4 5 6 7) (" +
format("%d", x_pos:value: + x_neg:value +
" " + format("%d", y_pos:value: + y_neg:value +
" " + format("%d", z_pos:value: + z_neg:value +
") simpleGrading (1 1 1)" +"~n"+
");" +"~n"+
"***************************************************" +"~n"
);
}
#else if ($instance = trans then
#@{
## ug_printvalues("This is the description of the block in the OpenFOAM");
# ug_vd_si_set_translucency(block:, trans:value: );
#}
else doNothing;
0;
};
(Child) BLOCK:
{
Class, nx_block;
Length, x_pos:value: * x_grid:value: + x_neg:value: * x_grid:value:;
Width, y_pos:value: * y_grid:value: + y_neg:value: * y_grid:value:;
Height, z_pos:value: * z_grid:value: + z_neg:value: * z_grid:value:;
origin, block_center oint: + vector(x_neg:value: * x_grid:value: * (-1), y_neg:value: * y_grid:value: * (-1), z_neg:value: * z_grid:value: * (-1));
orientation, {x_axis,Vector(1,0,0),y_axis,Vector(0,1,0)};
Boolean_Type, create;
Target, nx_null();
Suppressed, FALSE;
Name, "OpenFOAM Block";
};
(Child) body:
{
Class, ug_body;
Feature, { block: };
Layer, 1;
Color, ug_askClosestColor(green);
};
Gruß
Matthias
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP