Jump to content
EduardoS

Just Sharing

Recommended Posts

I don't know if it can be usefull to someone, but I'm sharing a script to make a custom grid.

Forgive me if I mismatched some translation to english.

I just couldn't place the fill box for space/lenght at it's right and properly aligned to its bottom, placed it under. Guess is due it is a swap pane.

 

 

PROCEDURE CustomGrid;

VAR
    DH, LH, PH, QH, DV, LV, PV, QV, LM, PM :INTEGER;
    DisH, LarH, ProH, Quah, DisV, LarV, ProV, QuaV, LarM, ProM :INTEGER;
    ALT, LAR, EH, EV, Un0, Un1, pX, pY :REAL;
    EC, ROh, ROv, TM :BOOLEAN;
    h1, h2, h3 : HANDLE;
    id :LONGINT;
    
PROCEDURE Dialog_Setup;

BEGIN
    id:=CreateLayout('Custom Grid',FALSE,'OK','Cancel');
    
        CreateStaticText(id, 4,'Space Between or Lenght of Bars?',50);
        SetFirstLayoutItem(id, 4);
        
        CreateGroupBox(id, 10,'RB 1',FALSE);
        SetBelowItem(id, 4, 10, 0, 0);
            CreateRadioButton(id, 11,'Space');
            SetFirstGroupItem(id, 10, 11);
            CreateRadioButton(id, 12,'Lenght');
            SetBelowItem(id, 11, 12, 0, 0);
            
        CreateGroupBox(id, 5,'Horizontal Bars:',TRUE);
        SetBelowItem(id, 10, 5, 0, 0);
            CreateSwapControl (id, 20);
            SetFirstGroupItem(id, 5, 20);
                CreateGroupBox (id, 21, 'SP 1', FALSE);
                    CreateStaticText(id, 22,'Space:',15);
                    SetFirstGroupItem(id, 21, 22);
                CreateGroupBox (id, 23, 'SP 2', FALSE);
                    CreateStaticText(id, 24,'Lenght:',15);
                    SetFirstGroupItem(id, 23, 24);
                CreateSwapPane (id, 20, 21);
                CreateSwapPane (id, 20, 23);
                CreateEditInteger(id, 25, 0, 6);
                    SetBelowItem(id, 21, 25, 0, 0);
                    
            CreateStaticText(id, 51,'Thickness:',13);
            SetBelowItem(id, 20, 51, 0, 0);
            CreateEditInteger(id, 52, 0, 6);
            SetRightItem(id, 51, 52, 0, 0);
            CreateStaticText(id, 53,'Depth:',13);
            SetBelowItem(id, 51, 53, 0, 0);
            CreateEditInteger(id, 54, 0, 6);
            SetRightItem(id, 53, 54, 0, 0);
            CreateStaticText(id, 55,'N of Bars:',13);
            SetBelowItem(id, 53, 55, 0, 0);
            CreateEditInteger(id, 56, 0, 6);
            SetRightItem(id, 55, 56, 0, 0);
            
            CreateRadioButton (id, 57,'Retangle Profile');
            SetBelowItem (id, 55, 57, 0, 0);
            CreateRadioButton (id, 58,'Oval Profile');
            SetBelowItem (id, 57, 58, 0, 0);
            
            AlignItemEdge (id, 56, 1, 1, 0);
            AlignItemEdge (id, 25, 1, 1, 1);
            SetEdgeBinding (id, 25, TRUE, TRUE, FALSE, FALSE );
            
        CreateGroupBox(id, 6,'Vertical Bars:',TRUE);
        SetRightItem(id, 5, 6, 0, 0);
            CreateSwapControl (id, 30);
            SetFirstGroupItem(id, 6, 30);
                CreateGroupBox (id, 31, 'SP 1', FALSE);
                    CreateStaticText(id, 32,'Space:',15);
                    SetFirstGroupItem(id, 31, 32);
                CreateGroupBox (id, 33, 'SP 2', FALSE);
                    CreateStaticText(id, 34,'Lenght:',15);
                    SetFirstGroupItem(id, 33, 34);
                CreateSwapPane (id, 30, 31);
                CreateSwapPane (id, 30, 33);
                CreateEditInteger(id, 35, 0, 6);
                    SetBelowItem(id, 31, 35, 0, 0);
                    
            CreateStaticText(id, 61,'Thickness:',13);
            SetBelowItem(id, 30, 61, 0, 0);
            CreateEditInteger(id, 62, 0, 6);
            SetRightItem(id, 61, 62, 0, 0);
            CreateStaticText(id, 63,'Depth:',13);
            SetBelowItem(id, 61, 63, 0, 0);
            CreateEditInteger(id, 64, 0, 6);
            SetRightItem(id, 63, 64, 0, 0);
            CreateStaticText(id, 65,'N of Bars:',13);
            SetBelowItem(id, 63, 65, 0, 0);
            CreateEditInteger(id, 66, 0, 6);
            SetRightItem(id, 65, 66, 0, 0);
            
            CreateRadioButton (id, 67,'Retangle Profile');
            SetBelowItem (id, 65, 67, 0, 0);
            CreateRadioButton (id, 68,'Oval Profile');
            SetBelowItem (id, 67, 68, 0, 0);
            
            AlignItemEdge (id, 66, 1, 2, 0);
            AlignItemEdge (id, 35, 1, 2, 1);
            SetEdgeBinding (id, 35, TRUE, TRUE, FALSE, FALSE );
            
        CreateCheckBoxGroupBox(id, 7,'Has Frame?',FALSE);
        SetBelowItem(id, 5, 7, 0, 0);
            CreateStaticText(id, 40,'Thickness:',13);
            SetFirstGroupItem(id, 7, 40);
            CreateEditInteger(id, 41, 0, 6);
            SetRightItem(id, 40, 41, 0, 0);
            CreateStaticText(id, 42,'Depth:',13);
            SetRightItem(id, 41, 42, 0, 0);
            CreateEditInteger(id, 43, 0, 6);
            SetRightItem(id, 42, 43, 0, 0);
            
            AlignItemEdge (id, 51, 3, 3, 0);
            AlignItemEdge (id, 40, 3, 3, 1);
            SetEdgeBinding (id, 40, TRUE, TRUE, FALSE, FALSE );
            
            AlignItemEdge (id, 52, 3, 4, 0);
            AlignItemEdge (id, 41, 3, 4, 1);
            SetEdgeBinding (id, 41, TRUE, TRUE, FALSE, FALSE );
            
            AlignItemEdge (id, 61, 3, 5, 0);
            AlignItemEdge (id, 42, 3, 5, 1);
            SetEdgeBinding (id, 42, TRUE, TRUE, FALSE, FALSE );
            
            AlignItemEdge (id, 62, 3, 6, 0);
            AlignItemEdge (id, 43, 3, 6, 1);
            SetEdgeBinding (id, 43, TRUE, TRUE, FALSE, FALSE );
        
        CreateStaticText(id, 8,'After the OK, Click Where to Place it.',50);
        SetBelowItem(id, 7, 8, 0, 0);
