Jump to content
Developer Wiki and Function Reference Links Read more... ×
Sign in to follow this  
brudgers

Vectorscript Editor: No inquiry command?

Recommended Posts

It shows up in the online documentation.

And in the document on my computer.

But not in the 2008 vectorscript editor.

Did it ever exist?

If so was it removed, or just left out of the windows version?

Edited by brudgers

Share this post


Link to post

Looks like it first went missing in version 10.

If it's still in the current documentation I'll submit a bug about it.

Kevin

Share this post


Link to post

It is in the current online documentation and in the help PDF.

While we're on the subject of vectorscript documentation and specifically selection criteria...

It would be helpful if there was a code example illustrating the use of Dynarray [] of handle to capture the results of selection.

If you search the vectorscript manual, the developer website, and the annotated function list you will not find an example showing how to handle criteria (or use)r selection of objects within vectorscript.

Lots of Dynarray [] of char but nothing that makes it clear how objects are manipulated by vectorscript.

Indeed in the online documentation the commands for sorting through a set of selected objects [FSObject, NSObj, etc.] are buried in "Document List Handling" and "document list handling" remains undefined.

I think many potential users of vectorscript would be helped if some examples were added to the "what can I do with vectorscript" thread.

Share this post


Link to post

Dynarrays are handled the same as arrays with the exeption that you need to allocate the number of items that it will hold while the program is executing. The size of arrays are predefined in the declaration of the variable while dynarrays have no size until you allocate its size in the program code.

VAR

totItems: INTEGER;

strArray: ARRAY[1..5] OF STRING;

strList: DYNARRAY[] OF STRING;

BEGIN

totItems:= 3;

ALLOCATE strList[1..totItems];

strList[1]:= 'first';

strList[2]:= 'second';

strList[3]:= 'third';

END;

I do agree that documentation on vectorscript is thin and some of us had the benefit to learn when the scripts were unlocked.

Share this post


Link to post

http://techboard.nemetschek.net/ubbthreads/ubbthreads.php?ubb=showflat&Number=113373#Post113373

Here one can find an example of how to load the handles of a group of selected objects into an array (both dynamic or otherwise) and how to step thru the array while acting on each object as one might see fit.

Document List Handling.... there are a number of lists in a document that exist or can be created. All the symbols in a folder, all the layers, all the classes and so forth are lists that already exist. All the objects that meet certain criteria comprise a list that a user can create. Break into one of these lists and the tools in 'List Handling' become your means of navigating therein.

Share this post


Link to post

I figured out how to do it after digging around the various documentation sources and piecing together the puzzle.

There was just a lot of dumb-tax I had to pay.

It's really hard to make use of the "criteria" command in the VS editor if you can't store handles.

I guess the main thought I have is that manipulating vectorworks objects is really a more relevant jumping off point for illustrating the capablilities of vectorscript than examples which change text in strings.

newStr:=Concat('A','sample','string');

ain't about to motivate anyone to learn vectorscript, and those who would care are off programming for the iphone.

Edited by brudgers

Share this post


Link to post

If you want the handles returned by criteria then look at ForEachObject();

It takes criteria as one parameter and a Function/Procedure.

The Function/Procedure used by FEO gets a single handle passed to the calling proc for each object matching the criteria. You can build you handle list inside of the proc.

Kevin

Share this post


Link to post

There was just a lot of dumb-tax I had to pay.

Indeed. Arrays are just arrays, regardless of what they contain: characters, handles, vectors, points, reals, integers, cats or dogs. You deal with them exactly the same way regardless.

I'm sure that in a Windows-only programming language they would all be entirely different to your pleasure and satisfaction.

Why don't you switch to the C++ SDK: I understand that NNA uses the Microsoft C++ as the basis.

No resource forks. No free steak knives, either.

Share this post


Link to post

It had nothing to do with not knowing what arrays are.

It was an issue of not quickly finding examples of how to manipulate objects using the query commands in the official documentation.

BTW since it breaks so many applications, maybe snow leopard should be "OSvi."

"s"

"t"

"a"

remember, you saw it here first.

Edited by brudgers

Share this post


Link to post
It had nothing to do with not knowing what arrays are.

OK. If you don't know what they are, I can't help you.

For the benefit of more knowledgeable communityboarders:

Objects can be put into an excplicit array with various methods; a criterion or a set of criteria is among those.

However, at least in my scripting, ForEachObject (and its variants), ie. implicit arrays, are usually sufficient. (NB: I do mainly objects, so Draughtsmen and -women are beyond my expertise.)

Setting a set of criteria for list handling is not always exactly easy. It appears that there is a pre-defined sequence, surely because of some sinister plot by the Insanely Great folks in Cupertino.

Thus, I prefer to first process the simplest possible list and whilst doing that, doing the more complex things.

Unfortunately, with programming skills limited to text-formatting tags in Internet forums, you'll never be able to do such complex things.

Share this post


Link to post
Objects can be put into an excplicit array with various methods; a criterion or a set of criteria is among those.

However, at least in my scripting, ForEachObject (and its variants), ie. implicit arrays, are usually sufficient.

Hi 'Kool-Aid' ;-) Good to have you back.

Implicit/explicit is a nice way to think of this. Thank-you.

Fact is, if selection or visibility state, layer options and traversal options are the only criteria then FEOinLayer is simpler. No need for an explicit array at all.

In the example I was referring to above (my version) the whole array exercise could be replaced with something along the lines of:

ForEachObjectInLayer(Change_it,2,0,2);

or possibly:

ForEachObject(Change_It,SEL=True);

If there's something more that needs to be done with the selection set (like collect, process and output data about the objects), then an explicit array can be useful.

