PLMXML Support

PLMXML Engine example

Question: What is procrastination for software developers that do geometry processing? Answer: Writing importers apparently … I had some spare time and didn’t want to tackle the next big feature so I implemented yet another format: PLMXML.


PLMXML is an XML-based assembly description which usually is used in conjunction with JT files. It does not contain any geometry but just a collection of nodes, transformations, PLM meta data and references to the parts. As such it was fairly easy to parse it except for the weird way transformations are stored.

{ R00 R10 R20 P0 R01 R11 R21 P1 R02 R12 R22 P2 T0 T1 T2 S }

I’ve found some clues on the internet that it’s apparently called “eXT format” but was unable to find any precise definition. What I found out is that its shape is like this:

R00 R10 R20 P0
R01 R11 R21 P1
R02 R12 R22 P2
T0  T1  T2  S

It might look like a column-major matrix, but you should rather think of it as four different pieces of information rather than one matrix. R is a 3×3 rotation matrix but it is transposed, P is called perspective values (and apparently can be ignored), T is the translation and S is a uniform scaling factor (some place mentioned it to be the inverse of the scaling). However, in PLMXML P seems to be zero and S 1 so it basically boils down to being a transposed 4×4 matrix.

Got to check it with more data sets but so far seems to work great. The bottleneck now becomes the JT importer which unfortunately is a bit limited right now with the multiple file format versions (8.2, 9.0-9.5, 10.0) that exist nowadays, the multiple geometry representations (JT-Breps, XT-Breps, ULP, …). But that is a task for another day…


  1. Alexey

    Hi, nice explanation, but there is a question, in a plmxml file Transform represent as
    1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 , could you explain where is R,T,P,S of matrix ?

    • alex

      Sure! I’ve extended the description a bit, does that help? As I wrote, this was basically derived by piecing together some hints found here and there and I cannot guarantee it’s correct (especially the part that P can be ignored). But it did seem to produce correct results for all data sets I have seen.

  2. Darren Bond

    Hi Alex,
    I’ve written some software to create a plmxml file for viewing JTs in JT2Go and this explanation of the transformation matrix has been invaluable, thanks.

    However, I’ve found that the ‘transform’ element in the plmxml file doesn’t actually work when any positioning values are used in the matrix. You can find a more detailed description of the issue I’m facing in my post here:

    Have you had any experience of this? I would love to know the fix if you have as I’ve hit a brick wall now!

    Thanks in advance for any help you can give me.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>