Welcome, Guest |
You have to register before you can post on our site.
|
Online Users |
There are currently 126 online users. » 0 Member(s) | 122 Guest(s) Applebot, Baidu, Bing, Google
|
Latest Threads |
Programmatically determin...
Forum: LDraw Editors and Viewers
Last Post: Roland Melkert
2023-12-07, 20:09
» Replies: 2
» Views: 225
|
Updating the Prim Ref pag...
Forum: Parts Tracker Discussion
Last Post: Gerald Lasser
2023-12-06, 11:55
» Replies: 77
» Views: 2,264
|
Image cut off, OSMesa LDV...
Forum: LDraw Editors and Viewers
Last Post: Orion Pobursky
2023-12-06, 2:04
» Replies: 2
» Views: 167
|
3 Part requests
Forum: Part Requests
Last Post: Philippe Hurbain
2023-12-05, 14:42
» Replies: 9
» Views: 563
|
34908 Steppenwolf head
Forum: Part Requests
Last Post: Richard
2023-12-03, 23:26
» Replies: 0
» Views: 135
|
City 2011
Forum: Official Models
Last Post: Takeshi Takahashi
2023-12-03, 16:11
» Replies: 4
» Views: 2,134
|
LDCad 1.7 Beta 1 (win+lin...
Forum: LDraw Editors and Viewers
Last Post: Roland Melkert
2023-12-02, 21:24
» Replies: 37
» Views: 2,743
|
Height of electric pin ho...
Forum: Parts Authoring
Last Post: Rene Rechthaler
2023-12-02, 19:55
» Replies: 6
» Views: 432
|
Part Request - 3068bpb103...
Forum: Part Requests
Last Post: Zoltán Tibor
2023-12-02, 12:50
» Replies: 2
» Views: 361
|
New parts from Lego Instr...
Forum: Parts Authoring
Last Post: Vincent Messenet
2023-12-01, 13:08
» Replies: 27
» Views: 2,177
|
|
|
November release |
Posted by: Orion Pobursky - 2023-11-05, 19:48 - Forum: Parts Tracker Discussion
- Replies (5)
|
 |
In two weeks, I'm planning on doing a November release. Partly to test the waters for monthly releases and partly because I found a bug in the license line code and want to make sure all official part licenses are properly annotated. The more parts ready for admin, the better.
|
|
|
Need help for faster processing |
Posted by: Max Murtazin - 2023-11-02, 21:12 - Forum: LDraw File Processing and Conversion
- Replies (7)
|
 |
For a while, I've been writing a custom LDraw to Collada converter for Bricklink Studio, as the one currently in the program is, to put it lightly, sucks
Have a problem with it's performance of finding and merging same vertex positions
Here's the code for one I have currently:
Code: static void MergeCell1(List<Vector3> cell)
{
for (int i = 0; i < cell.Count - 1; i++)
{
for (int j = i + 1; j < cell.Count; j++)
if (Vector3.Distance(cell[i], cell[j]) < MERGE_RADIUS)
cell[j] = cell[i];
}
}
static void MergeCell2(List<Vector3> cell, List<Vector3> sharpCell)
{
for (int i = 0; i < cell.Count; i++)
{
for (int j = 0; j < sharpCell.Count; j++)
if (Vector3.Distance(cell[i], sharpCell[j]) < MERGE_RADIUS)
sharpCell[j] = cell[i];
}
}
static void MergeCell3(List<Vector3> sharpCell)
{
for (int i = 0; i < sharpCell.Count - 1; i++)
{
for (int j = i + 1; j < sharpCell.Count; j++)
if (Vector3.Distance(sharpCell[i], sharpCell[j]) < MERGE_RADIUS)
sharpCell[j] = sharpCell[i];
}
}
static void MergeCell4(List<Vector3> cell, List<Vector3> sharpCell)
{
for (int i = 0; i < sharpCell.Count; i++)
{
for (int j = 0; j < cell.Count; j++)
if (Vector3.Distance(sharpCell[i], cell[j]) < MERGE_RADIUS)
cell[j] = sharpCell[i];
}
}
static void MergePoints(string model)
{
if (preBuilt.ContainsKey(model)) return;
float maxX = subMeshes[model].MaxBy(x => x.X).X;
float maxY = subMeshes[model].MaxBy(x => x.Y).Y;
float maxZ = subMeshes[model].MaxBy(x => x.Z).Z;
float minX = subMeshes[model].MinBy(x => x.X).X;
float minY = subMeshes[model].MinBy(x => x.Y).Y;
float minZ = subMeshes[model].MinBy(x => x.Z).Z;
int step = (int)Math.Round(Math.Pow(subMeshes.Count, 1.0 / 3.0));
float stepX = (maxX - minX) / step;
float stepY = (maxY - minY) / step;
float stepZ = (maxZ - minZ) / step;
List<Vector3>[,,] cells = new List<Vector3>[step, step, step];
List<Vector3>[,,] cellsLines = new List<Vector3>[step, step, step];
for (int i = 0; i < step; i++)
for (int j = 0; j < step; j++)
for (int k = 0; k < step; k++)
{
cells[i, j, k] = (from a in subMeshes[model]
where
a.X <= minX + (i * stepX) && a.X > minX + (i + 1 * stepX) &&
a.Y <= minY + (i * stepY) && a.X > minY + (i + 1 * stepY) &&
a.Z <= minZ + (i * stepZ) && a.X > minZ + (i + 1 * stepZ)
select a).ToList();
}
for (int i = 0; i < step; i++)
for (int j = 0; j < step; j++)
for (int k = 0; k < step; k++)
{
cellsLines[i, j, k] = (from a in subSharps[model]
where
a.X <= minX + (i * stepX) && a.X > minX + (i + 1 * stepX) &&
a.Y <= minY + (i * stepY) && a.X > minY + (i + 1 * stepY) &&
a.Z <= minZ + (i * stepZ) && a.X > minZ + (i + 1 * stepZ)
select a).ToList();
}
Console.WriteLine("Merging points of model " + model + ", step 1 - " + subMeshes[model].Count + " points");
Parallel.ForEach(cells.Cast<List<Vector3>>(), MergeCell1);
Console.WriteLine("Merging points of model " + model + ", step 2 - " + subMeshes[model].Count + " points");
Parallel.ForEach(cells.Cast<List<Vector3>>(), x => Parallel.ForEach(cellsLines.Cast<List<Vector3>>(), y => MergeCell2(x, y)));
Console.WriteLine("Merging points of model " + model + ", step 3 - " + subSharps[model].Count + " points");
Parallel.ForEach(cellsLines.Cast<List<Vector3>>(), MergeCell3);
Console.WriteLine("Merging points of model " + model + ", step 4 - " + subSharps[model].Count + " points");
Parallel.ForEach(cells.Cast<List<Vector3>>(), x => Parallel.ForEach(cellsLines.Cast<List<Vector3>>(), y => MergeCell4(x, y)));
/*for (int i = 0; i < subMeshes[model].Count - 1; i++)
{
for (int j = i + 1; j < subMeshes[model].Count; j++)
if (Vector3.Distance(subMeshes[model][i], subMeshes[model][j]) < MERGE_RADIUS)
subMeshes[model][j] = subMeshes[model][i];
//if (i % (subMeshes[model].Count / 100) == 0 && i != 0) Console.WriteLine("Merging points of model " + model + ", step 1: " + i / (subMeshes[model].Count / 100) + " % ");
}
Console.WriteLine("Merging points of model " + model + ", step 2 - " + subMeshes[model].Count + " points");
for (int i = 0; i < subMeshes[model].Count; i++)
{
for (int j = 0; j < subSharps[model].Count; j++)
if (Vector3.Distance(subMeshes[model][i], subSharps[model][j]) < MERGE_RADIUS)
subSharps[model][j] = subMeshes[model][i];
//if (i % (subMeshes[model].Count / 100) == 0 && i != 0) Console.WriteLine("Merging points of model " + model + ", step 2: " + i / (subMeshes[model].Count / 100) + " % ");
}
Console.WriteLine("Merging points of model " + model + ", step 3 - " + subSharps[model].Count + " points");
for (int i = 0; i < subSharps[model].Count - 1; i++)
{
for (int j = i + 1; j < subSharps[model].Count; j++)
if (Vector3.Distance(subSharps[model][i], subSharps[model][j]) < MERGE_RADIUS)
subSharps[model][j] = subSharps[model][i];
//if (i % (subSharps[model].Count / 100) == 0 && i != 0) Console.WriteLine("Merging points of model " + model + ", step 3: " + i / (subMeshes[model].Count / 100) + " % ");
}
Console.WriteLine("Merging points of model " + model + ", step 4 - " + subSharps[model].Count + " points");
for (int i = 0; i < subSharps[model].Count; i++)
{
for (int j = 0; j < subMeshes[model].Count; j++)
if (Vector3.Distance(subSharps[model][i], subMeshes[model][j]) < MERGE_RADIUS)
subMeshes[model][j] = subSharps[model][i];
//if (i % (subSharps[model].Count / 100) == 0 && i != 0) Console.WriteLine("Merging points of model " + model + ", step 4: " + i / (subMeshes[model].Count / 100) + " % ");
}*/
}
In short, it subdivides space in sections, in each of which it checks each pair of vertices on if they are close enough to be considered the same, or not. Wonder if there is a way to make it faster
|
|
|
[LDPE] 1.8.73 Released (align/distribute,snap to grid, remove params, vertex pasting) |
Posted by: Nils Schmidt - 2023-11-01, 18:12 - Forum: Parts Author Tools
- Replies (5)
|
 |
Hey,
Willy asked kindly for a feature to align and distribute objects. It is now available (Actions... => Align and Distribute...) on standard perspectives (front, back, left, right, top, bottom). I also added Max's wish to remove superfluous parameters from line types 1-5 (with a quick fix).
And Magnus' wish to not select all, but just one place of a pasted vertex.
There is also Philo's request to snap vertices to the grid (Actions... => Snap To Grid), only usable on standard perspectives (front, back, left, right, top, bottom) and I added a hint what the grid size value actually means (it is the grid size for 1-10% zoom). Finally, I added some improvements and fixed a small negligible bug.
![[Image: imgDuke2.png]](https://lh3.googleusercontent.com/-fi18ywwsEUo/VOOuvkpsdzI/AAAAAAAAASw/Ax0RRFkleKA/s64-no/imgDuke2.png)
As always, you can download LDPE from this page:
http://nilsschmidt1337.github.io/ldparteditor/
Changelog:
(5 new features and 1 bug fix)
With this release you will be able to...
- ...align and distribute objects (isolated vertices, lines, triangles, quads and subfiles). It behaves differently if "Move Adjacent Data" is ON or OFF. ON keeps the objects connected together. OFF will seperate them. Only usable on standard perspectives (front, back, left, right, top, bottom) .
- ...snap vertices and subfiles to the current grid (only available on standard perspectives (front, back, left, right, top, bottom)).
- ...auto-remove superfluous arguments from text lines (type 1,2,3,4,5) and also add missing ones (via quick fix in the text editor).
- ...benefit from the fact that pasting a single vertex will not enable "Single Vertex Modification" if "Automatically disable "Move Adjacent Data" on paste (3D Editor)" is checked.
- ...benefit from a slightly faster 3D editor (e.g. lower latency when you add a triangle).
The following critical issue is fixed:
- Wrong "Invalid number format" warning on "!LPE DISTANCE".
The program was tested intensively with "real world" files.
However, something can go wrong in about 140.000 lines of code.
Installation on Windows:
- Download and extract LDPartEditor_win32_x64.zip
- Run LDPartEditor-1.8.73.msi
- Start LDPartEditor from the start menu
Installation on Linux:
- Download and extract LDPartEditor_linux_x64.zip
- Install ldparteditor_1.8.73-1_amd64.deb
- Start LDPartEditor from the menu or via launcher
Installation on Mac OS X:
- Download and extract LDPartEditor_mac_x64.zip
- Mount LDPartEditor-1.8.73.dmg
- Drag LDPartEditor.app to the Applications folder
- Copy ldparteditor.sh to your home folder
4a. Open a Terminal.app and run ./ldparteditor.sh
4b. Or open a Terminal.app and run /Applications/LDPartEditor.app/Contents/MacOS/LDPartEditor
I listen carefully to your requests and possible complaints. Please leave me a message, with your thoughts and wishes to further improve the software.
LDPE is a 3D CAD application: The overall system requirements are higher. While I recommend to use a powerful 64-bit multicore system, it could be possible, to run LDPE on older machines as well.
System Requirements:
Minimum System Requirements:
- OpenGL 2.1 compatible Graphics Card
- Operating System (64-bit): Windows [7 or newer], Linux [e.g. Ubuntu Linux >=14.4], Mac OS X [>=10.6]
- CPU: Multicore-Processor e.g. Intel Core 2 Duo or AMD Athlon II (>2.0Ghz)
- RAM: 4GB
- Video-Memory: 1 GB
- Free Disk Space: 150 MB
Recommended Requirements:
- Operating System (64bit): Windows 7,8,10,11, Linux [e.g. Ubuntu Linux >=14.4], Mac OS X [>=10.6]
- OpenGL 3.3 compatible Graphics Card
- CPU: Multicore-Processor with 4 cores (or more)
- RAM: >4 GB
- Video-Memory: >1 GB
- Free Disk Space: 500 MB
- For a faster start, LDPartEditor and the LDraw™ library should be installed on an SSD.
|
|
|
Generatable primitives |
Posted by: Orion Pobursky - 2023-10-31, 21:10 - Forum: Parts Tracker Discussion
- Replies (7)
|
 |
Currently primitives that are derived from PrimGen (or similar sources) are attributed to the author that submits them. I'd like to change it so that LDraw.org "owns" them. I have some ideas that I'll share down thread but I'd like to hear other user's ideas.
|
|
|
LDraw.org 2023-05 Parts Update Now Available |
Posted by: Orion Pobursky - 2023-10-31, 4:10 - Forum: LDraw.org Announcements
- Replies (3)
|
 |
The 2023-05 LDraw Parts Update has been released. This update adds 398 new files to the core library, including 203 new parts and 13 new primitives.
Thanks are due to all the part authors who created or corrected parts for this release. The small, but dedicated, band of reviewers also play an important role in keeping files moving through the Parts Tracker and deserve just as much credit. This update wouldn't have been possible without their dedication and attention to detail.
You can preview the new parts in 2023-05 here, and download the zip-file update or Windows install package here.
Thank you to all the beta testers and parts authors who continue feedback for the new PT software. This project would not was it is without your help.
Orion Pobursky
LDraw.org Parts Library Admin
|
|
|
Sticker dimension with decimals |
Posted by: Magnus Forsberg - 2023-10-27, 21:14 - Forum: Parts Tracker Discussion
- Replies (4)
|
 |
I would like to see a clarification of the sticker specs.
https://www.ldraw.org/article/512.html#sticker_desc
When the sticker is exactly 1 stud, or another integer, should it be written with or without an decimal?
The example used on the page is:
Sticker 2.6 x 5.5 ...
Sticker 3.1 x 3.1 Round ...
and I think most sticker use an added zero. Like this:
Sticker 2.6 x 5.0 ...
Sticker 3.0 x 3.0 Round ...
I have recently added a zero in the description of many stickers, but I can see that other admin reviewers are removing the added zero.
How should it be written? With or without a zero?
|
|
|
|