[LDPartEditor] First Alpha Version News

[LDPartEditor] First Alpha Version News
I created a new topic since the old one was going to be more and more confusing and takes some time to load when displaying all messages at the same time.
Nevertheless, I am still targeting to release the version 0.8.0 Beta on Monday, 24 December 2014 edit: Tuesday, 7th April 2015
...and I just implemented a shader logic for chrome parts ;o)
[Image: ChromeShader2.png]
[LDPartEditor] Second Release Date Delay
Philippe Hurbain Wrote:Thanks, Chris! First Christmas present... Now I'm waiting for this one Wink
Michael Heidemann Wrote:Do you still believe this is true? Wink

Well, I have to admit that this Christmas must last until eastern, if it should be the second present Wink
I wrote a blog entry on my sourceforge project page: "Due to an unexcpected burn-out, I am not able to release LDPartEditor 0.8.0 Beta at 2014-12-24."
Last month, I wrote in total only 100-200 lines of code. I was not able to concentrate my efforts on the project since there was much more other stuff to do.

However, I would like to finish LDPartEditor. My project schedule needs a re-design. I will keep you informed.
[LDPartEditor] Scaling + Flat Subfiles

As mentioned here, LDPartEditor gives you a warning, if a flat subfile is scaled in the flat direction and can fix this too.
Addtionally, I implemented a mechanism, which prevents scaling in flat directions within the 3D editor of LPE.

With the manipulator, it is impossible to scale the subfile in the Y direction:
[LDPartEditor] Rectifier
My Rectifier implementation is now complete Smile
I translated Philo's C++ code into Java and did some modifications.
The main difference is, that you can specify the scope (file or selection) and the runtime is linear instead of quadratic.
Theoretically, it will perform faster.
Re: [LDPartEditor] Rectifier
Yeah, this code is grossly inefficient (but I think that the worse I did in that respect is selector...). That said with most practical cases it takes a very small time so your code should be blazingly fast Wink
[LDPartEditor] Isecalc
My Isecalc implementation is now complete Smile
I translated Philo's C++ code into Java and did some modifications.
The main difference is, that you can specify the scope (file or selection) and you do not need to inline anything.
"Isecalc" does also collinear line condensation.

PS: The next step is to implement SlicerPro Wink
[LDPartEditor] SlicerPro II - Slicing in any direction
Well, after about 20 commits to my sourcecode repository I am really proud to say that a Java version of SlicerPro is now integrated into LDPartEditor.

The main difference of this tool is really interesting: It works for every possible direction.
I had to do some tricks to make sure that the precision is perfect, but however, it works now.

Basically, you will have to do the following steps to use this tool:

  1. (optional) Hide everything which is not the target surface of the projection (a surface which is not hit by the projection will not be modified, surfaces from subfiles will be ignored unless you inline them)
  2. Adjust the camera from one of the 3D views to match the direction in which you want to project
  3. Select your pattern
  4. Re-select the 3D view for the projection (while holding CTRL to not loose your selection)
  5. Open the SlicerPro II dialog
  6. Hit the OK button

This was a screenshot from a first implementation. The triangles were not condensed into quads.
Re: [LDPartEditor] SlicerPro II - Slicing in any direction
Great! the "any direction projection" is indeed useful, I often pre-rotate former and pattern before using SP...
[LDPartEditor] Intersector
An improved version of the Intersector tool is now integrated into LDPartEditor.

While the original Intersector tool outputs sometimes a warning like "*** problem during retriangulation ***", my Intersector implementation does not have this behaviour. Additionally, I changed the algorithm for the detection if a surface is inside or outside the model. The algorithm uses now a raytracing approach to detect the surface colour. The "LPE Intersector" can also be configured to keep the original colours. It outputs lesser triangles than Philo's implementation, does not have the option for "triangle condensation" and runs on all of your CPU cores to maximise the performance.

Basically, you will have to do the following steps to use this tool:

  1. (optional) Hide everything which do not intersect with the target surface (a surface which do not intersect will not be modified)
  2. Select your target surface and the target lines (linetypes 2 to 5)
  3. Open the Intersector dialog
  4. Decide, if you want to change the colours according the location ("inside" [colour 11], "outside" [colour 14], "undefined" [colour 7]) or to keep the original colour
  5. Hit the OK button

Here is a screenshot, which demonstrates two different results (the grey quad was selected, then "Intersector" was run):
Re: [LDPartEditor] Intersector
Eager to test this Wink
Re: [LDPartEditor] Intersector
Since it is promised to come out at Eastern I expect at least ONE Easter egg!

