# Extrude rectangle

## Recommended Posts

Posted (edited)

Hello

is there anyone who can give me a script to draw a rectangle wich can ,by giving a value for extrude, in the info pallet

can be extrude

thank you

Edited by tismacfan2

tismacfan2,

I am not sure exactly what you want, but the following script will create a rectangular Extrude object of 0-height on the Layer Plane, but you must draw it in Top/Plan or Top view. Since it is already an Extrude, you can use the OIP to set its Extrude Height, and Bottom Z-value.

If you want to use this as a Tool, a different approach will be needed. (i.e., more code).

```PROCEDURE RectExtrude;
{ Draw a Rectangle, convert it to an Extrude w/ ZERO height. }
{ Extrude height and Bottom Z value can then be changed in the OIP. }
{ The initial rectangle is drawn on the Layer Plane. }
{ This script works as expected in Top and Top/Plan views, }
{ but in other 3D views the rectangle shifts position. }
{ 7 Jan 2018 - Raymond J Mullin }
VAR
H :Handle;
X1, Y1, X2, Y2 :Real;
BEGIN
GetRect(X1, Y1, X2, Y2);
Rect(X1, Y1, X2, Y2);
H := HExtrude(LNewObj, 0, 0);
END;
Run(RectExtrude);```

HTH,

Raymond

Thank you for trying helping me. I am from Belgium and my English is not so good for a good explanation what is want.

I attach a draw so you can maybe know better what  I want.  I already make a script but the problem is that he said it is ok by checking, but when

I use it nothing is on my screen and al the menu's off Vectorworks became gray,  so I must always shut down Vectorworks.

Perhaps you can help me when you see my drawing with explanation.

Thank you very much for helping me solving this problem.

Pascal

this is my script what I have made

Procedure Kopplaat;

VAR
eventID, eventMessage : LONGINT;
d,h,b:REAL;
bp,kop,db,ab,tk:STRING;
objectHandle:HANDLE;
boolResult:BOOLEAN;

BEGIN

PushAttrs;
b:=PLineLength;
h:=Pboxwidth;
d:=Pd;
ab:=Pab;
db:=Pdb;
kop:=Pkop;
bp:=Pbp;
tk:=Ptk;

BeginXtrd(0,d);

Rect(0,0,b,h);

objectHandle := LNewObj;
objectHandle := LNewObj;
SetObjectVariableBoolean(objectHandle, 1160, FALSE);
boolResult := SetEntityMatrix(objectHandle, 0,0,0,0,-0,0);

EndXtrd;

SetZVals(0,0);

PopAttrs;
END;

Run (Kopplaat);

I have try to make another script but also here I get errors

Procedure kopplaat;
var
kop, ab,db,d,x,y,x1,y1,xo,yo:real;

h,hl: handle;

begin

DSelectAll;

kop:=Pkop;
ab:=Pab;
db:=Pdb;
d:=Pd;

BeginXtrd(0,d);
GetRect(x,y,x1,y1);
Rect(x,y,x1,y1);
EndXtrd;

h:=LNewObj;
hl:=MakePolyline(h);

end;
run(kopplaat);

but when I make it on this way de errors are ( see pict 2)

second problem the script doesn't' work in other views than 2d plan

kind regards and thank you

Posted (edited)

tismacfan2,
You have defined "ab" and "db" to be REAL numbers. If I translate "Keuzelijst" correctly it means "pick list", or "pop-up" in the English version of VW. The value of "Pab" will be of type STRING, even if the data in "Pab" represents a number.  All elements in a Pop-up list are of type STRING. You will have to use Str2Num() to make the assignment.

TRY:
ab := Str2Num(Pab);

db := Str2Num(Pdb);

Your parameter "Pd" should be a number as its type is Afmeting, or Dimension. It's possible the error on line #15 will go away when the errors on the previous lines are corrected.

Raymond

Edited by MullinRJ

