예제 #1
0
/* Extract entities out of a selection set and add them to the
 * appropriate list.
 */
int SampleEnts(ads_name selset, ExportMode  expMode)

{
    char layer[64], type[16];
    long int num, numtot;
    ads_name ename;
    ADSResBuf *edata;
    DLL_LIST list;

    if (ads_sslength(selset, &numtot) != RTNORM)
        return 0;
    for (num = 0; num < numtot; num++) {
        if (num % 20 == 0)
            ads_printf("Sampling entities: %ld/%ld\r", num, numtot);
        if (ads_ssname(selset, num, ename) != RTNORM)
            return 0;
        if ((edata = ads_entget(ename)) == NULL) {
            WarnMsg("SampleEnts: can't get ent: %lx", ename);
            return 0;
        }
        if (strcmp(RBSearch(edata, 0)->resval.rstring, "INSERT") == 0) {
            if ((list = DllNewList(entListsSetup)) == NULL) {
                WarnMsg("SampleEnts: can't make block entity list");
                return 0;
            }
            (void)DllPushF(list, NewADSName(ename), NULL);
            AddToBlockList(list);
            ads_relrb(edata);
            continue;
        }
        if (!IsValidEntType(GetEntType(edata, type))) {
            ads_relrb(edata);
            continue;
        }
        if ((list = DllNewList(entListsSetup)) == NULL) {
            WarnMsg("SampleEnts: can't make entity list");
            ads_relrb(edata);
            return 0;
        }
        (void)DllPushF(list, NewADSName(ename), NULL);
        switch (expMode) {
			case EXP_BYCOLOR:
				if (!AddEntToColorLists(list, GetColorVal(edata, NULL, 0)))
					return 0;
				break;
			case EXP_BYLAYER:
				if (!GetLayerVal(layer, edata, list, 0))
					return 0;
				if (!AddEntToLayerLists(list, layer))
					return 0;
				break;
			default:
				ads_fail("SampleEnts: unknown export mode.");
        }
        ads_relrb(edata);
    }
	ads_printf("Sampling entities: %ld/%ld\n", num, numtot);
    return RTNORM;
}
예제 #2
0
void CTwAutoRedraw::Remove()
{
	long Len = 0;
	ads_sslength( m_ss, &Len );
	for ( int i = 0; i < Len; i++ )
	{
		ads_name ent;
		ads_ssname( m_ss, i, ent );
		ads_redraw( ent, 4 );
	}

	ads_ssfree( m_ss );
	ads_name_clear( m_ss );
}