找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1500|回复: 8

[ARX函数]:如何调用-style?急!!!

[复制链接]
发表于 2002-8-12 15:36:13 | 显示全部楼层 |阅读模式

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

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

×
请教各位大侠:如何用acedCommand调用“-style”命令?我老是调用不成功,出现“Invalid type in acutBuildList() arg #11”的提示。我在下面贴出原代码,希望大家帮我看看,谢谢!!!
acedCommand(RTSTR,"-style",RTSTR,"ST",RTSTR,"",RTREAL,0.0,RTREAL,1,RTSTR,"45",RTSTR,"N",RTSTR,"N",RTSTR,"N",0);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-8-12 15:51:45 | 显示全部楼层
我今天的机器没有AutoCAD,不能实际去试,不过“RTREAL,1”一定是不对的,应该是:RTREAL,1.0或RTSTR,"1"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2002-8-12 16:06:44 | 显示全部楼层
acedCommand(RTSTR,"-style",RTSTR,"ST",RTSTR,"",RTREAL,0.0,RTREAL,1.0,RTREAL,45.0,RTSTR,"N",RTSTR,"N",RTSTR,"N",0);

acedCommand(RTSTR,"-style",RTSTR,"ST",RTSTR,"",RTSTR,"0",RTSTR,"1",RTSTR,"45",RTSTR,"N",RTSTR,"N",RTSTR,"N",0);
这两种方式都不行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-8-12 18:44:29 | 显示全部楼层
最初由 snowpine 发布
[B]acedCommand(RTSTR,"-style",RTSTR,"ST",RTSTR,"",RTREAL,0.0,RTREAL,1.0,RTREAL,45.0,RTSTR,"N",RTSTR,"N",RTSTR,"N",0);