LEGO ergo sum
[LDPartEditor] Intersector + Lines
Here is an example file (with intersecting lines and condlines) which was generated by Intersector.
I selected the following lines (in the 3D editor)
2 12 -10 0 10 10 0 -10
5 14 -10 0 -10 10 0 10 8.22 -6.11 8.06 10.3 -4.4 11.45
4 14 10 0 -10 -10 0 -10 -10 0 10 10 0 10
to get the result.

Attached Files
.dat   original.dat (Size: 277 bytes / Downloads: 0)
.dat   result.dat (Size: 1.96 KB / Downloads: 0)
Re: [LDPartEditor] Intersector + Lines
Excellent retriangulation!
Re: [LDPartEditor] Intersector + Lines
...and how does it behave with this more complex case?

Attached Files
.dat   original.dat (Size: 822 bytes / Downloads: 0)
Re: [LDPartEditor] Intersector + Lines
Challenge accepted Big Grin

...here are the results.

Attached Files
.dat   result.dat (Size: 10.78 KB / Downloads: 0)
Re: [LDPartEditor] Intersector + Lines
Not too bad Smile Now it would be great to be able to remove extraneous vertices, but...
[LDPartEditor] Deep Inlining + "~Moved to"
Today I implemented two little features:
  • Deep Inlining (with BFC conformity)
  • "~Moved to" error correction: The texteditor displays now an error (in the list of errors, no pop-up!) when a "~Moved to" reference was used. Additionally, there is a possibility that the user can select and auto-fix this error, even if the "~Moved to"-file has a different origin or redirects to another "~Moved to".

    However, if the reference is not direct (means that a normal subfile from your part uses a "~Moved to") you will still get a message that you should take a look into the subfile, because the subfile refers to a "~Moved to")


Imagine a part called 123456789.dat

0 Foo
0 Name: 123456789.dat
0 Author: Nils Schmidt [BlackBrick89]
0 !LDRAW_ORG Unofficial_Part
0 !LICENSE Redistributable under CCAL version 2.0 : see CAreadme.txt


1 16 0 0 0 1 0 0 0 1 0 0 0 1 s\123456789s01.dat

When you take a look into the sourcecode with LDPartEditor, you will get a "~Moved to"-warning , because s\123456789s01.dat looks like this:

0 Baz
0 Name: s\123456789s01.dat
0 Author: Nils Schmidt [BlackBrick89]
0 !LDRAW_ORG Unofficial_Subpart
0 !LICENSE Redistributable under CCAL version 2.0 : see CAreadme.txt


1 0x2FF0000 0 0 0 1 0 0 0 1 0 0 0 1 4518.dat

and refers to a red 4518.dat, which was ~Moved to 4518a.dat.

The integrated quick-fix feature can now transform

1 0x2FF0000 0 0 0 1 0 0 0 1 0 0 0 1 4518.dat


1 0x2FF0000 0 4 20 1 0 0 0 1 0 0 0 1 4518a.dat
[LDPartEditor] Feature Backlog for 0.8.0 (Complete)
Well, this list seems to be a very big spoiler, but anyway...
I just wanted to tell you what is "next-on-my-list" until the 0.8.0 beta release is finally there.
A lot of the tasks require one day or less to implement, so eastern should be a realistic release date.

I already did the really complex things like Realtime Parsing, Multiple files opened/viewed at the same time, CSG, BFC, Arbitrary Precision, Multithreading / Parallelisation, TEXMAP, SlicerPro, Material Shaders for LDConfig, Intersector, ...and many more.

I will "start" with (1) and end with (34).
  1. Text editor: Search and replace
  2. Text editor: Sort selection
  3. Text editor: Change colour
  4. Text editor / 3D editor: Split quad into triangles
  5. Lines2Pattern-Tool (will be very cool!)
  6. Updater-Application
  7. PathTruder
  8. Unrectifier
  9. SymSplitter
  10. Unificator
  11. Flipper
  12. Select same colour
  13. Select connected
  14. Select touching
  15. Select faces with the same orientation
  16. Create file
  17. Save project
  18. Save file
  19. Open project
  20. Open file
  21. Subdivision
  22. Split
  23. Merge (to center / last selected / nearest line, face, vertex, primitive)
  24. Mirror
  25. Set x/y/z for a group of vertices (e.g. X=0)
  26. Transformation by value
  27. • Translate x/y/z
  28. • Rotate x/y/z (in degrees), with pivot point
  29. • Scale x/y/z, with pivot point
  30. Primitive gallery (with drag and drop)
  31. Undo + Redo
  32. Full LDConfig support
