Jump to content
 

TangoOscarMike

Members
  • Posts

    484
  • Joined

  • Last visited

Everything posted by TangoOscarMike

  1. I can confirm. Here in Germany I have Hornby OO trains on Fleischmann HO track, with a Gaugemaster controller plugged into the mains in the normal way. Whereas a colleague of mine once killed a computer that had been shipped from America by plugging it straight into the mains without flipping the power supply switch on the back.
  2. Now that I've looked at Google maps (and feeling slightly ashamed of my pontificating), I want to change my answer. I agree with the shorten-the-gardens-and-flatten-the-angle-a-little-bit camp. The angle, houses and gardens are distinctive but the precise lengths and the precise angle are not. If the gardens end up too short and stubby, you could subtly alter all the dimensions enough to insert another house, this preserving the proportions. And I think that you need to do enough fudging to allow for some road on other other side of the houses, as a delimiter.
  3. The whole hobby is made of compromises: The popular 00 models have the wrong gauge track The overwhelming majority of models have moving trains but static people, animals, vehicles and clouds in the backdrop Backdrops themselves are a place where an entire dimension is discarded - but this is generally preferable to the jarring alternative of wallpaper, or a workbench, or some other domestic scene in 1:1 Scenes are compacted and trains are shortened (for many people, an accurate length train would be longer than their layout) - I expect it's very rare for a layout with two stations to have an accurate distance between them Accurate operations at a remote rural station could be very dull viewing indeed, with only 4 trains a day I could go on (and often do). So accuracy or aesthetically pleasing isn't actually a choice you get to make. I suggest an alternative question - "how shall I balance accuracy against the various constraints, such as the available space, in order to produce a pleasing result?". And in answering this question, you could take a film-maker or theatre director's view - you could try to avoid breaking the viewers' suspension of disbelief (viewers including you). This isn't necessarily an easier question to answer, especially since different people have different priorities - for some people, tension lock couplings ruin a model. Other people might tolerate a cricket game of statues or a horse frozen in mid-leap, but not an anachronism of just a few weeks (that bridge was pulled down two days before that livery was introduced). And maybe an "error" can help with the suspension of disbelief - perhaps some fine clothing that would never really be seen in your setting, but which really helps to establish the time period. Since it's impossible to satisfy everyone's preferences, it makes sense to prioritise your own. On re-reading, this all looks pretty pompous, and doesn't actually address your question. I've used a lot of words to say "it isn't actually either-or". But I've written it, so I might as well submit it.
  4. Wherever the window apertures have been moved or blocked, the glazing is removed from the roof. And wherever the apertures have been moved, the individual pieces of glazing are glued in place.
  5. After many iterations, I decided that the painting was not going to get any better, so I stopped, and gave the body two coats of semi-gloss varnish. I've also removed the middle lamp/ventilator pair, in lip-service to the new internal layout. So now the roof needs a coat of paint.
  6. I read that as "After sleeping on the platform", which seemed like an astonishing level of dedication.
  7. Thanks Christian. I have tried a Molotov acrylic pen, but I've had trouble regulating the flow of paint. On the other hand, my daughter has a similar pen which is rather better. I also have rather shaky hands, sometimes, so in general I'm looking for techniques that don't require too much brush or pen control. But I will have a look as Posca pens.
  8. This isn't very different to the previous picture, but I'm going to declare it finished and get on with the other side and the ends. After the last coat of paint, the beading was partially obscured (in places) by a thin film, so I took this back with the finest wet-and-dry that I could find (1200). Then I dry-brushed on a little more gold for good measure. As usual, it could be worse and it could be better. It still needs a coat of matt or semi-matt varnish to reveal the final result.
  9. If it was part of a photography exhibition, then I daresay there are more photographs....... (?)
  10. This is three-ish very thin coats (of both colours), and it seems to be working. But we won't know for sure until I've put several more coats on.
  11. 1948 is the only date printed in it, so I expect that it is indeed a first edition. That narrow gauge drawing was one of the references I consulted when I embarked on this. I reckon the gauge is most of the way to 12mm. I've just been looking for on Google images, and I can't find it on the Madder Valley Railway (or anywhere else). But I hope it still exists.
  12. Previously I've tried various techniques to paint the beading after the main colours are on. This time I've painted the beading (crudely) and put some gloss varnish on top. I'm going to try filling in the blocks of colour, and wiping any stray paint off the beading before it's fully dried.
  13. I will look into this, because I haven't yet had a putty that was quite right for this sort of thing. I have a tube of Revell (I think) putty, which I think is just polystyrene in solvent, and I've had trouble with this stuff attacking plastic. I was planning to use Milliput, but I couldn't find it so I used green stuff instead. I'm not altogether happy with the result, but I feel like cracking on, so I've added a divider for the remaining passenger compartment, primed it, and commenced painting.
  14. This project has languished for almost 3 years. I was unhappy with the damage that I had caused to the surface detail (beading partially reconstructed with milliput), and unsure how to proceed. Last night I picked this coach up again and sprayed some primer on, in order to get a flat finish so that I could see the detail. It's not as bad as I'd feared (it seldom is). The only improvement that I think is strictly necessary is the filling of this seam. The equivalent seam on the other side is OK.
  15. That is spectacular. At what point would you decide that it was more straightforward to design an etch of your own?
  16. I don't see this kit on the Niu Models web site - can you tell us any more, about the kit or the prototype? I imagine this is a naval gun barrel. If so (or if not) where was it made, where was it taken?
  17. This is an heirloom. I don't know which of my ancestors was the original owner, but it may well turn out to be the entirety of my inheritance. I have used it for inspiration, but I haven't actually attempted the techniques.
  18. And finally, I subtract the same block from underneath, but lowered down 1mm. It is scaled to be slightly larger than before, in order to ensure a clean unambiguous removal. coal_r = 1; separation = 0.6; bunker_l = 10; bunker_w = 18; half_x_count = bunker_l/(2 * separation); half_y_count = bunker_w/(2 * separation); coal_h = 2.5; function height(X, Y) = coal_h * ((1 - ((2 * X / bunker_l)^2)) * (1 - ((2 * Y / bunker_w)^2))); module piece_of_coal(){ scale_first = rands(0.6, 1.4, 3); // produces an array of 3 random numbers in the range 0.6 to 1.4, for stretching scale_second = rands(0.6, 1.4, 3); rotate_first = rands(-90,90,3); // produces an array of 3 random numbers in the range -90 to 90, for rotating rotate_second = rands(-90,90,3); intersection(){ rotate(rotate_first)scale(scale_first)sphere(coal_r, $fn = 5); rotate(rotate_second)scale(scale_second)sphere(coal_r, $fn = 5); } } difference() { union() { intersection() { for (x_count = [-half_x_count:half_x_count]) { for (y_count = [-half_y_count:half_y_count]) { offsets = rands(-separation/2, separation/2, 3); x = x_count * separation; y = y_count * separation; translate([x + offsets[0], y + offsets[1], height(x, y) + offsets[2]]) piece_of_coal(); } } cube([bunker_l, bunker_w, 40], center = true); } translate([0, 0, -20]) scale ([1.0001, 1.0001, 1]) surface(file="heightmap.txt", center = true); } translate([0, 0, -21]) scale ([1.0002, 1.0002, 1]) surface(file="heightmap.txt", center = true); } There's plenty of scope for more refinement, and for coal in a tender I've used a more complex curve.
  19. Nearly there. I want to remove the possibility of holes (which might matter for some purposes) and give the thing a smooth lower surface (just for the sake of tidiness). At the moment the underneath looks like this, which displeases me: For this I need a block with the same top surface as my coal height contour. The easiest way to do this is also a little cumbersome, because it requires a separate file of data points. I'm creating this separate file with the following Python script. #!/usr/bin/python3 bunker_l = 10 bunker_w = 18 coal_h = 2.5 def height(X, Y): return 20 + coal_h * ((1 - ((2 * X / bunker_l)**2)) * (1 - ((2 * Y / bunker_w)**2))); min_x = int(-bunker_l/2) max_x = int(bunker_l/2 + 1) min_y = int(-bunker_w/2) max_y = int(bunker_w/2 + 1) ofile = open('heightmap.txt', 'w') for x in range(min_x, max_x): line_of_output = [] for y in range(min_y, max_y): line_of_output.append(str(height(x,y))) ofile.write(' '.join(line_of_output) + '\n') This uses the same height function - the addition of 20 is to ensure that shape appears at the top of a tall block, which will then be translated down to the correct level. The text file is imported to form a solid block like this: translate([0, 0, -20]) surface(file="heightmap.txt", center = true); This needs to be added to the coal as a union(): coal_r = 1; separation = 0.6; bunker_l = 10; bunker_w = 18; half_x_count = bunker_l/(2 * separation); half_y_count = bunker_w/(2 * separation); coal_h = 2.5; function height(X, Y) = coal_h * ((1 - ((2 * X / bunker_l)^2)) * (1 - ((2 * Y / bunker_w)^2))); module piece_of_coal(){ scale_first = rands(0.6, 1.4, 3); // produces an array of 3 random numbers in the range 0.6 to 1.4, for stretching scale_second = rands(0.6, 1.4, 3); rotate_first = rands(-90,90,3); // produces an array of 3 random numbers in the range -90 to 90, for rotating rotate_second = rands(-90,90,3); intersection(){ rotate(rotate_first)scale(scale_first)sphere(coal_r, $fn = 5); rotate(rotate_second)scale(scale_second)sphere(coal_r, $fn = 5); } } union() { intersection() { for (x_count = [-half_x_count:half_x_count]) { for (y_count = [-half_y_count:half_y_count]) { offsets = rands(-separation/2, separation/2, 3); x = x_count * separation; y = y_count * separation; translate([x + offsets[0], y + offsets[1], height(x, y) + offsets[2]]) piece_of_coal(); } } cube([bunker_l, bunker_w, 40], center = true); } translate([0, 0, -20]) scale ([1.0001, 1.0001, 1]) surface(file="heightmap.txt", center = true); } The tiny bit of scaling is to avoid having two surfaces that coincide. If there had been significant smooth surface visible among the coal, I would have lowered the block a bit more.
  20. Now i just want to do a little tidying up. And I think my pieces of coal are a little large, so I'm going to reduce their size (which again, requires a reduction in the separation). I want to trim the sides, and this is done by creating an intersection of the coal (thus far) with a very tall block: coal_r = 1; separation = 0.6; bunker_l = 10; bunker_w = 18; half_x_count = bunker_l/(2 * separation); half_y_count = bunker_w/(2 * separation); coal_h = 2.5; function height(X, Y) = coal_h * ((1 - ((2 * X / bunker_l)^2)) * (1 - ((2 * Y / bunker_w)^2))); module piece_of_coal(){ scale_first = rands(0.6, 1.4, 3); // produces an array of 3 random numbers in the range 0.6 to 1.4, for stretching scale_second = rands(0.6, 1.4, 3); rotate_first = rands(-90,90,3); // produces an array of 3 random numbers in the range -90 to 90, for rotating rotate_second = rands(-90,90,3); intersection(){ rotate(rotate_first)scale(scale_first)sphere(coal_r, $fn = 5); rotate(rotate_second)scale(scale_second)sphere(coal_r, $fn = 5); } } intersection() { for (x_count = [-half_x_count:half_x_count]) { for (y_count = [-half_y_count:half_y_count]) { offsets = rands(-separation/2, separation/2, 3); x = x_count * separation; y = y_count * separation; translate([x + offsets[0], y + offsets[1], height(x, y) + offsets[2]]) piece_of_coal(); } } cube([bunker_l, bunker_w, 40], center = true); }
  21. Next I would like a contoured surface - higher in the middle. I'm going to do this with a height function that is zero at the edges, and some predefined height in the middle. After a bit of tinkering with segments of circles, I decided that a parabola was easiest to handle. (1 - x*x) is 1 when x is zero, and zero when x is plus or minus one. And (1 - x * x) * (1 - y * y) is 1 when x and y are both zero, and zero if either of x or y is 1. So (with x and y as my two horizontal dimensions) I can scale this function by bunker_l/2 and bunker_w/2 to fit the horizontal space, and multiply it by my chosen height. coal_r = 1.5; separation = 1; bunker_l = 10; bunker_w= 18; half_x_count = bunker_l/(2 * separation); half_y_count = bunker_w/(2 * separation); coal_h = 2.5; function height(X, Y) = coal_h * ((1 - ((2 * X / bunker_l)^2)) * (1 - ((2 * Y / bunker_w)^2))); module piece_of_coal(){ scale_first = rands(0.6, 1.4, 3); // produces an array of 3 random numbers in the range 0.6 to 1.4, for stretching scale_second = rands(0.6, 1.4, 3); rotate_first = rands(-90,90,3); // produces an array of 3 random numbers in the range -90 to 90, for rotating rotate_second = rands(-90,90,3); intersection(){ rotate(rotate_first)scale(scale_first)sphere(coal_r, $fn = 5); rotate(rotate_second)scale(scale_second)sphere(coal_r, $fn = 5); } } for (x_count = [-half_x_count:half_x_count]) { for (y_count = [-half_y_count:half_y_count]) { offsets = rands(-separation/2, separation/2, 3); x = x_count * separation; y = y_count * separation; translate([x + offsets[0], y + offsets[1], height(x, y) + offsets[2]]) piece_of_coal(); } } This created more gaps, which I addressed as before by reducing the separation.
  22. To address the regular placement, I'm going to randomly displace each piece from its grid location. This creates some large gaps. These gaps could be addressed in lots of ways - I'm going to do it by reducing the separation. coal_r = 1.5; separation = 1.2; bunker_l = 10; bunker_w = 18; half_x_count = bunker_l/(2 * separation); half_y_count = bunker_w/(2 * separation); module piece_of_coal(){ scale_first = rands(0.6, 1.4, 3); // produces an array of 3 random numbers in the range 0.6 to 1.4, for stretching scale_second = rands(0.6, 1.4, 3); rotate_first = rands(-90,90,3); // produces an array of 3 random numbers in the range -90 to 90, for rotating rotate_second = rands(-90,90,3); intersection(){ rotate(rotate_first)scale(scale_first)sphere(coal_r, $fn = 5); rotate(rotate_second)scale(scale_second)sphere(coal_r, $fn = 5); } } for (x_count = [-half_x_count:half_x_count]) { for (y_count = [-half_y_count:half_y_count]) { offsets = rands(-separation/2, separation/2, 3); translate([(x_count * separation) + offsets[0], (y_count * separation) + offsets[1], offsets[2]])piece_of_coal(); } } It's getting better, but it's still too flat.
  23. And now I reinstate the random coal. coal_r = 1.5; separation = 1.5; bunker_l = 10; bunker_w= 18; half_x_count = bunker_l/(2 * separation); half_y_count = bunker_w/(2 * separation); module piece_of_coal(){ scale_first = rands(0.6, 1.4, 3); // produces an array of 3 random numbers in the range 0.6 to 1.4, for stretching scale_second = rands(0.6, 1.4, 3); rotate_first = rands(-90,90,3); // produces an array of 3 random numbers in the range -90 to 90, for rotating rotate_second = rands(-90,90,3); intersection(){ rotate(rotate_first)scale(scale_first)sphere(coal_r, $fn = 5); rotate(rotate_second)scale(scale_second)sphere(coal_r, $fn = 5); } } for (x_count = [-half_x_count:half_x_count]) { for (y_count = [-half_y_count:half_y_count]) { translate([x_count * separation, y_count * separation, 0])piece_of_coal(); } } This is better, but the regular placement is still evident.
  24. So now I want multiple pieces of coal to fill a bunker, which will be 18mm (it's not explicit in OpenSCAD, but the units are mm because that's my choice) wide and 10 mm "long". I don't want to fill the bunker - I only want the top layer. For a quick sanity check, I will make a regularly-spaced grid non-random coal: coal_r = 1.5; separation = 1.5; bunker_l = 10; bunker_w= 18; half_x_count = bunker_l/(2 * separation); half_y_count = bunker_w/(2 * separation); module piece_of_coal(){ sphere(coal_r, $fn = 5); } for (x_count = [-half_x_count:half_x_count]) { for (y_count = [-half_y_count:half_y_count]) { translate([x_count * separation, y_count * separation, 0])piece_of_coal(); } } Which produces this awful result:
×
×
  • Create New...