acedCommand(RTSTR,"-style",RTSTR,"ST",RTSTR,"",RTSTR,"0",RTSTR,"1",RTSTR,"45",RTST... [/B]


你可能是因其它原因出错.

两种办法都对,应该不会再“Invalid type in acutBuildList() arg #11”
新出错提示是什么?

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

使用道具 举报

 楼主| 发表于 2002-8-13 10:03:05 | 显示全部楼层

  1. [FONT=courier new]
  2. //szStyle---文本样式名
  3. //TEXTSTYLEPARAM---文本样式的各参数结构体
  4. //TextStyelId---文字样式id
  5. int OpenTextstylekk(char *szStyle,TEXTSTYLEPARAM pTsp,AcDbObjectId &TextStyleId)
  6. {
  7.         int iRz;
  8.         AcDbSymbolTable *                                pTextStyleTable;
  9.         AcDbTextStyleTableRecord*                        pTextStyleTableRecord;
  10.         CCustomDatabase pDb;//
  11.         char *tempChar;

  12.         iRz=acdbHostApplicationServices()->workingDatabase()->getTextStyleTable ( pTextStyleTable, AcDb::kForWrite );
  13.         if(iRz!=Acad::eOk)
  14.         {
  15.                 return 0;
  16.         }
  17.         if(szStyle[0]=='$')
  18.         {
  19.                 iRz=pTextStyleTable->getAt(szStyle+1,(AcDbSymbolTableRecord*&) pTextStyleTableRecord, AcDb::kForWrite) ;
  20.         }
  21.         else
  22.         {
  23.                 iRz=pTextStyleTable->getAt(szStyle,(AcDbSymbolTableRecord*&) pTextStyleTableRecord, AcDb::kForWrite) ;
  24.         }
  25.         if(iRz!=Acad::eOk)//ûÓÐÏàÓ¦µÄ¿é±í¼Ç¼£¬
  26.         {
  27.                 if(szStyle[0]=='$')//¶¨ÖÆÖÐÐÄÓУ¬Ö±½ÓÌáÈ¡
  28.                 {
  29.                         if(!pDb.GetTextstyleCustomParam(szStyle+1,&pTsp))
  30.                         {
  31.                                 return 0;
  32.                         }
  33.                 }
  34.                 else//ûÓУ¬Ôòн¨
  35.                 {
  36.                         //³õʼ»¯Ñù±¾²ÎÊý
  37.                         fast_geo_InitTextStyleParam(szStyle,pTsp);
  38.                 }

  39.                 pTextStyleTableRecord=new AcDbTextStyleTableRecord();
  40.                 pTextStyleTableRecord->setName(pTsp.szTextstyleName);
  41.                 iRz=pTextStyleTable->add(TextStyleId,pTextStyleTableRecord) ;
  42.                 if(iRz!=Acad::eOk)
  43.                 {
  44.                         return 0;
  45.                 }

  46.                 //¶ÔÑù±¾¼Ç¼½øÐÐÉèÖÃ
  47.                 char *pChar;
  48.                 pChar=strstr(pTsp.szFontFile,".shx");
  49.                 if(pChar!=NULL)//°üº¬ÁË.shx£¬Ðè¼ÓÔØÐÍÎļþ
  50.                 {
  51.                         char *tempChar;
  52.                         char szFilePath[260];
  53.                         strcpy(szFilePath,"");
  54.                         GetFontsPathkk(szFilePath);
  55.                         tempChar=strchr(pTsp.szFontFile,'|');
  56.                         if(tempChar!=NULL)//°üº¬´ó×ÖÌå
  57.                         {
  58.                                 CString str;
  59.                                 char fileName[255],bigFontFileName[255],pathCopy[255];
  60.                                 str=pTsp.szFontFile;
  61.                                 int i;
  62.                                 i=str.Find("|");
  63.                                 str.SetAt(i,'\0');//Çå¿ÕºóÃæµÄ×Ö·û
  64.                                 strcpy(fileName,str);
  65.                                 strcpy(bigFontFileName,pTsp.szFontFile+i+1);
  66.                                 strcpy(pathCopy,szFilePath);

  67.                                 strcat(szFilePath,"\");
  68.                                 strcat(szFilePath,fileName);
  69.                                 strcat(pathCopy,"\");
  70.                                 strcat(pathCopy,bigFontFileName);

  71.                                 if(pTextStyleTableRecord->setFileName(szFilePath)!=Acad::eOk)
  72.                                         return 0;
  73.                                 if(pTextStyleTableRecord->setBigFontFileName(pathCopy)!=Acad::eOk)
  74.                                         return 0;
  75.                         }
  76.                         else
  77.                         {
  78.                                 pTextStyleTableRecord->setFileName(szFilePath);
  79.                         }
  80.                 }
  81.                 else
  82.                 {
  83.                         pTextStyleTableRecord->setFont(pTsp.szFontFile,pTsp.bBold,pTsp.bItalic,0,0);//×ÖÌåÎļþÃû
  84.                 }  
  85.                 pTextStyleTableRecord->setIsVertical(pTsp.bVertical);//´¹Ö±·ñ
  86.                 pTextStyleTableRecord->setObliquingAngle(pTsp.dObliquingAngle);//Çãб½Ç¶È
  87.                 pTextStyleTableRecord->setXScale(pTsp.dXScale);//¿í¶È±ÈÀý
  88.                 pTextStyleTableRecord->setTextSize(pTsp.dHeight);//¸ß¶È

  89.                 //ÉèΪµ±Ç°Îı¾Ñù±¾
  90.                 acedCommand(RTSTR,"-style",RTSTR,"standard",RTSTR,"",RTREAL,0.0,RTREAL,1.0,RTSTR,"45",RTSTR,"N",RTSTR,"N",RTSTR,"N",0);
  91. //                acedCommand(RTSTR,"-style",RTSTR,"ST",RTSTR,"",RTSTR,"0",RTSTR,"1",RTSTR,"45",RTSTR,"N",RTSTR,"N",RTSTR,"N",0);
  92. //                acedCommand(RTSTR,"-style",RTSTR,pTsp.szTextstyleName,RTSTR,"",RTSTR,"pTsp.dHeight",
  93. //                                        RTSTR,"pTsp.dXScale",RTSTR,"pTsp.dObliquingAngle",
  94. //                                        RTSTR,"N",RTSTR,"N",RTSTR,"N",0);
  95. //                pTextStyleTableRecord->setFlagBits((Adesk::UInt8)((pTsp.bXMirror() << 1) |
  96.   //                                      (pTsp.bYMirror() << 2)));
  97.         }
  98.         else//&acute;&Oacute;&Icirc;&Auml;±&frac34;&Ntilde;ù&Ecirc;&frac12;±í&frac14;&Ccedil;&Acirc;&frac14;&Ouml;&ETH;&Igrave;á&Egrave;&iexcl;&sup2;&Icirc;&Ecirc;&yacute;
  99.         {
  100.                 if(szStyle[0]=='$')
  101.                 {
  102.                         strcpy(pTsp.szTextstyleName,szStyle+1);//&Icirc;&Auml;±&frac34;&Ntilde;ù&Ecirc;&frac12;&Atilde;&ucirc;
  103.                 }
  104.                 else
  105.                 {
  106.                         strcpy(pTsp.szTextstyleName,szStyle);//&Icirc;&Auml;±&frac34;&Ntilde;ù&Ecirc;&frac12;&Atilde;&ucirc;
  107.                 }
  108.                 int charset,pitch;
  109.                 pTsp.bBold=0;//&Ecirc;&Ccedil;·&ntilde;&Icirc;&ordf;&acute;&Ouml;&Igrave;&aring;
  110.                 pTsp.bItalic=0;//&Ecirc;&Ccedil;·&ntilde;&Icirc;&ordf;&ETH;±&Igrave;&aring;
  111.                 iRz=pTextStyleTableRecord->font(tempChar,pTsp.bBold,pTsp.bItalic,charset,pitch);//×&Ouml;&Igrave;&aring;&Icirc;&Auml;&frac14;&thorn;&Atilde;&ucirc;
  112.                 if (iRz != Acad::eOk)
  113.                 {
  114.                         if (tempChar)
  115.                                 delete tempChar;
  116.                         return 0;
  117.                 }
  118.                 if (strlen(tempChar) == 0)
  119.                 {
  120.                         // SHX font. Use the .ttf version of it.
  121.                         char *pShxFileName = NULL;
  122.                         if ((Acad::eOk != (iRz = pTextStyleTableRecord->fileName(pShxFileName))) ||
  123.                                                                                                                                         !pShxFileName)
  124.                         {
  125.                                 iRz = pTextStyleTableRecord->bigFontFileName(pShxFileName);
  126.                         }
  127.                         if (Acad::eOk != iRz)
  128.                         {
  129.                                 return 0;
  130.                         }
  131.                        
  132.                         // Get the typeface name from font file name.
  133.                         for (int i = 0; i < strlen(pShxFileName); ++i)
  134.                         {
  135.                                 if (pShxFileName[i] == '.')
  136.                                         break;
  137.                                 tempChar = new char[i + 1];
  138.                                 strncpy(tempChar, pShxFileName, i);
  139.                                 tempChar[i] = '\0';
  140.                         }
  141.                 }
  142.                 strcpy(pTsp.szFontFile,tempChar);

  143.                 pTsp.dHeight=pTextStyleTableRecord->textSize();//&Icirc;&Auml;×&Ouml;&cedil;&szlig;&para;&Egrave;
  144.                 pTsp.dXScale=pTextStyleTableRecord->xScale();//&iquest;í&para;&Egrave;±&Egrave;&Agrave;&yacute;
  145.                 pTsp.dObliquingAngle=pTextStyleTableRecord->obliquingAngle();//&Ccedil;&atilde;&ETH;±&frac12;&Ccedil;&para;&Egrave;

  146.                 Adesk::UInt8 pFlagBits = pTextStyleTableRecord->flagBits();
  147.                 if (pFlagBits & 0x2)
  148.                 {
  149.                         pTsp.bXMirror = Adesk::kTrue;
  150.                 }
  151.                 else
  152.                 {
  153.                         pTsp.bXMirror = Adesk::kFalse;
  154.                 }

  155.                 if (pFlagBits & 0x4)
  156.                 {
  157.                         pTsp.bYMirror = Adesk::kTrue;
  158.                 }
  159.                 else
  160.                 {
  161.                         pTsp.bYMirror = Adesk::kFalse;
  162.                 }

  163.                 pTsp.bVertical=pTextStyleTableRecord->isVertical();
  164.                 TextStyleId=pTextStyleTableRecord->objectId();//
  165.         }
  166. //        TextStyleId=pTextStyleTableRecord->objectId();//

  167. /*        iRz=pTextStyleTable->getAt(pTsp.szTextstyleName,TextStyleId, Adesk::kFalse) ;
  168.         if(iRz!=Acad::eOk)
  169.         {
  170.                 pTextStyleTable->close();
  171.                 return 0;
  172.         } */

  173.         pTextStyleTableRecord->close();
  174.         pTextStyleTable->close();

  175.         return 1;

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

使用道具 举报

 楼主| 发表于 2002-8-13 10:09:02 | 显示全部楼层
//文本样式基本参数
typedef struct TEXTSTYLEPARAM
{
        char                szTextstyleName[255];                //文本样式名
        char                szFontFile[255];                        //字体文件名
        double                dHeight;                                        //文字高度
        double                dXScale;                                        //宽度比例
        double                dObliquingAngle;                        //倾斜角度
        BOOL                bBold;                                                //是否为粗体
        BOOL                bItalic;                                        //是否为斜体
        BOOL                bXMirror;                                        //是否关于X轴静像
        BOOL                bYMirror;                                        //是否关于Y轴静像
        BOOL                bVertical;                                        //文本是否垂直
}*LPTEXTSTYLEPARAM;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-8-13 11:50:53 | 显示全部楼层
我估计(没细看),你打开了AcDbTextStyleTable在没有关闭的情况下试图通过acedCommand再次去操纵AcDbTextStyleTable,这就是所谓“重入”

你对AcDbTextStyleTable已有足够深的理解, 完全可以不用acedCommand而实现你想要的功能.
acedCommand()有很多限制,你可仔细看看它的注释。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-8-13 13:06:22 | 显示全部楼层
的确是你所说的原因,AcDbTextStyleTable没有关闭。
现在好了,没有问题了。
谢谢你,rave!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 02:18 , Processed in 0.453221 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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