cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Community Tip - New to the community? Learn how to post a question and get help from PTC and industry experts! X

Vb api: how to modify points coordinates?

ptc-2232151
1-Newbie

Vb api: how to modify points coordinates?

Hi,

 

I'm using vba to modify points in a .prt file.

Up to now I can read their coordinates, but I cannot change them. I thought the lines in red would do the job, but VBA seems to not recognize this command...

 

Sub test()

 

Dim asynconn As New pfcls.CCpfcAsyncConnection

Dim conn As pfcls.IpfcAsyncConnection

Dim session As pfcls.IpfcBaseSession

Dim i As Integer

Dim model As IpfcModelItemOwner

Dim points As IpfcModelItems

Dim lepoint As IpfcPoint

Dim pointPosition As IpfcPoint3D

Dim PtName As String

 

Set conn = asynconn.Connect("", "", ".", 5)

Set session = conn.session

Set model = session.CurrentModel()

Set points = model.ListItems(EpfcModelItemType.EpfcITEM_POINT)

Set piece = model

 

For i = 0 To points.Count - 1

PtName = points(i).GetName

Cells(i + 1, 1) = PtName

Set lepoint = points.Item(i)

Set pointPosition = lepoint.point

points.Item(i).SetName ("toto_" & i)

pointPosition.Set(0, Xvalue)

pointPosition.Set(1, Yvalue)

pointPosition.Set(2, Zvalue)

Next i

 

For i = 0 To points.Count - 1

PtName = points(i).GetName

Cells(i + 1, 1) = PtName

Set lepoint = points.Item(i)

Set pointPosition = lepoint.point

Cells(i + 1, 2) = pointPosition.Item(0)

Cells(i + 1, 3) = pointPosition.Item(1)

Cells(i + 1, 4) = pointPosition.Item(2)

Next i

 

conn.Disconnect (2)

 

End Sub

 

 

Anyone with an idea on the subject?

 

Thanks

 

Ce message a été modifié par: CHARLES CHARBIT

2 REPLIES 2

Hi Charles,

don't know if you still need a solution.

But for all others who came here to look for a solution, here is mine:

Your attempt to get the coordinates of a point is absolutely correct, but you cannot set the new coordinates the same way because it depends on the references, especially the dimensions.

For excample:

Set a point onto an axis and intersecting with a plane

==> this point has coordinates xyz in relation to the main coordinate system, but there are no changeable dimensions available.

Set a point onto a plane and referencing two other planes having an offset to them

==> this point also has xyz coordinates, but there are only two dimensions for it.

==> normally this dimensions value is not one of the points coordinates, they are what they are referenced for

Only points created as points by coordinates have three dimensions corresponding to the coordinates.

I once did a programm for updating point clouds in Pro|E

In my excample, the user selects the feature/Modelitem and then the program updates its coordinates

For this it gets the array of dimensions of the feature and changes them.

Truly it's not very inteligent because it was only designed to update Point Clouds based on the main coordinate system. I don't have any checks how many dimensions belong to a single point... i knew it will be three.

Here some Code extracts:


Dim
model As IpfcModelItemOwner

model = Session.CurrentModel

Dim pobj As IpfcModelItem

Dim sel As IpfcSelections

Dim selopt As IpfcSelectionOptions

selopt = (New CCpfcSelectionOptions).Create("feature")

selopt.MaxNumSels = 1

sel = Session.Select(selopt, Nothing)

pobj = sel.Item(0).SelItem

Dim dimensions As IpfcModelItems

dimensions = pobj.ListSubItems(EpfcModelItemType.EpfcITEM_DIMENSION)

For pointnr As Long = 0 To dimensions.Count - 1 Step 3

For xyz As Integer = 0 To 2

Dim dimension As IpfcBaseDimension

dimension = dimensions.Item(pointnr + xyz)

dimension.DimValue = NEWVALUE

Next

Next

Hi Martin,

     With the above mentioned program is it possible to create a new coordinate system, with reference to the default CSYS.

With Regards

Aghil M

Top Tags