Share this post


Link to post

Implicit/explicit is a nice way to think of this.

It is, isn't it! VW has implicit lists (criterion-based, among which the layer is a special case.)

In my mind I consider criteria via set theory. When processing a subset, I may (and usually do) devise further subsets.

UI-wise the most important set to deal with is the Selection (on the Active Layer.) Yes, I do subscribe to the Evil Plot by Jewish Bankers, Freemasons and other Bilderberg Illuminati based in Cupertino: object-verb syntax.

The free thinkers of the Gates-persuasion obviously prefer something else.

Share this post


Link to post

I admit placing a query within a loop to keep returning (previous value - last object) might appeal to some people, after all there has to be some means of identifying Templars.

The shortcoming in my mind (among an obvious many) is that it requires change_it to be a catchall for everything you want to do with whatever meets the criteria.

In debugging - and I admit that I need to do it - I have been finding it easier to comment out lines in the main loop than within the functions and subs.

Of course I'm a fan of pointers, but that's probably out of ignorance.

Share this post


Link to post

Well, Mr. Yoghurt,

I was just about to give you some advice, but I wonder?

I think not. If you ever you grow up, send me a private message (confirmed by your Mommy.)

Share this post


Link to post
Well, Mr. Yoghurt,

I was just about to give you some advice, but I wonder?

I think not. If you ever you grow up, send me a private message (confirmed by your Mommy.)

Sure and Lucy will hold the football.

Share this post


Link to post

Fair enough. I had a suggestion, but you did not choose wisely.

(What, by the way, is THE Kool-Aid?)

Share this post


Link to post

Umm...then that would be the first time another person's actions determined if you offered or witheld your suggestions.

Normally, Kool-Aid is a sugary substance that appeals to those who have not yet reached the age of reason.

Ironically, it can also be vile and acidic.

Share this post


Link to post

A substance, huh? Well, then ? methinks ? it should not be THE. Unless you you put THE petrol (or whatever) into the tank of your white car.

But no, this is not the first time when I withhold my advice based on another person's actions. Not the last, either.

Share this post


Link to post

We'll tak a cup'o Kool-Aid yet, for auld lang syne!

Due to popular demand, even it is also for the benefit of Mr. B. of the Gatestown-cult:

The easy way to learn about and set up criteria (pl., s. is criterion; ref. datum-data, agendum-agenda etc.) in scripts is to use a database worksheet first.

For a fleeting moment, the VS expression is visible and even able to be copied and pasted.

Share this post


Link to post

Indeed.

And if a user is not really comfortable with worksheets, is no use to try scripting criteria.

To the new scripter:

Also useful is to create a "Custom modification" or "Custom selection" script and analyze it.

The criteria arguments are best learned in the "Worksheets" documentation integrating it with the "Vectorscript Guide > Search Criteria" for obj types and Search Criteria Tables.

Criteria -unregarded what most scripters think- is highly advanced stuff.

* you'll begin with criteria as VS-beginner

* abandon them thinking that you are smart enough to do better

* go back at a later "age" when you finally understand how powerful they are. When you finally understand them in detail.

They have limits and missing items, but few, few...

orso

Share this post


Link to post

OK. Let's illustrate these criteria a bit, as requested by a couple of board members.

The purpose is to have eg. loose furniture associated with the spaces they are in. In an office building or a school loose furniture is a major issue.

For the suppliers & site management (or removalists), getting the right stuff in the right place can also be an arduous task. Theoretically this even enables each item to have a sticker with the space number (and name & occupant's name etc.).

So, we process one layer at a time and search for particular PIOs that have a name and are visible. For each PIO we create a temporary polyline, a copy of its path, give the poly a temporary name and then search for items inside it, with a specific record attached, and write the space number in that record.

In large landscape projects this approach also may have merit.

Easy! Yes, criteria are powerful ? and very fast.

[font:Courier New]PROCEDURE ItemsByLocationInPIO;

{ ? Petri Sakkinen 1996?2009 (2009-09-02) - some sort of a lesser licence }

{ to use & modify as long as the author's ? is acknowledged and kept }

CONST

????pioName = 'name_of_pio';

????dataRecord = 'name_of_record';

????locationF = 'name_of_location_field';

????

VAR

????theLocation : HANDLE;

????locName, refName, layerName : STRING;

????dX, dY, rotA : REAL;

PROCEDURE GetItem (h : HANDLE);

BEGIN

????SETRFIELD(h, dataRecord, locationF, locName);

END;

PROCEDURE GetSpace (h : HANDLE);

BEGIN

????GETSYMLOC(h, dX, dY);

????rotA := GETSYMROT(h);

????theLocation := CREATEDUPLICATEOBJECT(GETCUSTOMOBJECTPATH(h), ACTLAYER);

????HROTATE(theLocation, 0, 0, rotA);

????HMOVE(theLocation, dX, dY);

????SETNAME(theLocation, 'Heart_of_Gold');

????locName := GETNAME(h);

????FOREACHOBJECT(GetItem, ((L=layerName) & (LOC='Heart_of_Gold') & (R in [dataRecord])));

????DELOBJECT(theLocation);

END;

BEGIN

????layerName := GETLNAME(ACTLAYER);

????FOREACHOBJECT(GetSpace, ((L=layerName) & (R in [pioName]) & NOT(N='none') & V));

END;

RUN(ItemsByLocationInPIO);

[/font]

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

 

7150 Riverwood Drive, Columbia, Maryland 21046, USA   |   Contact Us:   410-290-5114

 

© 2018 Vectorworks, Inc. All Rights Reserved. Vectorworks, Inc. is part of the Nemetschek Group.

×