高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】hatch oibjects 9solid0 legacy verses dwgdirec
hatch oibjects (solid) legacy verses dwgdirect
hatch oibjects (solid) legacy verses dwgdirect
my legacy code is below. before i do a dwgdirect version, can i ask that i have understood help / sample files correctly?
1. create a oddbhatch object and add it to modelspace on the right layer and with the required colour (don't want bylayer).
2. setits style as knormal and pattern as kpredefined, "solid"
3. create a set of odgepoint2darray and odgedoublearray objects and use the appendloop method. the first loop appended will be kexternal|kpolyline. the remaining ones will be koutermost|kpolyline.
4. append a seed for the hatch (0,0).
have i understood it correctly? would the above method port across the code below correctly? i notice no match for saying ".solidfill = ".
lastly, the example leaves the vertexbulges array as empty. i assume this is ok to do (i won't have any bulges).
thanks for you help.
andrew
code:
void createhatchobject(ad_db_handle hdrawing,
ad_vmaddr adentlist,
cregion *pregion,
ad_objhandle hlayer,
int icolour)
{
ad_ent_hdr entheader;
ad_ent entobject;
pad_blob_ctrl pblob;
double dpoint[2], x, y, z;
long ltempvalue;
int isegment, inumsegments, ihole, inumholes;
cregion *phole;
if(pregion != null)
{
// default information
entheader.enttype = adhatchenttype(hdrawing);
adsetentitydefaults(hdrawing, &entheader, &entobject);
adgenerateobjhandle(hdrawing, entheader.enthandle);
// set layer
adhancpy(entheader.entlayerobjhandle, hlayer);
entheader.entcolor = icolour;
strcpy(entobject.hatch.name, "solid");
entobject.hatch.solidfill = true;
entobject.hatch.numpaths = (long)pregion->getnumholes() + 1l;
entobject.hatch.pathblob = adcreateblob();
pblob = adstartblobwrite(entobject.hatch.pathblob);
// external boundary
ltempvalue = ad_hatch_pathflag_external;
adwritebloblong(pblob, <empvalue);
// segment information
inumsegments = pregion->getnumpoints() - 1;
ltempvalue = (long)inumsegments;
adwritebloblong(pblob, <empvalue);
for(isegment = 0; isegment < inumsegments; isegment++)
{
adwriteblobbyte(pblob, ad_hatch_pathtype_line);
pregion->getpoint(isegment, x, y, z);
dpoint[0] = x;
dpoint[1] = y;
adwriteblob2double(pblob, dpoint);
pregion->getpoint(isegment + 1, x, y, z);
dpoint[0] = x;
dpoint[1] = y;
adwriteblob2double(pblob, dpoint);
}
ltempvalue = 0l;
adwritebloblong(pblob, <empvalue);
// now, internal boundaries (holes)
inumholes = pregion->getnumholes();
for(ihole = 0; ihole < inumholes; ihole++)
{
phole = pregion->gethole(ihole);
ltempvalue = ad_hatch_pathflag_outermost;
adwritebloblong(pblob, <empvalue);
// segment information
inumsegments = phole->getnumpoints() - 1;
ltempvalue = (long)inumsegments;
adwritebloblong(pblob, <empvalue);
for(isegment = 0; isegment < inumsegments; isegment++)
{
adwriteblobbyte(pblob, ad_hatch_pathtype_line);
phole->getpoint(isegment, x, y, z);
dpoint[0] = x;
dpoint[1] = y;
adwriteblob2double(pblob, dpoint);
phole->getpoint(isegment + 1, x, y, z);
dpoint[0] = x;
dpoint[1] = y;
adwriteblob2double(pblob, dpoint);
}
ltempvalue = 0l;
adwritebloblong(pblob, <empvalue);
}
adendblobwrite(pblob);
entobject.hatch.style = ad_hatch_style_normal;
entobject.hatch.patterntype = ad_hatch_patterntype_predefined;
// seed information
entobject.hatch.numseedpoints = 1l;
entobject.hatch.seedpointblob = adcreateblob();
pblob = adstartblobwrite(entobject.hatch.seedpointblob);
dpoint[0] = dpoint[1] = 0.0;
adwriteblob2double(pblob, dpoint);
adendblobwrite(pblob);
adaddentitytolist(hdrawing, adentlist, &entheader, &entobject);
}
}
|