Our 3D CAD supplier models have been moved to 3Dfindit.com, the new visual search engine for 3D CAD, CAE & BIM models.
You can log in there with your existing account of this site.
The content remains free of charge.
Note | |
---|---|
An example on
attribute algorithms can be found in the "Training" catalog ( |
Dependencies between variables are expressed using so-called attribute algorithms. In the example (see following figure), you can see that the variable NENN is represented by the product of variables H, B and L.
NENN = '$H.x$B.x$L.'
Under Name, enter the variable name NENN.
Under Save location, choose the option Only in table or In geometry and table.
(Using Save location "Only in geometry", no attribute algorithm can be used.)
Under Equation, open the enlarged input field with a click on the browse button .
--> The variable name entered under Name is entered into the field as first part of the expression of the attribute algorithm.
Enter the Assignment, which shall specify the Variable NENN.
--> As NENN is a textual variable, the expression is NENN = '$H.x$B.x$L.'.
-> The variable NENN is carried over into the listing of all project variables.
-> The variable NENN is marked with the respective icon for Attribute algorithm.
(see Fig. „"Attribute algorithm" dialog box“)
This button transfers the variable displayed under Name into the input field.
An algorithm constructed through an IF condition can look as follows:
IF ( ) THEN D3 = ELSE D3 = ENDIF
Enter your condition (e.g. "L1.EQ.10") between the brackets ().
Behind THEN D3 =, enter the value which D3 has to accept if the condition is met.
Behind ELSE D3 =, enter the value which D3 has to accept if the condition is not met. End the condition with ENDIF.
IF (L1.EQ.10) THEN D3 = 20 ELSE D3 = 30 ENDIF
If distinction of cases shall be made, use ELSEIF statements.
IF (L1.EQ.10) THEN D3 = 10 ELSEIF (L1.EQ.20) THEN D3 = 20 ELSEIF (L1.EQ.30) THEN D3 = 30 ELSE D3 = 40 ENDIF
Several IF conditions set one after another within one Attribute algorithm variable.
If you wanted to solve the same with one single IF condition with ELSEIF cases, this would require much more ELSEIFs.
Structure of conditions with the help of an example:
IF ( KG.EQ.'-')THEN NB1 = '$TNR. $TYP.-$KDM.-$HUB.-ZR-$WZ.' ELSE NB1 = '$TNR. $TYP.-$KDM.-$HUB.-ZR-$WZ.-$KG.' ENDIF IF ( ZAK.EQ.'-')THEN NB1 = '$NB1.' ELSE NB1 = '$NB1.-$ZAK.' ENDIF IF( YSR.EQ.'1'.AND.SIE.EQ.'-')THEN NB1 = '$NB1. ZUB-C' ELSEIF( YSR.EQ.'1'.AND.SIE.EQ.'1')THEN NB1 = '$NB1. ZUB-CL' ELSEIF( YSR.EQ.'2'.AND.SIE.EQ.'-')THEN NB1 = '$NB1. ZUB-$YSR.C' ELSEIF( YSR.EQ.'2'.AND.SIE.EQ.'1')THEN NB1 = '$NB1. ZUB-$YSR.CL' ELSEIF( YSR.EQ.'-'.AND.SIE.EQ.'1')THEN NB1 = '$NB1. ZUB-L' ELSE NB1 = '$NB1.' ENDIF
|
In first IF NB1 is initialized.
In second IF something is attached to NB1.
In third IF something is attached again.
|
The first IF condition has to contain an ELSE alternative, in order for the variable to be initialized. All other IF conditions may contain ELSE alternatives optionally.
IF (OPZ1.EQ.'-' )THEN LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1.' ELSE LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1./$OPZ1.' ENDIF IF (OPZ2.EQ.'-' )THEN LINAALG = '$LINAALG./' ELSE LINAALG = '$LINAALG./$OPZ2.' ENDIF...
IF (OPZ1.NE.'-' )THEN LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1./$OPZ1.' ENDIF IF (OPZ2.NE.'-' )THEN LINAALG = '$LINAALG./$OPZ2.' ENDIF...
Also correct: If there is a simple statement at the first position, an "ELSE" can be omitted at all, since the statement will always initialize the variable.
CNSTYPECODE = '$MODEL.$W.-$ST.-$THETA.-$TYPE.-$SPRING.' IF(K.EQ.1)THEN CNSTYPECODE = '$CNSTYPECODE.-K' ENDIF IF(FK.EQ.1)THEN CNSTYPECODE = '$CNSTYPECODE.-FK' ENDIF IF(N.EQ.1)THEN CNSTYPECODE = '$CNSTYPECODE.-N' ENDIF
The first condition, which is always calculated, has to prevent an endless loop. Following "if...endif" always call the first condition and attach an additional value.
So in the first condition do not use the variable of assignment for the ELSE case.
IF (OPZ1.EQ.'-' )THEN LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1.' ELSE LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1./$OPZ1.' ENDIF IF (OPZ2.EQ.'-' )THEN LINAALG = '$LINAALG./' ELSE LINAALG = '$LINAALG./$OPZ2.' ENDIF...
Incorrect: (difference in red)
IF (OPZ1.EQ.'-' )THEN
LINAALG = '$IDNR./$CX1./$VL./$MOTX./$OM1./$COEL./$DA./$AP1./$AA1.'
ELSE
LINAALG = '$LINAALG./$OPZ1.'
ENDIF
IF (OPZ2.EQ.'-' )THEN
LINAALG = '$LINAALG./'
ELSE
LINAALG = '$LINAALG./$OPZ2.'
ENDIF...
Make sure that attribute algorithms do not contain recursions.
For a quick testing call the function Show variable dependencies in the table docking window. Unilateral dependency is Ok. This is signalized by a single arrow. Recursive dependencies are errors. These are signalized by a left right arrow. Errors are displayed both in the message docking window and later when testing in the dialog box QA check.
The following exemplary figure shows simple dependency between A and B.
The following exemplary figure shows recursive dependency. The Variable Manager shows A=B and B=A. In the dialog box Variable dependencies you can see a left right arrow between A and B. In the 3D History a red cross is shown at affected elements, the dialog box Notifications reflects the error and the 3D view does not show a model.
In the dialog box QA check an error message appears.