📄 chkanlnk.mc
字号:
void HookDispNAsc(DialogItemMessage *dimP)
{
int i;
int mTLineColor,mLevel;
short ViewList[MAX_VIEWS];
dimP->msgUnderstood=TRUE;
switch(dimP->messageType)
{
case DITEM_MESSAGE_BUTTON:
mTLineColor=0;
mLevel=59;
mdlParams_getActive(&g_CurColor,ACTIVEPARAM_COLOR);
mdlParams_getActive(&g_CurLevel,ACTIVEPARAM_LEVEL);
mdlParams_setActive(mLevel,ACTIVEPARAM_LEVEL);
mdlParams_setActive(mTLineColor,ACTIVEPARAM_COLOR); ///////
g_ViewMask=0;
for(i=0;i<MAX_VIEWS;i++)
{
if(g_NoteViewToggle.status[i])
g_ViewMask +=pow(2,i);
}
if(tEdP)
{
mdlTransient_free(&tEdP,TRUE);
tEdP=NULL;
}
if(g_Symbology.dispall==-1) //所有图形
{
for(i=0;i<MAX_VIEWS;i++)
ViewList[i]=1;
TurnOnAllLevels(ViewList,FALSE,FALSE);
TurnOnAllLevels(ViewList,TRUE,TRUE);
g_CurDispType=g_NoteType;
}
else
{
if(g_Symbology.dispheight==-1) //全部高程点和高程注记
{
DisplayHeightText();
g_CurDispType=g_NoteType;
}
else if(g_Symbology.dispnonlink==-1) //无关联的高程点和高程注记
{
DisplayNonHeightPTag();
g_CurDispType=g_NoteType;
}
}
if(g_Symbology.displink==-1) //注记关联关系
DisplayHeightPTag();
else
{
g_bExecUserUpdate=FALSE;
UpdateView();
g_bExecUserUpdate=TRUE;
}
mdlView_setFunction(UPDATE_PRE, UserUpdate);
g_CurDispType=g_NoteType;
break;
default:
dimP->msgUnderstood=FALSE;
}
}
void HookExitChkNA(DialogItemMessage *dimP)
{
dimP->msgUnderstood = TRUE;
switch (dimP->messageType){
case DITEM_MESSAGE_BUTTON:
RestoreNormal();
mdlDialog_cmdNumberQueue (FALSE, CMD_MDL_UNLOAD,mdlSystem_getCurrTaskID(), TRUE);
break;
default:
dimP->msgUnderstood = FALSE;
break;
}
}
void RestoreNormal(void)
{
int i;
if(tEdP){
mdlTransient_free(&tEdP,TRUE);
tEdP=NULL;
}
for(i=0;i<MAX_VIEWS;i++)
g_NoteViewToggle.status[i]=FALSE;
g_bExecUserUpdate=FALSE;
UpdateView();
g_MaxNote=0;
mdlView_setFunction(UPDATE_PRE,NULL);
mdlParams_setActive(g_CurLevel,ACTIVEPARAM_LEVEL);
mdlParams_setActive(g_CurColor,ACTIVEPARAM_COLOR);
}
/*------------------------------------------------------------
该函数根据上次视图是否用来显示FEATURE,以及当前选定的视图来决定
当前需要将哪些视图清除或全显,或根本不处理
-------------------------------------------------------------*/
Private void UpdateView(void)
{
int i;
short ViewList[MAX_VIEWS];
/*若选择了不同的关联方式,则选定的视图应该完全清除*/
if(g_CurDispType!=g_NoteType){
for(i=0;i<MAX_VIEWS;i++){
if(g_NoteViewToggle.status[i])
ViewList[i]=1;
else
ViewList[i]=0;
}
TurnOnAllLevels(ViewList,FALSE,TRUE);
TurnOnAllLevels(ViewList,TRUE,FALSE);
}
/*原来未用到而现在要打开的视图,清除该视图所有的内容*/
for(i=0;i<MAX_VIEWS;i++){
if(!g_CurViewList[i] && g_NoteViewToggle.status[i])
ViewList[i]=1;
else
ViewList[i]=0;
}
TurnOnAllLevels(ViewList,FALSE,TRUE);
TurnOnAllLevels(ViewList,TRUE,FALSE);
/*原来用到而现在要关掉的视图,显示该视图所有的内容*/
for(i=0;i<MAX_VIEWS;i++){
if(g_CurViewList[i] && !g_NoteViewToggle.status[i])
ViewList[i]=1;
else
ViewList[i]=0;
/*记下当前用到的视图状态*/
g_CurViewList[i]=g_NoteViewToggle.status[i];
}
TurnOnAllLevels(ViewList,FALSE,FALSE);
TurnOnAllLevels(ViewList,TRUE,TRUE);
}
int recordLink(void* LinkageP, void *elP)
{
int i,j, type;
int id;
char nm[32];
ATTRLnk_Struc* LnkP;
MSElementDescr *elD;
LnkP=LinkageP;
elD=elP;
id=LnkP->id;
type=elD->el.ehdr.type;
number++;
/*if (type==17) // text
{
GetFirstPoint(elD, SP1+id);
annolink[id].fpos1=g_FilePos;
return 1;
}
else if (type==2)
{
mdlCell_extract(NULL, NULL, NULL, NULL, nm, &elD->el);
if (nm[0]==0) // group
{
if (elD->h.firstElem!=NULL)
if (elD->h.firstElem->el.ehdr.type==17)
{
GetFirstPoint(elD, SP1+id);
annolink[id].fpos1=g_FilePos;
return 1;
}
}
}
GetFirstPoint(elD, SP2+id);
annolink[id].fpos2=g_FilePos;*/
if (annolink[id].fpos1==0)
{
GetFirstPoint(elD, SP1+id);
annolink[id].fpos1=g_FilePos;
}
else
{
GetFirstPoint(elD, SP2+id);
annolink[id].fpos2=g_FilePos;
}
return 1;
}
// prepare all link data
void GetNotePos(int fileno)
{
int i,mScanWords,mStatus,mElmNum,type;
Scanlist mScanList;
ULong mNextFilePos,mRetPos[50],mActualPos;
MSElementUnion elm;
unsigned short buff[4]; //add
MSElementDescr *elmDP;
ExtendedAttrBuf attbuf;
int color,level;
number=0;
for (i=0; i<MAX_NOTE_NUM; i++) annolink[i].fpos1=annolink[i].fpos2=0;
/*Init tEdP for adding new transient element*/
if(tEdP!=NULL)
{
mdlTransient_free(&tEdP,TRUE);
tEdP=NULL;
}
tEdP = mdlTransient_addElemDescr (
NULL, /* => NULL for create a new Transient ElmDscr*/
NULL, /* => element to put in transient element*/
TRUE, /* => snappable (not used) */
g_ViewMask, /* => view mask (all views) */
NORMALDRAW, /* => draw mode */
FALSE, /* => display first */
TRUE, /* => at head of list */
TRUE); /* => display initially */
/*Set scan params.*/
mdlScan_initScanlist(&mScanList);
mScanList.scantype = ELEMTYPE | NESTCELL;
mScanList.extendedType=FILEPOS | EXTATTR;
mdlScan_noRangeCheck(&mScanList);
mdlScan_setDrawnElements(&mScanList);
attbuf.numWords=2;
attbuf.extAttData[0]=0xffff;
attbuf.extAttData[1]=0xffff;
attbuf.extAttData[2]=0x1003;
attbuf.extAttData[3]=0x0099;
mScanList.extAttrBuf=&attbuf; // to find elements with annotation association linkage
mdlScan_initialize(fileno,&mScanList);
//Begin scan
do{
mScanWords=sizeof(mRetPos)/sizeof(UShort);
mStatus=mdlScan_file(mRetPos,&mScanWords,sizeof(mRetPos),&mNextFilePos);
mElmNum=mScanWords/sizeof(UShort);
for(i=0;i<mElmNum;i++)
{
mdlElmdscr_read(&elmDP, mRetPos[i], 0, 0, &mActualPos);
g_FilePos=mActualPos;
mdlLinkage_extractFromElement(buff, &elmDP->el, 0x99, 3, NULL, recordLink, elmDP);
mdlElmdscr_freeAll(&elmDP);
}
}while(mStatus==BUFF_FULL);
}
void TurnOnAllLevels(short ViewList[], boolean bTurnOn, boolean bUpdate)
{
int i;
short mLevelMask[4];
for(i=0;i<4;i++)
mLevelMask[i]=0xffff;
mdlView_setLevels(bTurnOn, mLevelMask, ViewList, bUpdate);
}
void SymbolizeElmdscr(MSElementDescr* elmDP,int type)
{
int weight,color;
MSElementDescr *tmpDP;
weight=atoi(g_Symbology.lineweight);
color=g_Symbology.linecolor;
if(weight<0) weight=0;
if(elmDP->h.isHeader)
{
tmpDP=elmDP->h.firstElem;
while(tmpDP!=NULL)
{
mdlElement_setSymbology(&(tmpDP->el),&color,&weight,NULL);
tmpDP=tmpDP->h.next;
}
}
else
mdlElement_setSymbology(&(elmDP->el),&color,&weight,NULL);
return;
}
// draw link line for id
void FindElement(double Height_Pointx, double Height_Pointy, ULong id)
{
MSElement out;
int i;
Dpoint3d SP[2];
MSElementDescr *tmpDP;
mdlElmdscr_read(&tmpDP, annolink[id].fpos1, 0, 0, NULL);
mdlElmdscr_display(tmpDP, 0, NORMALDRAW);
mdlElmdscr_freeAll(&tmpDP);
mdlElmdscr_read(&tmpDP, annolink[id].fpos2, 0, 0, NULL);
mdlElmdscr_display(tmpDP, 0, NORMALDRAW);
mdlElmdscr_freeAll(&tmpDP);
SP[0]=SP1[id];
SP[1]=SP2[id];
SP[0].z=0;
SP[1].z=0;
mdlLine_create(&out,NULL,SP);
mdlElmdscr_new(&tmpDP, NULL, &out);
SymbolizeElmdscr(tmpDP,1);
mdlTransient_addElemDescr(
tEdP, /* => TED to attach to or NULL for new*/
tmpDP, /* => element to put in transient element*/
FALSE, /* => snappable (not used) */
g_ViewMask, /* => view mask (all views) */
NORMALDRAW, /* => draw mode */
FALSE, /* => display first */
TRUE, /* => at head of list */
TRUE); /* => display initially */
mdlElmdscr_freeAll(&tmpDP);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -