How to get correct Joint's ObjectState under with Transaction(True)
With below code, it shows 'NoState' for Joint ObjectState. It's incorrect status. But out of Transaction, it shows the correct status UnderDefined.
My question is how to get the correct ObjectState within Transaction(True):, so that it can go PromoteToRemotePoint successfully.
Because in my real case, there may be more than 100 Joints that need to do PromoteToRemotePoint, so think to do it with Transaction for speed purpose.
with Transaction(True): CreateJoint=ExtAPI.DataModel.Project.Model.Connections.AddJoint() CreateJoint.ConnectionType=JointScopingType.BodyToBody CreateJoint.Type=JointType.Fixed print 'in Transaction: '+str(CreateJoint.ObjectState) if CreateJoint.ObjectState==ObjectState.UnderDefined: CreateJoint.PromoteToRemotePoint() print 'out of Transaction: '+str(CreateJoint.ObjectState) Output: in Transaction: NoState out of Transaction: UnderDefined
Answers
-
Hi @Louis , when using
with Transaction()
the Mechanical UI is not updated. Therefore the status of the joint cannot be updated either. I would recommend splitting that loop in two parts :- one loop to create the joints, in the
with Transaction()
method - refresh the Mechanical tree to get the correct status (
Tree.Refresh()
) - create a list of the joints in undefined status, and loop on the objects in that loop to promote them to remote points
0 - one loop to create the joints, in the
-
Pernelle,
Thank you for providing suggestion.
step1. one loop to create the joints, in the
with Transaction()
methodstep2. refresh the Mechanical tree to get the correct status (
Tree.Refresh()
)step3. create a list of the joints in undefined status, and loop on the objects in that loop to promote them to remote points
Okay, step1 and step2 they work.
But in step3 it seems not work for promote them to remote points while using with Transaction().
It works while no Transaction.
Hope to get a way working with Transaction() for speed purpose.
0 -
@Louis , for step 3 you will need to have the UI refresh, hence it will not run in a
with Transaction
method. I'm afraid there is no workaround around that one. But the list will be smaller than the initial one as we restrict the list to only undefined joints.0