Home › Forums › Problems and solutions in GDL › 3D modelling › Solid ops and subroutines
- This topic has 3 replies, 3 voices, and was last updated 5 years, 10 months ago by
Nader Belal.
-
AuthorPosts
-
-
December 20, 2017 at 11:27 #3709
James Murray
ParticipantI’m getting inconsistent results depending on whether ADDGROUP is used in a subroutine or in the main script. Example:
Version 1, add groups in main script, works:
GROUP ‘things’ etc ENDGROUP GOSUB 100 foobar_ = ADDGROUP(‘foo’, ’bar’) !! NB, in main final_ = SUBGROUP(foobar_, ‘things’) !! this works PLACEGROUP final_ END 100: GROUP ‘foo’ stuff ENDGROUP GROUP ‘bar’ more stuff ENDGROUP RETURN
Version 2, add groups in subroutine, doesn’t work:
GROUP ‘things’ etc ENDGROUP GOSUB 100 final_ = SUBGROUP(foobar_, ‘things’) !! this gives error that foobar_ isn’t group name PLACEGROUP final_ END 100: GROUP ‘foo’ stuff ENDGROUP GROUP ‘bar’ more stuff ENDGROUP foobar_ = ADDGROUP(‘foo’, ’bar’) !! NB, in subroutine RETURN
James M
-
December 20, 2017 at 12:41 #3710
James Murray
ParticipantWow that formatting looks great. Never mind. If you want to use an ADDGROUP result in a subsequent SUBGROUP operation, you can’t do the ADDGROUP in a subroutine. It would be nice to know why.
James M
-
December 21, 2017 at 08:53 #3711
Péter Baksa
KeymasterHi James,
the GDL interpreter runs some checks before executing the script. This check is done line-by line, not in execution order. In version 2 when it first comes to foobar_, that is an uninitialized variable, but it would expect string or group type. Sadly we can’t easily initialize a variable to be group type.
A solution:
– move the subgroup and placegroup commands to another subroutine, placed after subroutine 100
Less elegant solution if the above doesn’t work for your code structure:
– initialize group type variable: create an empty group and add it to itself, creating a group type variablegroup “dummy”
endgroup
foobar_ = ADDGROUP(“dummy”, “dummy”)
killgroup “dummy”GOSUB 100
Péter Baksa
Library Platform, Software Engineer
GRAPHISOFT SE -
June 17, 2019 at 15:31 #4782
Nader Belal
ParticipantMy 2 cents,
This group structure is neither nice, nor clean, and it may cause a lot of confusion when the times arrives for code maintenance, all because the followed structure.
My solution
gosub 100 bla ... bla ... bla end 100: GROUP ‘things’ etc ENDGROUP if something then GROUP ‘foo’ etc ENDGROUP GROUP ‘bar’ etc ENDGROUP end ! -- Group placements --------------- if nothing then placegroup ‘things’ killgroup ‘things’ end if something then placegroup subgroup (addgroup (‘foo’, ’bar’), ‘things’) killgroup ‘things’ killgroup ‘foo’ killgroup ‘bar’ end return
-
-
AuthorPosts
- The forum ‘3D modelling’ is closed to new topics and replies.