Ravs, I disabled the faux perspective for this release as it isn't yet complete enough to be worthwhile.
Yes, most of the template utilities use the alpha channel on a template to work. Just go round your template with a low opacity, soft eraser and you should be able to get some effect. But as this goes against the way I've been heading with templates I doubt I will develop these further.
The approximate elevation uses the greyscale of a template and not opacity. Where a template is lighter it will shift the trees up a variable amount. So if you had a very basic greyscale heightmap for a template you should notice some attempt to show this in tree placement. Lowering the view angle should make it more apparent if memory serves. By the way, this was very much a WIP option that I haven't touched for a long time so I'm not sure if it would produce any usable results.
To decide where to put coniferous trees then use a greyscale template. The program automatically changes a template to greyscale but if it has areas of low opacity then this will produce false results. I still haven't come up with a better system but if you go into the Brush Weight menu at the bottom, when a template is loaded it should open up a couple of sliders at the side of the viewport - these can be used to tell the program what colour of template the trees are allowed to be placed on - 255 being white and 0 being black. So for all coniferous trees raise the MIN slider to 100 or so and for deciduous tree lower the max slider to 150 or so. It's best to make sure there is some overlap on those values or you may get some trees placed where you don't want, also the overlap allows mingling so adjust these to suit. This way, coniferous trees will be placed on white template and down into grey, deciduous trees will be placed on black template and up into grey and always the twain shall meet.
Viewing angle, although different in how it is used, is basically another form of YDensity right now. This should have more utility once faux perspective is working better.
Brilliant! Thanks for the explanation on the coniferous forests, I tried it and it works a treat!
Really gracious of you, Ramah, to share so many of your tools and techniques.
I can only save the resulting forest as a single flat .png and not "all layers" like the pdf manual says. Ideas?
I'm on a Mac.
Hmm, off the top of my head I cannot think of a reason why it shouldn't be working for you. I'm on a PC but as far as I am aware the JVM should translate it faithfully. I might be wrong but I thought that as long as I stay away from referencing specific windows commands or keys then it should be ok cross-platform. Can anyone else verify this?
Unfortunately I don't tend to get a lot of feedback here. It's been downloaded 22 times so far and only a few people have commented so I am never sure what problems, if any, people are having. I'll take a look into it and see if I can find a problem with the saving, although why it would save the image and not the layers I don't know. :S
Anyone else had this problem? If so are you on a mac?
Just out of interest though, on the mac does the program appear graphically similar to how it was in the last screenshot that I posted? I have often wondered if the LookAndFeel would translate correctly across platforms.
Oh, I always thought the 'all layers' save was meant to be a flat .png in the sense that you only have one image saved....or have I misunderstood?
Hmm... well that doesn't sound good if you don't know that eaither, Ravs.
The "Save Image" command just saves out exactly what it sees in the viewport, minus the green background. So if shades, shadows etc. are all turned on then it spits it out as one image. Limited use really.
The "Save All Layers" command spits out up to four images, one each for: _brushes.png, _shades.png, _shadows.png and _masks.png. This way they are kept separate and can be manipulated individually in PS or whatever. Are you not getting them either, Ravs?
lol, I just tried it and it worked! I never appreciated that TT could do this! Fantastic! It makes editing in Drawplus even easier!
You are just a genius, Ramah!
It doesn't do that.
It pulls up a Save dialog asking for a filename,
and then spits out this Java error:
Code:Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.substring(String.java:1768) at mapmaking.Main.saveAll(Main.java:5173) at mapmaking.Main.saveAll(Main.java:5165) at mapmaking.Main$11.actionPerformed(Main.java:1433) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1882) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2202) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) at javax.swing.AbstractButton.doClick(AbstractButton.java:334) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1050) at apple.laf.CUIAquaMenuItem.doClick(CUIAquaMenuItem.java:119) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1091) at java.awt.Component.processMouseEvent(Component.java:5617) at javax.swing.JComponent.processMouseEvent(JComponent.java:3129) at java.awt.Component.processEvent(Component.java:5382) at java.awt.Container.processEvent(Container.java:2010) at java.awt.Component.dispatchEventImpl(Component.java:4083) at java.awt.Container.dispatchEventImpl(Container.java:2068) at java.awt.Component.dispatchEvent(Component.java:3918) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4256) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3936) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3866) at java.awt.Container.dispatchEventImpl(Container.java:2054) at java.awt.Window.dispatchEventImpl(Window.java:1801) at java.awt.Component.dispatchEvent(Component.java:3918) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:501) at java.awt.EventQueue.access$000(EventQueue.java:80) at java.awt.EventQueue$1.run(EventQueue.java:462) at java.awt.EventQueue$1.run(EventQueue.java:461) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:84) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:95) at java.awt.EventQueue$2.run(EventQueue.java:476) at java.awt.EventQueue$2.run(EventQueue.java:475) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:84) at java.awt.EventQueue.dispatchEvent(EventQueue.java:473) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)