---For releases beyond 0.8.0 beta---
  1. User Manual (will be created as soon as possible)
  2. Import files from parts tracker
  3. Feature to send your log files to me, so that I can fix unknown bugs.
  4. Option menu for custom settings, colours and shortkeys [~0.9.0 beta, high priority]
  5. Millimeters and Inches + LDU [~0.9.5 beta, low priority]
  6. More professional file header validation (like DatHeader). At the moment the validation is not bad, but very basic. [low priority]
  7. Template support [low priority]
  8. "2D to 3D" projection feature (as you know it from LDPatternCreator) [low priority, since we have already SlicerPro2+Lines2Pattern]
  9. GUI Interface: Translation to other languages (I did already preparations for this, 575 little tasks remain before its done) [~1.0.0, high priority]
  10. Plug-in support with a nice interface (I did already preparations for this task)
  11. Webcam (+ Head-Mounted Display) Support to do the reverse engineering in VR [~1.1.0, high priority]
  12. Tools for measurements in 2D and 3D space.
  13. Upload files to the parts tracker
  14. And more continuous improvements...

..and in the future far from this day: Switching to Java 8 and transformation from SWT to JavaFX to overcome any platform restrictions.
[LDPartEditor] Lines2Pattern (or "Who needs LDPatternCreator?")
Today, I reached another milestone Smile
My "Lines2Pattern" tool is complete... So what does it?
Well, it takes a set of lines and transforms it into a pattern, by triangulation.
It triangulates the surface between lines which are coloured with the line colour 24.
And with some magic, it detects different coloured lines (as a surface colour indicator) and can "guess" what colour the triangle will finally have.

This will make the pattern creation a lot easier for you Big Grin


edit: I changed the wording a little bit. Now it says "4. Make sure that colour indicating lines with other colours are placed, too!", to be less restrictive.
edit2: The second step was rewritten to "2. Make sure that all lines are on the same plane."

Attached Files
.dat   original.dat (Size: 2.04 KB / Downloads: 0)
.dat   result.dat (Size: 5.63 KB / Downloads: 0)
Re: [LDPartEditor] Lines2Pattern (or "Who needs LDPatternCreator?")
Wow. Wow, wow!!!
No more painful triangulation Wink
[LDPartEditor] Code Repository is now hosted on GitHub.com
Due to some technical problems with sourceforge.net, I had to migrate my project to github.
Nevertheless, I am very happy with my decision Smile

You'll find the new repository here https://github.com/nilsschmidt1337/ldparteditor.

edit: I created a little homepage, too: LDPartEditor on GitHub
[LDPartEditor] PathTruder
My PathTruder implementation is now complete Smile
I translated Philo's C++ code into Java and did some modifications.

LPE's PathTruder supports all features of the original program.

Re: [LDPartEditor] PathTruder
Nice if you're program is cross platform (which I would assume since you're using Java) I'm going to suspend LDDP development since you've far surpassed my ability to extend it. Will LDPartEditor have a plugin system?
[LDPartEditor] Plugin support
Orion Pobursky Wrote:...if you're program is cross platform...
Yes, it is. I had to setup a test environment to test it on Linux, Windows (XP,Vista,7,8) and Mac OS X.

Orion Pobursky Wrote:Will LDPartEditor have a plugin system?

Yes, I did some preparations to support plugins in the future (I guess it will be integrated in release 1.0.0).
When I first thought of plugins for my application it was the beginning of 2012 and there was no line of code written.

However, a custom plugin has to extend the my Plugin class and must override getPlugInAuthor(), getPlugInName(), onCanvas(...) and onData(...).

There will be a plugin folder in the application directory. You can put the sourcecode of the java class there and it will be compiled at runtime if you decided to run your custom plugin.

Of course, you'll need the documentation for the Composite3D and DatFile classes. I'll provide them to you, after release 0.8.0 is out.

import org.nschmidt.ldparteditor.plugin.Plugin;
import org.nschmidt.ldparteditor.composites.Composite3D;
import org.nschmidt.ldparteditor.data.DatFile;

public class MyLpePlugin extends Plugin {

