Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 11,123
» Latest member: FlorenciaA
» Forum threads: 5,312
» Forum posts: 45,912

Full Statistics

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

 
  Super Mario
Posted by: Florent Faramond - 2023-11-06, 21:19 - Forum: Official Models - Replies (1)

Super Mario

Print this item

  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.

Print this item

Exclamation Blank Sticker Help
Posted by: Pepper - 2023-11-04, 6:28 - Forum: LDraw Editors and Viewers - Replies (1)

Hello all.

I tried to add some unofficial sticker parts to MLCad earlier but every attempt i've tried, the sticker part was always blank in MLCad.
I did also save and move the other parts and textures to go along with the sticker but it's like the texture png doesnt register in MLCad or something
Do the Textures go elsewhere other then the parts/textures folder in the base LDraw folder where the normal parts go?
The shapes are working fine, it's just the texture that isnt working.

Also sorry if im missing anything, I am new to this site and this is my first post.

Print this item

  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

Print this item

  Plug34.dat and related parts discussion
Posted by: Javier Orquera - 2023-11-02, 19:29 - Forum: Parts Authoring - Replies (5)

Per Magnus suggestion, I open this thread and hope to clarify what I do:

This is the real life part 4110(?)/4707 and Flash Ligth Unit:

   
   
   

Essentially, the plugs have the same shape; and here is my proposal to the plugs:

"New" shape of plug34
   

m_plug
   

4707s02
   

990b
   

As you can see, I think it's "better" with this "new" shape of plug34.

For the remaining parts (u9018, u9019, u9134 and u9146), I reworked them all (based on BL images) and the result is:"

u9018
   
u9018s01
   
u9018s02
   
u9019
   
u9134
   
u9146
   
u9146s01
   

u9018s01 is used on all the parts; u9018s02 is used in u9018, u9019 and u9134 and u9146s01 in u9146.

Part 4353.dat: according to images from internet, I think it needed to be adapted to some of the above parts.

Finaly: if these goes as I planed, there is no problem on submiting the parts.

Print this item

Star [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]

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:

  1. 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:

  1. Download and extract LDPartEditor_win32_x64.zip
  2. Run LDPartEditor-1.8.73.msi
  3. Start LDPartEditor from the start menu
Installation on Linux:

  1. Download and extract LDPartEditor_linux_x64.zip
  2. Install ldparteditor_1.8.73-1_amd64.deb
  3. Start LDPartEditor from the menu or via launcher
Installation on Mac OS X:

  1. Download and extract LDPartEditor_mac_x64.zip
  2. Mount LDPartEditor-1.8.73.dmg
  3. Drag LDPartEditor.app to the Applications folder
  4. 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.

Print this item

  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.

Print this item

  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

Print this item

  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?

Print this item

  Glued assembly parts as closed solids
Posted by: Orion Pobursky - 2023-10-27, 20:43 - Forum: Parts Tracker Discussion - Replies (7)

In relation to assembly parts (see Ostrich), should all the component parts be closed solids? While I'm sure there are examples of both in the library, Chris's standard seems to have been closed solid:
https://library.ldraw.org/tracker/24369

I agree but I'd like to have a short discussion in case anyone has strong feelings against.

Print this item