Dear Raymond

I have change the script in this way

Procedure kopplaat;
var
x,y,x1,y1,xo,yo:real;
ab,db:string;

h,hl: handle;

begin
ab := Str2Num(Pab);
db := Str2Num(Pdb);

DSelectAll;

BeginXtrd(0,0);
GetRect(x,y,x1,y1);
Rect(x,y,x1,y1);
EndXtrd;

h:=LNewObj;
hl:=MakePolyline(h);

end;
run(kopplaat);

And the error list you can find in the file.

What have I to use if I want put text in it.

kop must give a result in text.

Thank you very much

Pascal

Pascal,

From your original script, I assume you want to use "ab" and "db" as real numbers. The values stored in the Plug-in that you reference as "Pab" and "Pdb" are STRINGs. To use them as numbers you use the Str2Num() function. You need to leave the original type declaration for "ab" and "db" as REAL.

So:
VAR
ab, db :REAL;
...
BEGIN
ab := Str2Num(Pab);        { converts Pab from STRING to REAL }
db := Str2Num(Pdb);        { converts Pdb from STRING to REAL }

...

This should make your code snippet compile.

HTH,

Raymond

Raymond

I have stil some problems and questions about my script

Procedure kopplaat;
var
ab,db,kop,x,y,x1,y1,xo,yo:real;
h,hl: handle;

begin
ab := Str2Num(Pab);
db := Str2Num(Pdb);
kop:=Pkop;

DSelectAll;

BeginXtrd(0,d);
GetRect(x,y,x1,y1);
Rect(x,y,x1,y1);
EndXtrd;

h:=LNewObj;
hl:=MakePolyline(h);

end;
run(kopplaat);

1.

I put a text Kop to real, this must give me the possibility to put text in the info pallet. ( for the moment error see pict)

What can I do to solve this.

2. in the row BeginXrd(0,d) I put a parameter d ( this must me give the possibility to put a value in the info pallet, with give me the thickness of the extrusion. ( but als error)

where must I put the "d" is that also by real?

3. When I select the "kopplaat" wich I have drawn I don't see in the info pallet kopplaat but only extortion and I don't see in field to put my ab, or db, kop or tickness in ( see fig)

4. how can I solve that the rectangle will be drawn in every view, front, behind, left or right. For the moment it go only in 2d

Can you help me further please.

thank you very much

Pascal

The compile error is because you have not defined variable "d" anywhere. Is it supposed to be a parameter or just a variable? It looks like you want it to be a Parameter, do it should be used as BeginXrd(0,Pd) and d needs to be defined in the Parameter settings of the PlugIn.

Pat,

I don't have any errors anymore in my script with your tips, but why don't I see the settings of the script in the info pallet?

In the info pallet I only see Extrusie(extrusion) and not the name of my script " kopplaat linck" (pict 1)

And I can't also not give the values in the info pallet of db, ab, kop (pict 2)

here is the script without errors.

Procedure kopplaat;
var
ab,db,kop,d,x,y,x1,y1,xo,yo:real;
h,hl: handle;

begin
ab := Str2Num(Pab);
db := Str2Num(Pdb);
kop:=Str2Num(pkop);

DSelectAll;

BeginXtrd(0,pd);
GetRect(x,y,x1,y1);
Rect(x,y,x1,y1);
EndXtrd;

h:=LNewObj;
hl:=MakePolyline(h);

end;
run(kopplaat);

Thank you

Pascal

It sounds like you have not created a PlugIn object but rather just a script. You can't have parameters show in the OIP from a script, but you can from a PlugIn.

Copy the script and go to the PlugIn Editor. Create a new PlugIn. Paste the script into the Script pane. Edit the Parameters pane to show all of the items you want to display in the OIP, but with just the name without the P in front.

You should probably read the section on the Vectorscript Language Guide on PlugIns before you proceed.

## Create an account

Register a new account