路漫漫兮吾将上下而求索

寻梦·追梦;在梦想中遨游,在现实中拼搏!路漫漫其修远兮,吾将上下而求索

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  36 随笔 :: 8 文章 :: 19 评论 :: 0 引用

2008年11月1日 #

fxvgbh
Type text here
posted @ 2008-11-01 10:40 MichaeL 阅读(13) | 评论 (0)编辑

2008年7月23日 #

AutoCAD中提取明细栏和标题栏中的数据

AutoCAD中的明细栏和标题栏通常是采用定义块然后添加相应的属性值。那么如何在AutoCAD中提取到这些属性值呢?下面是实现的方法(通过AutoCAD VBA实现的)。

  1. 获取当前Dwg文档中已定义的块

-block 命令查看用户定义的块。

VBA 代码实现。

Dim objBlock As AcadBlock

For i = 0 To ThisDrawing.Blocks.Count - 1

Set objBlock = ThisDrawing.Blocks.Item(i)

If objBlock.IsXRef = False And objBlock.IsLayout = False Then’用户定义的块

MsgBox objBlock.Name + " " + objBlock.ObjectName

End If

Next

  1. 获取块对应的属性值。

AutoCAD中,块属性值一般都是放在AcDbBlockReference类的对象中,该对象的Name表示他属于的块名称,GetAttributes方法返回对象的属性,其中包含值。因此,可以在整个模型空间中查找AcDbBlockReference类型的对象,然后根据名称来分类。VBA实现代码如下:

Dim tempCount As Integer

tempCount = ThisDrawing.ModelSpace.Count’得到模型空间中的所有对象个数

For i = 0 To tempCount - 1

Set curAcadObject = ThisDrawing.ModelSpace.Item(i)

If curAcadObject.ObjectName = "AcDbBlockReference" Then

Dim ss As AcadBlockReference

Set ss = curAcadObject

If ss.HasAttributes = True Then

Dim aa() As Object ‘存放属性的数组

aa = ss.GetAttributes()

Dim cc As Integer

Dim strr As String

Dim oo As AcadAttributeReference‘属性对象

strr = ""

For cc = LBound(aa) To UBound(aa)

Set oo = aa(cc)

strr = strr + oo.TagString + ":" + oo.TextString + vbCrLf

Next

MsgBox strr, vbDefaultButton1, curAcadObject.Name

End If

End If

Next

posted @ 2008-07-23 12:35 MichaeL 阅读(115) | 评论 (0)编辑

2008年7月18日 #

1、安装FCITX
sudo apt-get install im-switch fcitx
im-switch -s fcitx -z default
完成设置最好重启一下X,输入法就生效了(一般情况下是这样).
2、FCITX中文显示是方块的解决方法
我在安装中文输入法后,重新启动后输入法的候选字以及输入法上的汉字都是方块,在网上搜索后得知是配置文件中中文显示字体设置不正确导致的。
开始搜索到的修改方法都是修改为“显示字体(中)=WenQuanYi Bitmap Song”,然后Control+5。但是我的环境中不行,今天搜索到了另外一种修改方法“显示字体(中)=AR PL ShanHeiSun Uni”,马上就能够正常显示中文了。
设置方法如下:
执行 sudo gedit ~/.fcitx/config 将“显示字体(中)= ×”修改为“显示字体(中)=AR PL ShanHeiSun Uni”即可。
3、后来再去Wiki上查看是,看见其中清楚的给出了该输入法出现方块的解决方法。
    如果发现软件界面字体是方块, gedit ./fcitx/config 或gksu gedit /usr/share/fcitx/config 打开配置文件修改一下字体就OK.
    字体列表: xlsfonts或 fc-list (取=前面) 。其实第二句话很有用,他给出了字体查看的方法,这样就能够根据自己的环境选择中文字体。