END;

PROCEDURE Dialog_Handler(VAR item :LONGINT; data :LONGINT);

BEGIN
    CASE item OF
        SetupDialogC: BEGIN
        END;
        1: BEGIN
        GetBooleanItem(id, 11, EC);
        
        IF GetEditInteger(id,25,DisH)
        AND GetEditInteger(id,52,LarH)
        AND GetEditInteger(id,54,ProH)
        AND GetEditInteger(id,56,QuaH) THEN
            DH:= DisH;
            LH:= LarH;
            PH:= ProH;
            QH:= QuaH;
            GetBooleanItem(id, 57, ROh);
            
        IF GetEditInteger(id,35,DisV)
        AND GetEditInteger(id,62,LarV)
        AND GetEditInteger(id,64,ProV)
        AND GetEditInteger(id,66,QuaV) THEN
            DV:= DisV;
            LV:= LarV;
            PV:= ProV;
            QV:= QuaV;
            GetBooleanItem(id, 67, ROv);
            
        GetBooleanItem(id, 7, TM);
            IF TM THEN BEGIN
                IF GetEditInteger(id,41,LarM)
                AND GetEditInteger(id,43,ProM) THEN
                LM:= LarM;
                PM:= ProM
            END;
        END;
        11: BEGIN
            DisplaySwapPane(id, 20, 1);
            DisplaySwapPane(id, 30, 1);
        END;
        12: BEGIN
            DisplaySwapPane(id, 20, 2);
            DisplaySwapPane(id, 30, 2);
        END;
    END;
