Jump to content


  • Posts

  • Joined

  • Last visited

Posts posted by rebu1985

  1. Hi Jesse,
    I have attached some images.

    The first and second images show the script working properly, all the elements are located in a one layer and the script works.

    The third and fourth images show the script without working. I have copied all the elements to others layers and it doesnt work.
    I am using Vectoworks 2020 and i am using a personal workspace but i have the same problem when i am working on the architect workspace. When i am working on personal drawings with a lot of information it doesnt work either.






  2. Hi guys,

    I write you because in a newer version of vectorworks I cant run the scrip properly and I dont know why.

    I have used Pat¬īs scrip in VW2015 but in version 2020 I have the problems of selecting the layers, the only option I can do is selecting all/none. Can you help me, guys?


    PROCEDURE LB_LayerList;

    dialog1 : LongInt;
    kImageCheck,kImageBlank,kImageSheet,kImageView : Integer;
    LayerArray : DYNARRAY[] of String;
    NumLayers, N1, CheckedLayers : Integer;

    FirstObjectToCopy : Handle;
    ThisObjectToCopy : Handle;

    LayerToCopyFrom : Handle;
    LayerNameToCopyFrom : String;
    ThisLayer : String;
    ThisDuplicate : Handle;

    FUNCTION GetPlugInString(ndx :INTEGER) :STRING;
                CASE ndx OF
                    {Static Text}
                    3001: GetPlugInString := 'OK';
                    3002: GetPlugInString := 'Cancel';
                    3003: GetPlugInString := 'Layers';
        PROCEDURE Dialog_Setup;
                cnt : INTEGER;
                BSB : Boolean;
                dialog1 := CreateResizableLayout (GetPlugInString(3003),TRUE,GetPlugInString(3001),GetPlugInString(3002),TRUE,TRUE);

                SetFirstLayoutItem(dialog1, 4);




        PROCEDURE Dialog_Handler(VAR item :LONGINT; data :LONGINT);
                ColNum,TempI,I : Integer;
                SheetTypeIcon : Integer;
                BSB : Boolean;
                BSS : String;
                LayerHand : Handle;
                LayerName,SelectedIconString : String;
                SheetIconNumber,SelectedIconNumber : Integer;
                CASE item OF
                        {These need to be declared as globals otherwise they won't work outside of setup.}
                        kImageCheck := AddLBImage(dialog1,4,1,11022);
                        kImageBlank := AddLBImage(dialog1,4,1,11023);
                        kImageSheet := AddLBImage(dialog1,4,1,11024);
                        kImageView := AddLBImage(dialog1,4,1,11025);
                        ColNum := InsertLBColumn(dialog1,4,0,'Copy To',50);
                        BSB := SetLBControlType(dialog1,4,ColNum,3);
                        BSB := SetLBItemDisplayType(dialog1,4,ColNum,1);
                        BSB := SetLBColumnWidth(dialog1,4,0,0,20);

                        {ColNum := InsertLBColumn(dialog1,4,0,'',50);}{This crashes VW}
                        ColNum := InsertLBColumn(dialog1,4,1,'Layer Name',100);
                        BSB := SetLBControlType(dialog1,4,ColNum,1);
                        BSB := SetLBItemDisplayType(dialog1,4,ColNum,3);
                        BSB := SetLBColumnWidth(dialog1,4,1,1,200);
                        ColNum := InsertLBColumnDataItem(dialog1,4,0,'Checked',kImageCheck,-1,0);
                        ColNum := InsertLBColumnDataItem(dialog1,4,0,'UnChecked',kImageBlank,-1,0);
                        {Traversing from LLayer by PrevObj doesn't work with Sheet Layers}
                        LayerHand := FLayer;
                        I := 0;
                        While LayerHand <> NiL do
                                If GetObjectVariableInt(LayerHand,154) = 2 then
                                    SheetTypeIcon := kImageSheet
                                else    SheetTypeIcon := kImageView;
                                ColNum := InsertLBColumnDataItem(dialog1,4,1,GetLName(LayerHand),SheetTypeIcon,SheetTypeIcon,0);
                                TempI := InsertLBItem (dialog1, 4, I, GetLName(LayerHand));
                                BSB := SetLBItemUsingColumnDataItem (dialog1, 4, I, 1, ColNum);
                                BSB := SetLBItemUsingColumnDataItem (dialog1, 4, I, 0, 1);
                                I := I+1;
                                LayerHand := NextObj(LayerHand);
                    1:    BEGIN
                            Allocate LayerArray[1..NumLayers];
                            For I := 1 to NumLayers do 
                                    BSB := GetLBItemInfo(dialog1,4,I-1,1,LayerName,SheetIconNumber);
                                    BSB := GetLBItemInfo(dialog1,4,I-1,0,SelectedIconString,SelectedIconNumber);
                                    If SelectedIconString = 'Checked' then
                                            CheckedLayers := CheckedLayers+1;
                                            If SheetIconNumber = kImageSheet then
                                            If SheetIconNumber = kImageView then 
                                        End;        {If}
                                End;        {For}
                        End;        {1}

                    5:    Begin       
                            For i:=0 to GetNumLBItems(dialog1, 4)Do 
                                End;        {For}
                        End;        {5}

                    6:    Begin
                            For I := 0 to GetNumLBItems(dialog1,4) do
                                end;        {For}
                        end;        {6}

                END; {Case}
            END; {Procedure}

        function ResourceIsOK :BOOLEAN;
                IF SetVSResourceFile('IP Resources') 
                    THEN ResourceIsOK := TRUE
                ELSE Message('The "IP Resources" file was not found.');

    BEGIN {Main}
        FirstObjectToCopy := FSActLayer;
        LayerToCopyFrom := ActLayer;
        LayerNameToCopyFrom := GetLName(LayerToCopyFrom);

        IF ResourceIsOK THEN Dialog_Setup;
        IF RunLayoutDialog(dialog1,Dialog_Handler) = 1 THEN 
                For N1 := 1 to CheckedLayers do
                        If ThisLayer <> LayerNameToCopyFrom Then
                                ThisObjectToCopy := FirstObjectToCopy;
                                While ThisObjectToCopy <> Nil do
                                        ThisDuplicate := CreateDuplicateObject(ThisObjectToCopy,GetLayerByName(ThisLayer));
                                        ThisObjectToCopy := NextSObj(ThisObjectToCopy);
                            End; {If}
                    End; {For}
            END; {If}



  3. I have tried to do that but when I work with Database, the reference doesnt indicate the subrow, just indicate the total of the sum value/item. I would like to indice 'Worksheet-1':A4.1 but it doesnt work.
    I have resolved it creating two record formats, left and right openings and applying the record format manually to the doors and i dont need to reference the file.

  4. Hi guys, 

    I am trying to reference cells from different worksheet to obtain the total of doors in a project. The only way that i know its just create a worksheet an copy all the information from the others worksheets. But i am a bit scared of lossing information when i am going to change something because the cells are not connected between them, they are copied.

    I am going to attach some images.

    The image 1 includes cells copied from the database of the others images.




  5. Hi guys,


    I have a file A and I have a file B. The file B contains imported layers from file A where all layers are locked because I need to use in Lumion but at the same time it needs to be updated to show the external facade.

    My problem is when i try to change a class, wall, component, etc on file B because i need for Lumion, automatically it is disappearing when the external reference is updated. If it is any way to keep the new changes on the file B without changing by file A external reference updated?


    Thanks guys!

  6. Hi guys,

    I would like to know if it is possible to show the information from a layer link in a referenced file. 

    I have a file referenced to another one, where i just want to show the exterior facade. On the other one, the floors are done by layer links because all floors are duplicated.

    But when i open the file and active all exterior elements (wall, windows, doors, etc.), classes, and all layers, it doesnt show it.

  7. Hi guys,


    I would like to know if there is anyway to indicate tolerance in walls. When i have created walls in different layers or stories, the front view shows a line between them when they should be aligned.

    You can find below an image of my elevation where i have indicated in yellow the line as partition wall when it should be continuos because they are in the same plane (aligned).


    Thank you guys,


  8. Hi guys,


    I have create simple rectangles with different start points. You can see below a sample of a rectangle.I would like to create at the same time a square filled in red which shows me the start point of the rectangle.

    I have attached an image which shows different options of start point where i would like to locate the red square.

    I need a reference point on the shape in case i need to rotate, move, etc.


    Thank you so much,


    PROCEDURE Rectangle;


    bc_ht,bc_wid        : REAL;     

    use_border,result : BOOLEAN;     

    objname                        : STRING;     

    oh,rh,wh                    : HANDLE;     



    result:= GetCustomObjectInfo(objname,oh,rh,wh);   


    IF result THEN BEGIN         

    bc_ht                := PBOXWIDTH;         

    bc_wid            := PLINELENGTH;         

    use_border    := PUSE_BORDER;     


    IF use_border THEN

    BEGIN             PushAttrs;             










    Captura de pantalla 2017-11-22 a las 10.43.36.png

  9. Hi Pat,

    I am going to explain it again but you are right. Sorry for my english.


    I work in 2d all time and both symbols (floor and elevation) and done in plan view 2d. I would like to show a copy of the respective elevation of the window in top view which i have drawn when i click on the window top plan which i have drawn as well on the  top view.

    I have drawn manually around symbols of 30 windows which their elevations. All of them have records formats so i think the best way as you said in connect them by a field and place a copy of the elevation symbol but i dont know how I can do it.


    Thanks Pat,

  10. Hi guys,


    I was wondering if it is possible to show on the drawing a symbol which i have created when I click on another symbol or write a name located on the record format of another symbol by a vectorscript.

    I have drawn a basic window shape with some information associated by a record format. At the same time I have drawn the elevation of that window. Both are different symbols. I would like to show on the drawing the elevation when i click on the window by a vectorscript. I have around 20 windows so the idea is to have a general vectorscript to show them or writing something of the record format.

    I have attached below an image of the idea.


    Thank you so much guys for your help.

    Captura de pantalla 2017-11-17 a las 9.58.13.png

  11. I found this topic online and I would like to copy in case someone can help me.

    "I would like to see the introduction of Rounding Precision similar to that of Dimensions however for Spaces:

    It is custom here to round off to the nearest square meter however I still want to see when drafting exactly what size the space has with at least an accuracy of 2 decimals."


    Im counting manually different areas within spaces to calculate the total square meters in a house and it is not the same value than in my worksheet when VW calculates the total. Is it possible to change it?
    Thanks, xx

  12. Hi guys,


    I would like to try to get a function or script which helps me to calculate automatically the final value attached to the end of a line adding pre-values along the path. As you can see guys below, depends on the value at the end of a line, the script should recognize the value range and show on the drawing the correct diameter dimension/text.

    I was thinking if its possible to attach a record format at the beginning of the paths when you select all the lines and create a script which recognize the lines intersections and show the correct value.

    Thanks guys!!

    Captura de pantalla 2017-04-25 a las 12.13.35.png

  13. Hi guys,


    I have done a script to hide some fields of the default PIO 'Desk' because I just need some parameters to work. The plug-in is compiled right but when its not working because nothing is done. My version is VW14.

    My idea is to create different script for default PIO doors and windows but using a few parameters. 


    My script is below:



    PROCEDURE Modifydesk;
    objHd: HANDLE;

    objHd:= GetObject('Desk');

        IF objHd=NIL THEN 
        EnableParameter(objHd, 'Leg Height', FALSE);
        SetParameterVisibility(objHd, 'Leg Height', FALSE);
    RUN (Modifydesk);

  14. Hi guys,


    I have created a predefined text style to use in my standard dimensions options. I was checking to change the text style manually and i cant do it because when i try it the text style changes to a new undefined one. I would like to know if its possible to create a script with modify any text style (font, size, etc) by myself. I was checking the function 'SetTextStyle' but i am not sure if its the correct one.


    For example: I have a text style called dimensions with Arial 8pt and bold and i would like to change by Calibri 10 pt and not font style.



  15. Hi MullinRJ,


    I have been working on your comments to do my script and i have done this. I still have some mistakes and i guess its about the array function.

    Could you help me, please?



    PROCEDURE dialogl_Main;
        dialog1 : INTEGER;

        PROCEDURE dialog1_Setup;
            dialog1 := CreateLayout( 'CreateListBox', FALSE, 'OK', 'Cancel' );
            CreateListBoxN( dialog1, 4, 30, 10, TRUE );
            SetFirstLayoutItem( dialog1, 4 );

        PROCEDURE Dialog_Handler(VAR item :LONGINT; data :LONGINT);
        i        : INTEGER;
        nl        : INTEGER;
        layers    : DYNARRAY OF STRING;
        h        : HANDLE;
            CASE item OF
                    AddChoice( dialog1, 4, 'PLANTA 1', 0 );
                    AddChoice( dialog1, 4, 'PLANTA 2', 0 );
                    AddChoice( dialog1, 4, 'PLANTA 3', 0 );
            1:    BEGIN
                GetSelectedChoiceInfo(dialog1, 4, 1, i, layers);
            4:    BEGIN
                Layers:=GetLNAME (h);
                DoMenuTextByName('Copy', 0);
                FOR i:=1 TO nl DO BEGIN
                DoMenuTextByName('Paste In Place', 0);

        IF RunLayoutDialog(dialog1, Dialog_Handler) = 1 THEN BEGIN


  16. hi guys,


    I have created my dialog code for copying objects to selected layers.

    All info which i have found its about copying objects to all layers but i would like to know how to do it if I just wanna duplicate to selected ones. I dont know how the script should be to transfer the info from the dialog to the object.


    PROCEDURE CreateDialog;

    VAR result : INTEGER;

    id : INTEGER;


    id := CreateLayout('Revise Layer Link',TRUE,'ok', 'Cancel');



    CreateGroupBox(id,6,'Layers Options',TRUE);

    CreateCheckBox(id,7,'Planta Sótano');

    CreateCheckBox(id,8,'Planta Baja');

    CreateCheckBox(id,9,'Planta 1');

    CreateCheckBox(id,10,'Planta 2');

    CreateCheckBox(id,11,'Planta 3');

    CreateCheckBox(id,12,'Planta 4');

    CreateCheckBox(id,13,'Planta 5');

    CreateCheckBox(id,14,'Planta 6');

    CreateCheckBox(id,15,'Planta 7');

    CreateCheckBox(id,16,'Planta 8');

    CreateCheckBox(id,17,'Planta Atico');

    CreateCheckBox(id,18,'Planta Cubierta');

    SetFirstLayoutItem(id, 4);

    SetBelowItem (id,4,6,0,0);


    SetBelowItem (id,7,8,0,0);

    SetBelowItem (id,8,9,0,0);

    SetBelowItem (id,9,10,0,0);

    SetBelowItem (id,10,11,0,0);

    SetBelowItem (id,11,12,0,0);

    SetBelowItem (id,12,13,0,0);

    SetBelowItem (id,13,14,0,0);

    SetBelowItem (id,14,15,0,0);

    SetBelowItem (id,15,16,0,0);

    SetBelowItem (id,16,17,0,0);

    SetBelowItem (id,17,18,0,0);



    result := RunLayoutDialog(id,NIL) END;
    RUN (CreateDialog);


  • Create New...