![]() |
【转帖】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); } } |
所有的时间均为北京时间。 现在的时间是 07:38 PM. |