[Plugin] bim-tools 0.13.4(june 22, 2015)
-
@dan rathbun said:
See the API on AttributeDictionaries collection and AttributeDictionary class objects.
They can be attached to almost anything, including Layers, Scenes, etc. as well as base geometry, and Groups and Components.
These attributes are indeed exactly what you need to export meaningful data. I knew something like that existed but didn't check it out jet. Sounds really useful, especially when you can also use it on layers and the like...
Here in the Netherlands we have the TNO research institute(I don't know how well known they are internationally?), and they do a lot of good work on the IFC standard.
They also make the "IFC Engine DLL", a freely(as long as the project is not commercial) usable library for IFC files.
http://www.ifcbrowser.com/ifcenginedll.html
I read something about the ability to use "Windows 32 API" functions in sketchup, AND the ability to use DLL's from ruby.
Does anyone know if this could be "do-able", or does it have a lot of implications (MAC???).
It might make exporting IFC from Sketchup a bit easier... -
@brewsky said:
Does anyone know if this could be "do-able", or does it have a lot of implications (MAC???).
It might make exporting IFC from Sketchup a bit easier...Yea.. I downloaded the TNO packages last year and looked at them. They are WIN dependant. (Both the DLL and the ActiveX control.)
Making Win32API calls from Ruby is doable, but it's a bit low level. What I would do (if I had to,) is write a Ruby wrapper library for all the functions in the TNO DLL. An alternative is to write the wrapping in C or C++ and compile a so file.
Either way, it's a major project. And that is all before you actually get to writing the actual Sketchup plugin.For Mac, the TNO would need to have an Apple Objective C guru translate the C++ source and compile it with Xcode.
I didn't think it was worth it.. as IFC is an XML data file. Ruby already has libraries to work with XML files, that are cross platform.
-
@chrisglasier said:
As I see it the intent of your plugin is to automate part of the creation of a model.
This plugin in itself is meant to automate the creation of simple wall objects. But the reason I made it is to have the ability to easily create some meaningful objects that can be used as testcase for an IFC exporter.
@chrisglasier said:
Your edges ... where do they come from?
They are indeed the result of design.
I don’t think designers want a tool that generates floorplans/buildings from a set of rules/demands. Although it would be really cool to compare your design with “the perfect” computer generated floorplan .But they DO like the ease of drawing in sketchup! If you could just make the creation of meaningful objects really easy even the building industry should not object
I have been thinking that it would be really neat to just be able to select all the faces of a low poly concept-model representing for instance the “roof”, and than “with a click” convert these to a slab with thickness and all the necessary attributes of a “roof-object”. And than do the same for exterior walls etc.
But all these attributes have no use without the ability to export them.
@chrisglasier said:
In other words would it be better to select criteria from existing know-how and get technology to search for and display possible solutions
I think we will need the software that advises in all kinds of areas like fire-compartiments, sound and the like you mentioned. But shouldn’t that be a different project altogether? Or even separate projects based on the area of expertise?
Isn’t that the meaning of BIM, create a model out of meaningful objects so other parties or tools can read it and add the requested extra information from the area of expertise(or check it for problems)?
These tools themselves would be great projects to work on! What if this existing know-how could be made available freely using “semantic web”. And could have your spaces-tool(by example) search by itself for the minimum dimensions of a functional “livingroom”. I see a lot of possibilities. Big problem remains that a lot of the needed know-how is corporately owned and people rather pay them than use some “unofficial” source. I don’t know how it is in other countries, but over here in the Netherlands even a large part of the regulations are written in copyrighted books!!!Interesting topic to discuss!
And now to the point I was getting to!
The reason I got myself into Sketchup scripting was because I have a couple of BIM-related things on my mind on which I would like to do some research...
- Be able to just select some faces(together with cutting-components) to generate walls/floors/roofs, or lines(together with a profile-component) to generate colums/walls etc. I don’t like the concept of most BIM systems that a wall has to be defined “this way” and a roof “that way”, and that while they are not fundamentally different. The greatest difference is the “label”, and then, because of the label, the way they react to other objects.
- Why do they tell it’s not possible(or advisable) to model every part of a building including tiny details? Things you WOULD add in a 2d detail drawing... The first thing you would need than is an easy way to define what’s visible at a given view because it would not be a workable model. But after that, allmost every detail could be is just an extrusion of a “profile-component” along a path. With some basic rules to solve the corners(based on properties/materials) drawing them in 3d should not be that much more complicated than drawing them in 2d. If a window could be defined by a square drawn on a sketchup face, than the square itself could be given the properties of “glass”, the base face could be wall, and the 4 adges of the window could be extrusion paths for the “window-frame+every-bit-of-detail-you-need”. And as long it is linked (with observers) to the original profile-component it would be editable as well. Just regenerate it after the profile is edited...
- Export all...
Your opinions please
-
@dan rathbun said:
It likely to clash with other plugins using that identifier.
And Dan, thanks for your tips on namespaces, I will really need that. Especially when things get a bit more complex, with possibly separate modules. And of course names that other people might have used!
-
@brewsky said:
@dan rathbun said:
It likely to clash with other plugins using that identifier.
And Dan, thanks for your tips on namespaces, I will really need that. Especially when things get a bit more complex, with possibly separate modules.
Oh you will definately need many module and class blocks to divide up the functional code, otherwise it will become unmanagable very quickly.
@brewsky said:
And of course names that other people might have used!
This will NOT be a problem, IF you follow my advice, and invent a unique toplevel namespace identifier. (The name of the module that encapsulates ALL your submodules and classes.)
@brewsky said:
Big problem remains that a lot of the needed know-how is corporately owned and people rather pay them, than use some “unofficial” source.
So.. would your project be a pay-for plugin, or a free open source project?
A free open source version can be used by workflow firms (such as Onuma,) that would charge customers to use it. The strange thing (which you say,) is that these customers would and do pay these firms rather than use the 'project' version. I guess they think the service firm has verified the product's quality, or ironed out all the wrinkles.
Anyway.. you'd need to decide, and look into what license you want the project to be released under. (GPL, BSD, MIT, etc.)
See: Wikipedia: Software License@brewsky said:
I don’t know how it is in other countries, but over here in the Netherlands even a large part of the regulations are written in copyrighted books!!!
Not uncommon.. even here. Usually the copyright is to prevent 'scalpers' from trying to resell copies of the standards or specifications. Some organizations will sell copies for around a hundred bucks each (ANSI), others will have them freely downloadable as PDF files.
-
@brewsky said:
But the reason I made it is to have the ability to easily create some meaningful objects that can be used as testcase for an IFC exporter.
In other words your main focus is essentially on paperwork type processes. But if you thought about object oriented information technology you could develop ideas how to identify and assemble objects and still produce traditional project documentation. A bit like creating a website that has potential to do many things but just using it to display a paper-like catalogue.
@brewsky said:
I don’t think designers want a tool that generates floorplans/buildings from a set of rules/demands.
You know it just might be site owners demand use of OOIT for its transparency and accountability, and designers have to comply.
@brewsky said:
Although it would be really cool to compare your design with “the perfect” computer generated floorplan
I think the reverse would happen; it would take a great deal of setting and resetting the criteria to reduce the options to say ten. Actually this is a way of delaying subjective judgement, providing a very high degree of accountability. Of course many designers rely on intuition, which is fine if the logical testing, which naturally follows any such lateral thinking proves it correct (which is one reason why building contracts are such a hassle).
@brewsky said:
they DO like the ease of drawing in sketchup! If you could just make the creation of meaningful objects really easy
even the building industry should not object
I suggest ... would respect, because you know buildings are not really built from drawings and specs. They are built from interpretations of them, as thumbnail sketches, setting out lines, purchase orders and so on. How much better a series of instructions: "Buy this; put it here" rather than "Need this, put it on the drawing (making sure the information is scattered over plans, sections, schedules and specification)"
@brewsky said:
Your opinions please
I am sorry I have run out of steam and time for the time being but you could have a look at my website for some examples what can be achieved. I know it is difficult to see beyond improving what already exists - e.g. evolving models from orthogonal drawings - most often the basis for competitive tendering. Toffler wrote: "Static competition may have produced the thoroughbred racehorse but it could never have produced the automobile." Competition in the building industry is static, something more dynamic is needed ... don't you think?
-
@dan rathbun said:
So.. would your project be a pay-for plugin, or a free open source project?
Currently I have put in a reference to the GPL in the header of the script(default from the Geany-editor). Seems to me to be the best licence. I want to make it open source. I didn't do a lot of research, for one I don't know if there are restrictions in the GPL for using the licence for plugins that only work wit proprietary software? I'd like to keep it open source, so MIT does not seem the best choice. I need to read some more on that!
Oh, and another question:
How do you keep class instances through multiple sketchup sessions? Is it possible to create a class "wall", fill an instance with properties, and make a sketchup object "part" of the instance(or vice versa)? And still be able to call methods from that class after restarting sketchup without recreating the class-instance from the sketchup geometry(and attributes)? -
@brewsky said:
@dan rathbun said:
So.. would your project be a pay-for plugin, or a free open source project?
Currently I have put in a reference to the GPL in the header of the script ... I want to make it open source. ..., so MIT does not seem the best choice.
There is also the Artistic License 2.0
For more: Various Licenses and Comments about Them
-
@brewsky said:
How do you keep class instances through multiple sketchup sessions?
Data files saved to disk. (It's easiest, if the data is linked to a certain model object, to save it within the SKP file, as attributes attached to the object. Trying to keep any 2 or more files in sync, has proven problematic IMHO.)
@brewsky said:
Is it possible to create a class "wall", fill an instance with properties, and make a sketchup object "part" of the instance
Sort of.. the Sketchup object would be referenced by the class instance, using an instance variable. Also the Properties would be loaded from the attribute dictionary attached to the SKP object(s), (either a component or a group,) into the class instance's properties Hash (or Ostruct.)
@brewsky said:
(or vice versa)?
NO. The SKP file's DOM, does not support creating custom Drawingelement subclasses. There are rigid methods for adding only the defined object classes into the model DOM. (see the Entities class methods.)
Afterall.. the application needs to know how to draw the model object classes. Allowing a infinate number of them would "open Pandora's box."This is why your IFC objects will really be Groups (or Components) "owning" primitives or other nested Groups (or Components.)
@brewsky said:
And still be able to call methods from that class after restarting sketchup without recreating the class-instance from the sketchup geometry (and attributes)?
NO. When restarted, even Sketchup has to recreate the Ruby Sketchup API objects after loading the Ruby Interpreter, and then it's C++ model objects (which are exposed to Ruby via the API,) by reading in a SKP file from disk.
-
@dan rathbun said:
This is why your IFC objects will really be Groups (or Components) "owning" primitives or other nested Groups (or Components.)
@dan rathbun said:
NO. When restarted, even Sketchup has to recreate the Ruby Sketchup API objects after loading the Ruby Interpreter, and then it's C++ model objects (which are exposed to Ruby via the API,) by reading in a SKP file from disk.
Ok very clear, thanks!
I thought about it because I heard Java can write full class-instances to disk... -
@dan rathbun said:
I didn't think it was worth it.. as IFC is an XML data file. Ruby already has libraries to work with XML files, that are cross platform.
Do you advise using IFC XML? I read somewhere that using the original "step" variant was faster...
-
Oh and another question pops into my mind.
it seems regular practice to host source files her on the forum.
Woudn't it be easier to use google code or sourceforge to manage all the different versions? -
@brewsky said:
Oh and another question pops into my mind.
it seems regular practice to host source files her on the forum.When it is a code snippet, or a relatively small, stand alone plugin, it's just easier to post a zip file here.
@brewsky said:
Woudn't it be easier to use google code or sourceforge to manage all the different versions?
For a project like yours... during the development, a google code site, github site, or a project site at RubyForge may be needed.
-
@brewsky said:
@dan rathbun said:
I didn't think it was worth it.. as IFC is an XML data file. Ruby already has libraries to work with XML files, that are cross platform.
Do you advise using IFC XML? I read somewhere that using the original "step" variant was faster...
Well pehaps (I didn't know of STEP, until you said this,)...
Wikipedia says that the STEP files are the most widely used, so support for them would be a good idea. Unfortunately, ISO wants 180 euros (I think,) for the a copy of 10303-21.On the other hand the IFC XML Schema was a free download.
Personally I can more easily read and understand the XML. (The Step files look like a nasty crossbreed between C and COBOL.)
-
@chrisglasier said:
In other words your main focus is essentially on paperwork type processes.
Not essentially, but all my experiences and day-to-day "annoyances" are related to the "paperwork type process". So the first ideas that come to mind are very practical and probably narrow-minded ways to improve the existing process.
When modelling a building it's very important to create an interlinked relational model instead of a "loose" collection of walls and floors.
Probably the most effective way would be to write a long list of relations(following a list of demands) and have a piece of software generate the "best" building.
But also a reversed(intuitive) process should work. In the old-school-way draw lines, define them as walls/spaces. Think about the "why" of every element and link all parts together. The greatest difficulty here is that because the plan originated from an intuitive process it can be hard to figure out exactly why you chose to place an element in a specific place. Although i'm confident that there is allways a reason AND a relation in the choice.@chrisglasier said:
You know it just might be site owners demand use of OOIT for its transparency and accountability, and designers have to comply.
I spoke about this subject with some architects and they thought it could be "fun" designing by setting relations and let the computer solve the puzzle. They liked to see if it would find the same solution.
@chrisglasier said:
"Buy this; put it here"
I do think that "a picture is worth a thousand words". "Buy this; put it here" would create an immense list for even the simplest building. An interesting visualized variation could be to create LEGO-like building instructions(I believe the guys at LDraw.org have nicely automated that!)
Chris, thanks for your replies, every one of them gives me something to think on
-
@dan rathbun said:
For a project like yours... during the development, a google code site, github site, or a project site at RubyForge may be needed.
I've set up a repository at google-code
http://code.google.com/p/bim-tools/And spent a couple of evenings figuring out what-the-heck this Mercurial thing was. And found out I've been using it partly myself way earlier while trying to merge linux config files
I've uploaded my plugin. Now on to something usefull...
-
@brewsky said:
@chrisglasier said:
"Buy this; put it here"
I do think that "a picture is worth a thousand words". "Buy this; put it here" would create an immense list for even the simplest building. ...
The reverse is also true as you suggest with your immense lists - it takes a thousand words to make a picture. And this is the real point immense lists are needed (I know I have been responsible for many.) They won't go away but the question is who makes them and how.
From the very start a designer starts to build lists, mentally or physically, names of spaces, elements, services and so on. If these can be captured many people can help to expand the lists of names and attach key/value pairs to describe each of them - kind of collective thinking out loud.
As the names represent physical objects they can be arranged in hierarchical relationships and if there are components with the same names can display alternative models backed up with data. This cannot be achieved with paperwork type processes, it needs machines that can communicate over the Internet. Rather than create walls from edges I want (and have done) to make machines from names.
-
IMO the difference between building the moon landing vehicle, and a house. Is that the first has a complex, but easily stated mission. Go to the moon, and get the astronauts back to earth. A house on the other hand, is fairly simple, yet accomplishes the complex mission required to shelter, and advance the institution family.
It was Louis Kahn that taught the difference between art and architecture. An Artist can express the futility of war by drawing a cannon with square wheels, an Architect must make them round. He poetically mused that a brick "wants to be an arch". That ultimately Architecture has a immutable unseen form that fixes it's place in human culture.
A fork has an essential form that makes it a fork. It matters little that it is baroque, or modern in style. The Architect's skill is to deduce this essential form.
-
@dan rathbun said:
I didn't think it was worth it.. as IFC is an XML data file. Ruby already has libraries to work with XML files, that are cross platform.
Hi Dan,
It seems no ruby XML libraries are included with SketchUp, is this correct?
Is there an easy way to add, for example, REXML to my plugin directory instead of requiring a full ruby install for every user?-Jan
-
@brewsky said:
@dan rathbun said:
I didn't think it was worth it.. as IFC is an XML data file. Ruby already has libraries to work with XML files, that are cross platform.
Is there an easy way to add, for example, REXML to my plugin directory instead of requiring a full ruby install for every user?
Correct. SU does not distribute the Ruby Libraries, only the interpreter.
Distro'ing Ruby libs in your plugin folder can cause version problems. You'll also likely find that those libs have dependancies on other libs, and so on... and so on...
Some coders have done it for single lib files.. but in that case, it's always best to first try and load from the user's full install by just requiring a lib file normally (wrapped in begin .. rescue LoadError block), if the rescue clause gets executed then you can load your copy from your plugin subfolder. That way if the user later installs full Ruby or updates to a newer version your plugin can take advantage of it.
But really... what we need to move toward, is every user having a special full Ruby install beneath the Sketchup program folder, "tweaked" just for use with Sketchup. Then the "system" Ruby install can be left alone to do other non-Sketchup things.
Advertisement