    public MyLpePlugin() {


    public String getPlugInAuthor() {
        // Return your name here...
        return "Nils Schmidt [BlackBrick89]";

    public String getPlugInName() {
        // Return the name of the plugin here...
        return "blah";

    public void onCanvas(Composite3D c3d) {
        // Write here what you want, if your plugin does the job for the 3D editor view...

    public void onData(DatFile data) {
        // Write here what you want, if your plugin does the job for the text editor view...

[LDPartEditor] SymSplitter
My SymSplitter implementation is now complete Smile
I translated Philo's C++ code into Java and did some modifications.

LPE's SymSplitter supports all features of the original program*, but works a little bit different.
Instead of deleting the file contents, it just reorders them, e.g.:

Take this as an input file:
4 16 -8 -5.25 8 -36.25 -5.25 36.25 56.6769 -5.25 36.25 28 -5.25 8
4 16 -36.25 -5.25 -36.25 -36.25 -5.25 36.25 -8 -5.25 8 -8 -5.25 -8
1 16 0 -5.25 0 -1 0 0 0 -1.3125 0 0 0 1 stud4a.dat
4 16 28 -5.25 -8 56.6769 -5.25 -36.25 -36.25 -5.25 -36.25 -8 -5.25 -8
1 16 0 -5.25 20 -1 0 0 0 -1.3125 0 0 0 1 stud4.dat
1 16 0 -5.25 -20 -1 0 0 0 -1.3125 0 0 0 1 stud4.dat

And you will get:
0 !LPE TODO SymSplitter: Section in front of the plane.
4 9 -8 -5.25 8 -36.25 -5.25 36.25 56.6769 -5.25 36.25 28 -5.25 8
1 1 0 -5.25 20 -1 0 0 0 -1.3125 0 0 0 1 stud4.dat

0 !LPE TODO SymSplitter: Section between the plane.
4 14 -36.25 -5.25 -36.25 -36.25 -5.25 36.25 -8 -5.25 8 -8 -5.25 -8
1 14 0 -5.25 0 -1 0 0 0 -1.3125 0 0 0 1 stud4a.dat

0 !LPE TODO SymSplitter: Section behind the plane.
4 16 28 -5.25 -8 56.6769 -5.25 -36.25 -36.25 -5.25 -36.25 -8 -5.25 -8
1 16 0 -5.25 -20 -1 0 0 0 -1.3125 0 0 0 1 stud4.dat

* in fact, the inlining is not implemented since you have other powerful features to do the inlining.

Re: [LDPartEditor] SymSplitter
Thumbs up Wink
[LDPartEditor] Subdivision (Catmull-Clark + Loop)
Subdivision is very nice, if you want to get a smoother surface.

My CAD program supports now two different methods: Catmull-Clark and Loop

Catmull-Clark works great for quads:
[Image: CatmullClark.png]

...and Loop splits quads into triangles, before processing:
[Image: LoopSubdivision.png]

...getting closer and closer to release Smile Smile
[LDPartEditor] A Note to Primitives (Preview Window, Primitve Groups + Drag And Drop)

As requested by Magnus Forsberg here, there will be a possibility to drag and drop primitives from a full customisable "primitive preview" view into the 3D editor. You can rotate and zoom the primitives inside the view, you can search the items and you can synchronise the list with your file system. And.. last but not least: You can group them into custom categories. I will give you more information on this later Smile

PS: This "feature" is one of the last five remaining tasks. Its strage somehow that I am excited of the LDPartEditor release, too Wink
Re: [LDPartEditor] A Note to Primitives (Preview Window, Primitve Groups + Drag And Drop)

could we possibly have the panes of the preview window labeled with Front/Top/Left/... and also some arrows showing the axes wouldn't hurt.

Thanks, w.

PS. Be assured that we are excited as you are :-)
LEGO ergo sum
Re: [LDPartEditor] A Note to... / XYZ-Axis for Primitive Preview
Maybe you want something like this?
[Image: ViewAxis.png]

I will not implement a viewing angle label or an axis for each primitive pane.
You can simply drag the primitive over the 3D view to see its original orientation (and cancel the drag-and-drop-event if you like).

There are viewing angle labels and axis indicators on the 3D view already (as shown here).
Re: [LDPartEditor] First Alpha Version News
Hi Nils,

Mentioned LDPartEditor looks very impressive.
Is it an open software ?
Would u guide me if there is any trial version available ?

Software License and Software Manual
Hello Andrew,

LDPartEditor (LDPE) is "free software" Smile I can not resist to post a quote from www.gnu.org in this context:

Quote: “Free software” means software that respects users' freedom and community. Roughly, it means that the users have the freedom to run, copy, distribute, study, change and improve the software. Thus, “free software” is a matter of liberty, not price. To understand the concept, you should think of “free” as in “free speech,” not as in “free beer”. We sometimes call it “libre software” to show we do not mean it is gratis.

We campaign for these freedoms because everyone deserves them. With these freedoms, the users (both individually and collectively) control the program and what it does for them. When users don't control the program, we call it a “nonfree” or “proprietary” program. The nonfree program controls the users, and the developer controls the program; this makes the program an instrument of unjust power.

I will write a manual for the users of my program (part authors) in the next days and will publish some technical infos how to modify my program (for other Java developers).

Additionaly, it will be possible to give me a little donation, but I will not advertise for this.
[LDPartEditor] Photo Album on Google+
FYI. You can find all the screenshots from the different development stages here:
« Next Oldest | Next Newest »

Forum Jump:

Users browsing this thread: 1 Guest(s)