yucad3d

Create a Hatch

Build a boundary from entities (arc, lines, circles, a polyline) with CadAddHatchPath, then fill it with an ANSI31 pattern.

// 3 — Create Hatch object (hatch.htm)
static void samp_hatch() {
    samp_clear();
    int o;
    o = CadAddArc(g_hDwg, 0,0,0, 50, 0, 3.14159265); CadAddHatchPath(g_hDwg, o);
    o = CadAddLine(g_hDwg, -50,0,0, 0,-50,0);         CadAddHatchPath(g_hDwg, o);
    o = CadAddLine(g_hDwg, 0,-50,0, 50,0,0);          CadAddHatchPath(g_hDwg, o);
    o = CadAddCircle(g_hDwg, 20,20,0, 5);             CadAddHatchPath(g_hDwg, o);
    o = CadAddCircle(g_hDwg, -20,20,0, 5);            CadAddHatchPath(g_hDwg, o);
    CadClearVertices(); CadAddVertex(-20,-10,0); CadAddVertex(0,20,0); CadAddVertex(20,-10,0);
    o = CadAddPolyline(g_hDwg, CAD_PLINE_LINEAR, CAD_TRUE); CadAddHatchPath(g_hDwg, o);
    CadAddHatch(g_hDwg, "hatches.pat", "ANSI31", 20, 0);
    CadUpdate(g_hDwg);
    CadViewRect(g_hDwg, samp_wnd(), -60,-60, 60,60); refresh_tabs();
    set_status(L"Sample 3: Hatch — compare to hatch.gif");
}
    3: begin
         CadPurge(FhDwg, CAD_CLEAR_ENTITIES);
         o := CadAddArc(FhDwg, 0,0,0, 50, 0, 3.14159265);  CadAddHatchPath(FhDwg, o);
         o := CadAddLine(FhDwg, -50,0,0, 0,-50,0);         CadAddHatchPath(FhDwg, o);
         o := CadAddLine(FhDwg, 0,-50,0, 50,0,0);          CadAddHatchPath(FhDwg, o);
         o := CadAddCircle(FhDwg, 20,20,0, 5);             CadAddHatchPath(FhDwg, o);
         o := CadAddCircle(FhDwg, -20,20,0, 5);            CadAddHatchPath(FhDwg, o);
         CadClearVertices; CadAddVertex(-20,-10,0); CadAddVertex(0,20,0); CadAddVertex(20,-10,0);
         o := CadAddPolyline(FhDwg, CAD_PLINE_LINEAR, CAD_TRUE); CadAddHatchPath(FhDwg, o);
         CadAddHatch(FhDwg, PAnsiChar(AnsiString('hatches.pat')), PAnsiChar(AnsiString('ANSI31')), 20, 0);
         CadUpdate(FhDwg);
         CadViewRect(FhDwg, FCadHwnd, -60,-60, 60,60);
         StatusBar.SimpleText := 'Sample 3: Hatch — compare to hatch.gif';
       end;
    4: begin
         CadPurge(FhDwg, CAD_CLEAR_ENTITIES);
         x1:=10; y1:=10; x2:=70; y2:=10; x3:=70; y3:=45;
         CadPutLwDisplay(FhDwg, 1); CadSetCurLweight(FhDwg, CAD_LWEIGHT_050);
         CadAddVertex(x1,y1,0); CadAddVertex(x2,y2,0); CadAddVertex(x3,y3,0);
         CadAddPolyline(FhDwg, CAD_PLINE_LINEAR, 1);
         CadSetCurLweight(FhDwg, CAD_LWEIGHT_BYLAYER);
         CadAddDimPoint(0,x1,y1,0); CadAddDimPoint(1,x2,y2,0); CadAddDimPoint(2,x2,y2-6,0); CadAddDim(FhDwg, CAD_DIM_HOR);
         CadAddDimPoint(0,x2,y2,0); CadAddDimPoint(1,x3,y3,0); CadAddDimPoint(2,x2+6,y2,0); CadAddDim(FhDwg, CAD_DIM_VER);
         CadAddDimPoint(0,x1,y1,0); CadAddDimPoint(1,x3,y3,0); CadAddDimPoint(2,x1,y1+8,0); CadAddDim(FhDwg, CAD_DIM_ALIGNED);
         CadAddDimPoint(0,x2,y2,0); CadAddDimPoint(1,x3,y3,0); CadAddDimPoint(2,x1,y1,0);
         CadAddDimPoint(3,x1+(x2-x1)*0.8,y1,0); CadAddDim(FhDwg, CAD_DIM_ANG3P);
         CadUpdate(FhDwg); CadExecute(FhDwg, FCadHwnd, CAD_CMD_ZOOM_EXT);
         StatusBar.SimpleText := 'Sample 4: Dimensions — compare to dimens.gif';
       end;
    5: begin
         CadPurge(FhDwg, CAD_CLEAR_ENTITIES);
         lt := CadAddLinetype(FhDwg, PAnsiChar(AnsiString('Gas')), PAnsiChar(AnsiString('3,-1.7,[arial.yucf,T=GAS,F=1,S=1,R=0.0,X=-1.4,Y=-.5],-1.7,1,-1.1,[Ltype,T=OK,F=1,S=1.0,R=0.0,X=-0.9,Y=-.5],-1.1')), PAnsiChar(AnsiString('-- GAS --- OK --- GAS --')));
         CadSetCurLinetype(FhDwg, lt); CadAddLine(FhDwg, 0,0,0, 31,0,0);
         lt := CadAddLinetype(FhDwg, PAnsiChar(AnsiString('Face2')), PAnsiChar(AnsiString('1.5,-1,[arial.yucf,U=263a,F=1,S=2.0,X=-1.4,Y=-0.7],-1,0.5,-1,[Ltype,U=263b,F=1,R=45,S=2.0,X=-0.55,Y=-1.5],-1')), PAnsiChar(AnsiString('--F-F---F-F---F-F--')));
         CadSetCurLinetype(FhDwg, lt); CadAddLine(FhDwg, 0,3.5,0, 31,3.5,0);
         lt := CadAddLinetype(FhDwg, PAnsiChar(AnsiString('Notes')), PAnsiChar(AnsiString('1,-1,[arial.yucf,U=266b,S=1.0,X=-0.5,Y=-0.5],-1')), PAnsiChar(AnsiString('-- note --- note --- note --')));
         CadSetCurLinetype(FhDwg, lt); CadAddLine(FhDwg, 0,7,0, 31,7,0);
         CadRegen(FhDwg); CadExecute(FhDwg, FCadHwnd, CAD_CMD_ZOOM_EXT);
         StatusBar.SimpleText := 'Sample 5: complex linetypes — compare to linetype.gif';
       end;
    6: begin
         CadPurge(FhDwg, CAD_CLEAR_ENTITIES);
         ee[0] := CadAddLine(FhDwg, 0,0,0, 0,1,0);         CadEntityPutColor(ee[0], CAD_COLOR_RED);
         ee[1] := CadAddLine(FhDwg, -0.866,-0.5,0, 0,0,0); CadEntityPutColor(ee[1], CAD_COLOR_GREEN);
         ee[2] := CadAddLine(FhDwg, 0.866,-0.5,0, 0,0,0);  CadEntityPutColor(ee[2], CAD_COLOR_BLUE);
         hBlock := CadAddBlock(FhDwg, PAnsiChar(AnsiString('3line')), 0,0,0);
         if hBlock <> 0 then
         begin
           CadBlockAddEntity(hBlock, ee[0]); CadBlockAddEntity(hBlock, ee[1]); CadBlockAddEntity(hBlock, ee[2]);
           id := CadBlockGetID(hBlock);
           CadAddInsBlock(FhDwg, id, 0,0,0, 1.0, 0);
           CadAddInsBlockM(FhDwg, id, 3,0,0, 1.0, 0, 8,3, 1.732, 3.0);
           CadAddInsBlockM(FhDwg, id, 3.866,1.5,0, 1.0, 0, 8,3, 1.732, 3.0);
           CadUpdate(FhDwg);
         end;
    private void SampleHatch()
    {
        SampleClear();
        int o;
        o = YuCadApi.CadAddArc(_hDwg, 0,0,0, 50, 0, 3.14159265); YuCadApi.CadAddHatchPath(_hDwg, o);
        o = YuCadApi.CadAddLine(_hDwg, -50,0,0, 0,-50,0);        YuCadApi.CadAddHatchPath(_hDwg, o);
        o = YuCadApi.CadAddLine(_hDwg, 0,-50,0, 50,0,0);         YuCadApi.CadAddHatchPath(_hDwg, o);
        o = YuCadApi.CadAddCircle(_hDwg, 20,20,0, 5);            YuCadApi.CadAddHatchPath(_hDwg, o);
        o = YuCadApi.CadAddCircle(_hDwg, -20,20,0, 5);           YuCadApi.CadAddHatchPath(_hDwg, o);
        YuCadApi.CadClearVertices();
        YuCadApi.CadAddVertex(-20,-10,0); YuCadApi.CadAddVertex(0,20,0); YuCadApi.CadAddVertex(20,-10,0);
        o = YuCadApi.CadAddPolyline(_hDwg, YuCadApi.CAD_PLINE_LINEAR, YuCadApi.CAD_TRUE);
        YuCadApi.CadAddHatchPath(_hDwg, o);
        YuCadApi.CadAddHatch(_hDwg, "hatches.pat", "ANSI31", 20, 0);
        YuCadApi.CadUpdate(_hDwg);
        YuCadApi.CadViewRect(_hDwg, VWnd, -60,-60, 60,60);
        SetStatus("Sample 3: Hatch — compare to hatch.gif");
    }
This code is extracted verbatim from the shipped demo hosts (examples/cpp, examples/delphi, examples/csharp) — run the matching menu item there to see it live.