找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 902|回复: 13

[编程申请]:HELP:超难题,至今无解!

[复制链接]
发表于 2005-2-6 10:44:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在J版中用mdlElmdscr_compressCell (未公开函数)对一超大单元(≥64K)进行了压 缩,存入DGN后会形成许多像COMPRS0000、COMPRS0001...这样的共享单元定义。当我把超大单元删除以后,这些共享单元定义仍然保存在DGN文件中,使得文件越来越大,如何删除它们?

难点在于此时的共享单元定义名是10个字符,不符合MS/J中单元名6个字符的限制,所以许多mdlSharedCell_XXX函数无法正常工作。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-2-6 11:43:30 | 显示全部楼层
mdlElement_read
直接給值 elDP->el.hdr.ehdr.deleted == 1 然後compress 不知可行否?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-6 14:26:59 | 显示全部楼层
我试了一试,不行!虽然都被标记为删除的了,但Compress不掉这些元素。
顺便附带这样一个DGN。该DGN中含有一个有5000条线组成的一个大单元。它背后由COMPRS0000、COMPRS0001和COMPRS0002三个共享单元定义组成。我的问题就是如何在删除了这个大单元后删除掉这三个共享单元定义,使DGN文件变小。

-------------------------------------------------------------------------------------------------------------------
这个问题搞定了!
/*----------------------------------------------+
|      delHugeCell                                         |
+----------------------------------------------*/
Private void delHugeCell (void)
{
   Scanlist       scanList;
   ULong          filePos, addrs[500];
   int            i, scanWords;
   
        mdlScan_initScanlist (&scanList);
   mdlScan_noRangeCheck (&scanList);
   scanList.scantype            = ELEMTYPE;
   scanList.extendedType = FILEPOS;
   scanList.typmask[2]   = TMSK2_SHAREDCELL_DEF;
          mdlScan_initialize (0, &scanList);
          scanWords = sizeof(addrs)/sizeof(short);
        mdlScan_file (addrs, &scanWords, sizeof(addrs),        &filePos);
        if (scanWords <= 0)
           return;
   for (i=0; i&lt;scanWords/sizeof(short); i++){
      mdlElmdscr_undoableDelete (NULL, addrs, FALSE);
   }
   mdlSystem_compressDgnFile ();
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-7 09:17:51 | 显示全部楼层
可以不用编程的吧,找一个V8 2004,用里面的压缩功能,可以压缩掉没有用的单元实体。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-10 15:06:20 | 显示全部楼层
我是在做一个J版下的项目,总不能让用户把每个DGN文件都调入V8_2004来手工操作一遍吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-18 03:32:35 | 显示全部楼层
可以考虑在V8下做一个批处理!成批调入后统一压缩!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-18 08:02:34 | 显示全部楼层
也不好!用户既然需要的是J版,可能他还没有升到V8。(尤其是国外用户,版权控制是很严格的)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-18 13:37:35 | 显示全部楼层
这才叫增值开发啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-18 15:48:05 | 显示全部楼层
还是有问题:当我删除这些共享单元定义时,我无法知道哪些是没有用的(也就是没有被共享单元实例引用的),哪些是有用的。因为用mdlSharedCell_extract提取这种特殊共享单元实例的单元名时仅能提取出前7个字符(COMPRS0),可是在EDG中却能看到完全的10个字符。
【另】:奇怪的是当用mdlSharedCell_extract提取这种特殊共享单元定义的单元名时也能提取出完全的10个字符。
这个问题已经困扰了我近一个月,请高手们不吝赐教。能解决该问题者我愿意赠送200个爱心币。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-19 00:38:07 | 显示全部楼层
針對MS95版而言,試一試
void findLongCellname (void)
   {
    Scanlist scanList;
    ULong filePos, addrs[500];
    int i, scanWords;
    char Cellname[11];
    FILE *fp;
     
     mdlScan_initScanlist (&scanList);
     mdlScan_noRangeCheck (&scanList);
     scanList.scantype = ELEMTYPE;
     scanList.extendedType = FILEPOS;
     scanList.typmask[2] = TMSK2_SHAREDCELL_DEF;
     mdlScan_initialize (0, &scanList);
     scanWords = sizeof(addrs)/sizeof(short);
     mdlScan_file (addrs, &scanWords, sizeof(addrs), &filePos);
     if (scanWords <= 0) return;
     
     fp=fopen (tcb->dgnfilenm, "r");
     
     for (i=0; i < scanWords/sizeof(short); i++)
{
          fseek (fp, addrs+164, SEEK_SET);
          fread (Cellname, sizeof(char), 10, fp);
          printf ("Cellname = %s\n", Cellname);
         }
     
     fclose (fp);
   }

]奖励提示: 200个币是由mstation迷 转赠的[/COLOR][/SIZE]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-20 14:01:55 | 显示全部楼层
我上个帖子已经说了,SHAREDCELL_DEF的长单元名可以提取出来,只是SHAREDCELL_INSTANCE的长单元名不能提取出来。您的这种方法对SHAREDCELL_INSTANCE也有效吗?
<BR>
------------------------------------------------------------------------------
<BR>
我试了一试,果真可以!真是太谢谢了。
如何把我的200个爱心币赠给您?请斑竹帮忙划过去。



提示: 200币转给U2U了[/COLOR]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-21 09:08:26 | 显示全部楼层
助人為快樂之本!並不為200个愛心幣
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-21 10:44:32 | 显示全部楼层
高风亮节,令人钦佩!
您的帖子都是繁体字,您在台湾吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-25 22:33:35 | 显示全部楼层
都玩到编程了,羡慕的紧
努力学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-24 09:37 , Processed in 0.464390 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表