posted @ 2008-07-18 17:48 MichaeL 阅读(1258) | 评论 (1)编辑

     我接触到Ubuntu是在一个非常偶然的情况下发生的。我在试用GoogleReader的时候,在右侧有个Ubuntu的订阅推荐,我觉得这个词怎么这么有意思,有这么U,把n算着另一种形式的U,我就点击这个按钮进去了,里面有好多关于Ubuntu的新闻,包括最新发行8.04LTS的信息。这下让我叩响了Ubuntu的门,首先找到了Ubuntu的官方中文网站,首先映入眼帘的是三人手拉手的Logo以及棕黄色的整体页面让我感觉非常好,随后我找到了中文的Ubuntu Wiki,在这里我知道了Ubuntu的意思和发音,接着开始着手下载DeskTop版的iso来试用一下。(公司不让下载大容量的文件,只有回家去下载)。
      就这样,偶然的机会我第一次接触到Ubuntu了,并开始喜欢上它了!
posted @ 2008-07-18 17:17 MichaeL 阅读(28) | 评论 (0)编辑

2008年6月27日 #

 摘要:在C#.Net 这样的支持Unicode字符集的环境下,字符串处理时,英文、数字、汉字以及标点符号都是当着一个字符来看待的,但是英文、中文显示时所占宽度不一致,这样在需要按照指定宽度输出时就会遇到截取到的字符串显示出来长短参差不齐的。在网上看了些别人写的一些文章,没有找到自己想要的方式。下面我就给出C#.Net中中英文混排的字符串,如何来进行按照指定宽度来截取。  
      今天有个程序需要在一个固定表格中输出一些文字数据,由于表格的单元格是固定的,因此用户希望能够在单元个中按照指定的宽度输出数据,超过的字符在下一行紧接着输出。我想这个在其他好多地方都会有应用的场景的。
      由于C#.Net中String.Length获得的是字符数,SubString方法指定截取的起始位置也是指的Unicode字符数,但是我们这里需要输出的宽度用英文字符个数来指定,也就是说如果是英文那么就单元格中应该有10字符,如果是中文则应该有5个汉字。考虑到中文是不能将两个字符截断,如果前面有9个英文字符,后面紧接着是个中文的话,我们就只能将中文放在下一个子串中。
一、通常使用的字符串截取方法
     常用的直接用SubString取子串方法得到的效果。

    

二、我的字符串截取方法
        /// <summary>
        
/// 获取拆分后的字符串列表。
        
/// </summary>
        
/// <param name="mOrigianlString"></param>
        
/// <param name="subStringCharNumber"></param>
        
/// <returns></returns>

        private ArrayList GetSeparateSubString(string mOrigianlString, int subStringCharNumber)
        
{
            ArrayList resultList 
= new ArrayList();
            
string tempStr = mOrigianlString;
            
int charNumber = subStringCharNumber;
            
int totalCount = 0;
            
string mSubStr = "";
            
for (int i = 0; i < tempStr.Length; i++)
            
{
                
string mChar = tempStr.Substring(i, 1);
                
int byteCount = Encoding.Default.GetByteCount(mChar);//关键点判断字符所占的字节数

                
if (byteCount == 1)
                
{
                    totalCount
++;
                    mSubStr 
+= mChar;
                    
if (totalCount == charNumber || i == tempStr.Length - 1)
                    
{
                        resultList.Add(mSubStr);
                        totalCount 
= 0;
                        mSubStr 
= "";
                    }

                }

                
else if (byteCount > 1)
                
{

                    totalCount 
+= 2;
                    
if (totalCount > charNumber )
                    
{
                        resultList.Add(mSubStr);
                        
if (i == tempStr.Length - 1)
                        
{
                            mSubStr 
= mChar;
                            resultList.Add(mSubStr);
                        }

                        
else
                        
{
                            totalCount 
= 2;
                            mSubStr 
= mChar;
                        }

                    }

                    
else if (totalCount == charNumber)
                    
{
                        mSubStr 
+= mChar;
                        resultList.Add(mSubStr);
                        totalCount 
= 0;
                        mSubStr 
= "";
                    }

                    
else if (i == tempStr.Length - 1)
                    
{
                        mSubStr 
+= mChar;
                        resultList.Add(mSubStr);
                    }

                    
else
                    
{
                        mSubStr 
+= mChar;
                    }

                }

            }

            
return resultList;
        }
下图为新方法处理的结果:

posted @ 2008-06-27 18:18 MichaeL 阅读(371) | 评论 (0)编辑