END;
        
BEGIN
    Dialog_Setup;
    IF RunLayoutDialog (id, Dialog_Handler) = 1 THEN BEGIN
    GetPt(pX, pY);
    BeginGroup;
    
        IF EC THEN BEGIN
            ALT:=DH*(QH+1)+QH*LH;
            LAR:=DV*(QV+1)+QV*LV;
            EH:=DH;
            EV:=DV;
            END
        ELSE BEGIN
            LAR:=DH;
            ALT:=DV;
            EH:=(DV-QH*LH)/(QH+1);
            EV:=(DH-QV*LV)/(QV+1);
        END;
        
        IF ROh THEN BEGIN
        Un0:=pX-ALT/2+EH;
        Un1:=pX+ALT/2-EH;
            BeginXtrd(-LAR/2, LAR/2);
            REPEAT
            Rect(Un0,pY-PH/2,Un0+LH,pY+PH/2);
            Un0:=Un0+LH+EH;
            UNTIL(Un0>Un1);
            EndXtrd;
            h1:= LNewObj;
            Set3DRot(h1, 0, 90, 0, pX, pY, 0);
            Move3D(0, 0, ALT/2);
            END
        ELSE BEGIN
        Un0:=pX-ALT/2+EH;
        Un1:=pX+ALT/2-EH;
            BeginXtrd(-LAR/2, LAR/2);
            REPEAT
            Oval(Un0,pY-PH/2,Un0+LH,pY+PH/2);
            Un0:=Un0+LH+EH;
            UNTIL(Un0>Un1);
            EndXtrd;
            h2:= LNewObj;
            Set3DRot(h2, 0, 90, 0, pX, pY, 0);
            Move3D(0, 0, ALT/2);    
        END;
        
        IF ROv THEN BEGIN
        Un0:=pX-LAR/2+EV;
        Un1:=pX+LAR/2-EV;
            BeginXtrd(0, ALT);
            REPEAT
            Rect(Un0,pY-PH/2,Un0+LV,pY+PH/2);
            Un0:=Un0+LV+EV;
            UNTIL(Un0>Un1);
            EndXtrd;    
            END
        ELSE BEGIN
        Un0:=pX-LAR/2+EV;
        Un1:=pX+LAR/2-EV;
            BeginXtrd(0, ALT);
            REPEAT
            Oval(Un0,pY-PH/2,Un0+LV,pY+PH/2);
            Un0:=Un0+LV+EV;
            UNTIL(Un0>Un1);
            EndXtrd;    
        END;
        
        IF TM THEN BEGIN
            BeginXtrd(-LAR/2, LAR/2);
            Rect(pX-ALT/2-LM,pY-PM/2,pX-ALT/2,pY+PM/2);
            Rect(pX+ALT/2,pY-PM/2,pX+ALT/2+LM,pY+PM/2);
            EndXtrd;    
            h3:= LNewObj;
            Set3DRot(h3, 0, 90, 0, pX, pY, 0);
            Move3D(0, 0, ALT/2);
            BeginXtrd(-LM, ALT+LM);
            Rect(pX-LAR/2-LM,pY-PM/2,pX-LAR/2,pY+PM/2);
            Rect(pX+LAR/2,pY-PM/2,pX+LAR/2+LM,pY+PM/2);
            EndXtrd;                
        END;
    EndGroup;
    END;
END;

RUN (CustomGrid);

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


 

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.

×
×
  • Create New...