《三国志》,六十五卷,包括《魏书》三十卷,《蜀书》十五卷,《吴书》二十卷,主要记载魏、蜀、吴三国鼎立时期的历史。
作者陈寿,字承祚,巴西安汉人,生于汉后主刘禅建兴十一年,死于晋惠帝元康七年。他在蜀汉做过官,三十岁时,蜀汉政权灭亡,入晋后做过晋平令、著作郎。
陈寿写《三国志》以前,已出现一些有关魏、吴的史作,如王沈的《魏书》,鱼豢(换)的《魏略》,韦昭的《吴书》等。《三国志》中的《魏书》、《吴书》,主要取材于这些史书。蜀政权没有设置史官,无专人负责搜集材料,编写蜀史。《蜀书》的材料是由陈寿采集和编次的。陈寿写书的时代靠近三国,可资利用的他人成果并不多,加上他是私人著述,没有条件获得大量的文献档案。我们阅读《三国志》时,就会发现陈寿有史料不足的困难,内容显得不够充实。陈寿没有编写志。我们要了解三国时代的典章制度,只好借助于《晋书》。
《三国志》善于叙事,文笔简洁,剪裁得当,当时就受到赞许。与陈寿同时的夏侯湛写作《魏书》,看到《三国志》,认为没有另写新史的必要,就毁弃了自己的著作。后人更是推崇备至,认为在记载三国历史的史书中,独有陈书可以同《史记》、《汉书》相媲美。因此,其他各家的三国史相继泯灭无闻,只有《三国志》一直流传到现在。
作者: 老王
AutoCAD 判断图元交叉
‘本例演示判断两个图元是否交叉?有几个交点?交点坐标分别是什么?
‘绑定 AutoCAD
Dim I As Integer, J As Integer
Dim oAutoCAD As Object
Call BindAutoCAD(True)
‘打开并绑定文件 D:/Test.dwg
Dim oDraw As Object ‘AutoCAD 多文档之一
Set oDraw = oAutoCAD.Application.Documents.Open(“D:/Test.dwg”)
‘建立选择集
Dim oSelset As Object, oItem As Object
Dim TempName As String
TempName = SelName(8)
If SetExist(oDraw, TempName) Then oDraw.SelectionSets.Item(TempName).Delete
Set oSelset = oDraw.SelectionSets.Add(TempName)
oDraw.Activate
‘屏幕选择多个图元填入选择集,列出前两个图元之间交点的坐标
Dim IntersectPoint As Variant
oSelset.SelectOnScreen
‘Debug.Print “oSelSet.Count” & Space$(1) &”=” & Space$(1) & oSelSet.Count
If oSelset.Count > 1 Then ‘最少两个,但只认前两个
‘ Find the intersection points between the oSelSet(0) and the oSelSet(1)
IntersectPoint = oSelset(0).IntersectWith(oSelset(1), 0)
‘ acExtendNone Does not extend either object.
‘ acExtendThisEntity Extends the base object.
‘ acExtendOtherEntity Extends the object passed as an argument.
‘ acExtendBoth Extends both objects.
‘ Print all the intersection points
If VarType(IntersectPoint) <> vbEmpty Then
For I = LBound(IntersectPoint) To UBound(IntersectPoint) Step 3
Debug.Print “Intersection[” & (I + 3) / 3 & “/” & (UBound(IntersectPoint) – LBound(IntersectPoint) + 1) / 3 & “]:” & Space$(1) & _
IntersectPoint(I) & “,” & IntersectPoint(I + 1) & “,” & IntersectPoint(I + 2)
Next I
Else
Debug.Print “No intersection points.”
End If
End If
‘解除绑定,释放资源
oSelset.Delete
Set oSelset = Nothing
Set oItem = Nothing
AutoCAD 利用句柄(Handle)绑定图元
‘本例演示分多次绘制图形,而每次所绘图元与当前进程所绘一般无二,即,可以对其进行任何操作, 绘制图元的数据存储于 Dictionarys,下次从 Dictionarys 中读出数据加以利用
‘绑定 AutoCAD
Dim I As Integer, J As Integer
Dim oAutoCAD As Object
Call BindAutoCAD(True)
Dim oDraw As Object ‘AutoCAD 多文档之一
‘打开并绑定文件 D:/Test.dwg
Set oDraw = oAutoCAD.Application.Documents.Open(“D:/Test.dwg”)
Dim oLine() As Object
Dim LineCount As Integer
Public vPickPoint As Variant
Dim dStartPoint(0 To 2) As Double
Dim dEndPoint(0 To 2) As Double
‘在 Dictionarys 中查找 “Line”,并读取”Handle” App 的 “1000” 位码的值
Dim sTemp As String
sTemp = GetDicString(oDraw, “Line”, “Handle”)
sTemp = PurgeTerminal(sTemp, “|”)
‘确定起点
Set oUtility = oDraw.Utility
If sTemp = “” Then ‘第一次
LineCount = 0
vPickPoint = oUtility.GetPoint(, “选取线段起点!”)
dStartPoint(0) = vPickPoint(0)
dStartPoint(1) = vPickPoint(1)
dStartPoint(2) = vPickPoint(2)
Else ‘Dictionary 有数据则唤醒对象
Dim TempArray As Variant
TempArray = Split(sTemp, “|”, -1, vbTextCompare)
For I = LBound(TempArray) To UBound(TempArray)
LineCount = LineCount + 1
ReDim Preserve oLine(1 To LineCount)
Set oLine(LineCount) = oDraw.HandleToObject(TempArray(I))
Next I
Dim vStart As Variant, vEnd As Variant
vStart = oLine(LineCount).StartPoint
vEnd = oLine(LineCount).EndPoint ‘AutoCAD 特别之处
dStartPoint(0) = vEnd(0)
dStartPoint(1) = vEnd(1)
dStartPoint(2) = vEnd(2)
End If
‘绘制(或增加)线段
vPickPoint = oUtility.GetPoint(dStartPoint, “选取线段终点!”)
dEndPoint(0) = vPickPoint(0)
dEndPoint(1) = vPickPoint(1)
dEndPoint(2) = vPickPoint(2)
LineCount = LineCount + 1
ReDim Preserve oLine(1 To LineCount)
Set oLine(LineCount) = oDraw.ModelSpace.AddLine(dStartPoint, dEndPoint)
‘在 Dictionarys 中生成新的(或更新) Dictionary,建立 App 并为 “1000” 位码赋值
Dim lRet As Long
Dim sDic As String
Dim sApp As String
Dim sValue As String
sDic = “Line”
sApp = “Handle”
For I = 1 To LineCount
sValue = sValue & “|” & oLine(I).Handle
Next I
sTemp = PurgeTerminal(sValue, “|”)
lRet = SetDicString(oDraw, sDic, sApp, sValue)
‘测试一:统计长度
Dim dLength As Double
For I = 1 To LineCount
dLength = dLength + oLine(I).Length
Next I
Debug.Print “线段根数:” & CStr(LineCount)
Debug.Print “线段总长:” & CStr(dLength)
‘测试二:部分线段左移,部分线段右移
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 0: point1(1) = 0: point1(2) = 0
point2(0) = 200: point2(1) = 0: point2(2) = 0
For I = 1 To LineCount Step 2
If I <= LineCount Then oLine(I).Move point1, point2 ‘1, 3, 5, 7
If I + 1 <= LineCount Then oLine(I + 1).Move point2, point1 ‘2, 4, 6, 8
Next I
‘测试三:识别屏幕所选图元
‘在 Dictionarys 中查找 “Line”,并读取”Handle” App “1000” 位码的值
Dim oSelset As Object, oItem As Object
sTemp = GetDicString(oDraw, “Line”, “Handle”)
sTemp = PurgeTerminal(sTemp, “|”)
Dim TempArray As Variant
TempArray = Split(sTemp, “|”, -1, vbTextCompare)
Dim iIndex As Integer
Dim TempName As String
TempName = SelName(8)
If SetExist(oDraw, TempName) Then oDraw.SelectionSets.Item(TempName).Delete
Set oSelset = oDraw.SelectionSets.Add(TempName)
oDraw.Activate
oSelset.SelectOnScreen
‘Debug.Print “oSelSet.Count” & Space$(1) &”=” & Space$(1) & oSelSet.Count
If oSelset.Count <= 0 Then Exit Sub
For I = 0 To oSelset.Count – 1
iIndex = IndexInArray(oSelset.Item(I).Handle, TempArray)
If iIndex = -1 Then
Debug.Print “选择了集外图元.”
Else
Debug.Print “选择了” & CStr(iIndex + 1) & “号线段.”
End If
Next I
oSelset.Delete
Set oSelset = Nothing
Set oItem = Nothing
二十四史简介——后汉书
《后汉书》九十卷,南朝宋范晔撰。范晔字蔚宗,顺阳郡顺阳县(今河南省淅川县)人。出身于一个世族家庭。他的祖父范宁曾任晋豫章太守,著《谷梁集解》一书。《十三经注疏》中的《谷梁传注疏》就是以《谷梁集解》为基础写成的。他的父亲范泰官拜金紫光禄大夫,加散骑常侍,是宋武帝刘裕的得力助手。他博览群书、潜心著述,作《古今善言》二十四篇。所以范晔有很深的家学渊源,一直以名门之后自居,生性孤傲,不拘小节,仕宦不甘居人后,著述也不甘居人后。以此成名,也以此丧身。
元嘉九年,范晔在为彭城太妃治丧期间,行为失检得罪了司徒刘义康,被贬为宣城太守,范晔郁郁不得志,就借助修史来寄托他的志向,开始写作《后汉书》。
元嘉二十二年,当他完成了本纪、列传的写作,同时又和谢俨共同完成《礼乐志》、《舆服志》、《五行志》、《天文志》、《州郡志》等五志的时侯,有人告发他参与了刘义康的篡位阴谋,因此下狱而死。谢俨怕受牵连,毁掉了手中的志稿,使《后汉书》只有纪传部分流传了下来。
在范晔《后汉书》之前,已问世的有关东汉历史的重要著作不下十部,范晔以《东观汉记》为基本史料依据,以华峤书为主要蓝本,吸取其他各家书的长处,删繁补缺,整齐故事,超越众家,后来居上。所以到了唐代,范晔《后汉书》取代《东观汉记》,与《史记》、《汉书》并称“三史“,盛行于世。而诸家《后汉书》,除袁宏《后汉纪》外,都相继散亡。于是范晔《后汉书》成为我们现在研究东汉历史的最基本的依据。
范晔《后汉书》的记述,起于刘秀起兵推翻王莽,终于汉献帝禅位于曹丕,详载了东汉一百九十五年的历史。
AutoCAD 从 Dictionarys 中读取数据
‘绑定 AutoCAD
Dim I As Integer, J As Integer
Dim oAutoCAD As Object ‘AutoCAD Application 本身
Call BindAutoCAD(True)
Dim oDraw As Object ‘AutoCAD 多文档之一
‘打开并绑定文件 D:/Test.dwg
Set oDraw = oAutoCAD.Application.Documents.Open(“D:/Test.dwg”)
‘在 Dictionarys 中查找 “New Dic”,并读取”属性” App 的值
Dim sTemp As String
sTemp = GetDicString(oDraw, “New Dic”, “属性”)
Public Function GetDicString(ByVal vDraw As Variant, ByVal sDic As String, ByVal sApp As String) As String ‘在 Dictionarys 中查找 “New Dic”,并读取”属性” App “1000” 位码的值
GetDicString = “”
Dim I As Integer, J As Integer
Dim XTypeOut As Variant
Dim XValueOut As Variant
Dim oDic As Object
Set oDic = vDraw.Dictionaries.Item(sDic)
oDic.GetXData sApp, XTypeOut, XValueOut
If Not IsArray(XTypeOut) Or Not IsArray(XValueOut) Then Exit Function
For I = LBound(XTypeOut) To UBound(XTypeOut)
If XTypeOut(I) = 1000 Then GetDicString = XValueOut(I)
Next I
End Function