化工制图AutoCAD实战教程与开发-第9章(CAD二次开发)ppt课件_第1页
化工制图AutoCAD实战教程与开发-第9章(CAD二次开发)ppt课件_第2页
化工制图AutoCAD实战教程与开发-第9章(CAD二次开发)ppt课件_第3页
化工制图AutoCAD实战教程与开发-第9章(CAD二次开发)ppt课件_第4页
化工制图AutoCAD实战教程与开发-第9章(CAD二次开发)ppt课件_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,第9章二次开发及AutoLISP,AutoCAD二次开发在化工制图中的应用AutoLISP语言基础VisualLISP基础DCL基础,.,AutoCAD二次开发在化工制图中的应用,本章目录,.,二次开发的目的及必要性几种主要的二次开发语言简介化工AutoCAD二次软件开发的思路及步骤,.,二次开发的目的及必要性AutoCAD软件作为CAD工业的旗帜产品,以其强大的功能得到广大用户的青睐。它具有精确的坐标系,能够完成各种图形的精确绘制、任意缩放和修改,支持数字化仪的精确输入。尽管如此,由于AutoCAD是作为一个通用的绘图软件而设计开发的,但各行各业都有自己的行业和专业标准,许多单位也有自己的技术规格和企业标准,化工行业也不例外,有着大量的各种图纸设计标准,因而,AutoCAD不可能完全满足每一用户的具体应用要求。但是,AutoCAD具有开放的体系结构,它允许用户和开发者在几乎所有方面对其进行扩充和修改,同时可以利用多种开发语言,开发可以自动完成某一绘制任务的软件,可大大提高绘制速度,改善工作效率。以上工作可称之为AutoCAD的二次开发技术。也就说AutoCAD二次开发技术主要包括两个方面:一方面是对它的功能进行扩充和修改,如修改或增加菜单、进行各种定制工作;另一方面是利用开发工具编写能够完成特殊任务的自动绘制软件,如下面将介绍的通过人机交互界面输入必要的数据后,系统自动完成法兰的绘制,就属于这一类型,在化工绘图中,我们需要的也是有关这一方面的开发软件,它能最大限度地满足用户的特殊需要,通过调用各种已经开发好的专用零件图绘制软件,加快绘制速度,提高工作效率。尤其重要的是,可以将大量的计算工作交给计算机去完成。这样,不仅提高了绘图速度,同时也提高了绘制精度,避免了人为的计算错误。,AutoCAD二次开发在化工制图中的应用,.,目前很多化工技术人员对AutoCAD的使用一般还仅限于它自身的各种绘图功能,使用鼠标手工绘制各种图件,对其强大的二次开发功能还没有进行深入使用。如果能使用AutoCAD的二次开发技术开发出一套软件,让AutoCAD自动绘制我们目前使用的各种图件,就可以大大提高作图效率,发挥出AutoCAD的强大图形编辑、修改功能,对图件中的各种元素进行任意修改,满足各种不同的图件格式和绘图标准,由此可见,对于一个化工技术人员来说,学会自己开发AutoCAD二次应用软件显得十分必要,因为这将大大减少具体的绘制工作,而可以将主要精力集中到设备的设计中去,从而加快化工设备的开发速度。近几年来,随着计算机软、硬件技术的飞速发展及其应用的普及,也带来了化工领域使用计算机的浪潮。首先是各课程教学使用了CAI课件,学生们可以清楚地看到各种物质的具体颜色,并可以看到动画反应,让学生们能够形象生动地上课。然后是各种实验仿真软件的出现,让学生们不用亲自下到工厂,也不用浪费任何原料,在没有危险的情况下就可以完成对实验过程或者是生产流程的学习和实习。同时计算机可以对反应进行模拟,对实验数据的拟合都大大方便了化工工作者。随之诞生的各种化工专用软件,给化学工业的发展注入了新鲜血液,使化学工业的发展如虎添翼。,AutoCAD二次开发在化工制图中的应用,.,目前,随着化学工业的进一步向前发展,各种新的机械设备被人们设计和制造,这些设备的工程图都是一件很大的工程。比如一个完整热交换器图纸,就需要一个专人12天的工夫才能完成。利用AutoCAD的二次开发技术,可以编出对热交换器的图进行批处理的程序,只需通过简单的人机会话,计算机能自动绘制出图纸,这也是化工技术人员学习掌握AutoCAD二次开发技术的目的之所在。随着化学工业的不断日新月异,对设备图纸绘制的速度要求也将越来越快,利用AutoCAD二次开发技术开发而成的软件直接绘制各种设备的技术将在化学工业中得到更加广泛的应用,其开发技术必将伴着化学工业一起发展。,AutoCAD二次开发在化工制图中的应用,.,几种主要的二次开发语言简介AutoLISPAutoLISP语言是AutoCAD所支持的一种内嵌式语言,它由美国Autodesk公司开发,其目的是使用户十分方便地利用AutoLISP编程语言对AutoCAD进行二次开发,它采用了与LISP语言中的CommonLISP最近的语法和习惯约定,同时又针对AutoCAD增加了许多新的功能,使用户可以直接调用几乎全部的AutoCAD命令,因此它既具有一般高级语言的基本结构和功能,又具有AutoCAD强大的图形处理能力,是目前计算机辅助设计和绘图中较广泛采用的语言之一。VisualLISPVisualLISP(简称VLISP)是为加速AutoLISP程序开发而设计的强有力的工具。它提供了一个完整的集成开发环境(包括编译器、调试器及其他工具,它可以显著地提高自定义AutoCAD的效率)。VisualLISP提供的主要工具有:文本编辑器、格式编排器、语法检查器、源代码调试器、检验和监视工具、文件编译器、工程管理系统/快捷相关帮助与自动匹配功能和智能化控制台等。VisualLISP克服了AutoLISP一直以来开发中所存在的诸多不便和某些局限性。从语言方面看,VisualLISP对AutoLISP语言进行了扩展,可以通过MicrosoftActiveXAutomation接口与对象交互。同时,通过实现事件反应器函数,还扩展了AutoLISP响应事件的能力。VisualLISP已经被完整地集成到AutoCAD中。,AutoCAD二次开发在化工制图中的应用,.,VBAVBA(VisualBasicforApplication)最早是建立在Office97中的标准宏语言,由于它在开发方面的易用性且功能强大,许多软件开发商都将其嵌入自己的应用程序中,作为一种开发工具提供给用户使用。而AutoCADVBA就是集成在AutoCAD中的VisualBasic开发环境,与VB的主要区别是VBA在与AutoCAD相同的进程空间中运行,提供了与AutoCAD关联的快捷的编程环境,程序设计直观快捷。它还提供了与其它可使用VBA应用程序集成的能力,可以作为其它应用程序如Word或Excel的自动化控制器。可以看出,VBA是其中编程很为快捷方便的一种,对于非计算机专业而更多熟悉VB编程语言的人来说,可以很快就掌握它。ADSADS的全名是AutoCADDevelopmentSystem,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。,AutoCAD二次开发在化工制图中的应用,.,ObjectARXObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C+为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的AutoCAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARXforAutoCAD2005,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ActiveXAutomationActiveX技术来源于OLE(ObjectLinkingandEmbedding)技术。OLE最初是对象链接与嵌入,后来发展成为复合文档技术,包括文字、图片、声音、动画片和视频等媒体可以共同存在于一个文档中。它们可以由不同的应用程序产生,同时也可以在该文档中编辑。如果应用程序支持OLE文档,则在不同应用程序之间的切换由OLE自动完成。OLE技术和其它技术共同作用,从而实现不同应用程序之间的无缝链接。自动化技术(Automation)允许一个应用程序驱动另外一个程序。驱动程序被称为自动化客户,另一个为自动化服务器。自动化技术后来发展成为ActiveXAutomation。,AutoCAD二次开发在化工制图中的应用,.,VisualJavaJava是最早由Sun公司创建的一种颇具魅力的程序设计语言,她是针对嵌入系统而设计的。像许多开发语言一样,Java是一组实时库的集合,可为软件开发者提供多种工具来创建软件、管理用户接口、进行网络通讯、发布应用程序等。对AutoCAD用户和开发者而言,Java代表着新一代的编程语言,它主要用于开发出全新的优秀产品。,AutoCAD二次开发在化工制图中的应用,.,化工AutoCAD二次软件开发的思路及步骤化工AutoCAD二次软件的开发和其它软件的开发一样,均需遵循一定的规律。一般来说,一个完善的AutoCAD二次软件开发过程可以分成4个阶段的内容,它们分别是系统规划、系统开发、系统运行与维护、系统更新。而系统规划又可以分成3个方面的内容,它们分别是战略规划、需求分析、资源分配。在这个阶段,我们主要任务是确定所需要开发软件的目的、使用对象、使用者的要求、开发者目前的能力及拥有的资源。软件开发的第二阶段是系统开发,它包括系统分析、系统设计、系统实施。这时的主要任务根据第一阶段已经做的工作基础上,提出所开发软件的逻辑方案、确定系统开发中每一步的内容和任务,在此基础上,再进行系统总体结构设计,提出系统总体布局的方案。至此,软件开发工作还停留在逻辑开发状态,尚未进入具体的编码工作。软件开发完成第二阶段的系统设计后,就进入了实质性的编码工作,也就是说进入了系统的实施阶段,这时要完成各种编码工作,完善系统各个接口之间的联络,改善界面的友好程度,对整个软件进行组装及调试,最后完成交付使用前的各项工作。如该保密的部分需要进行封装;可以公开的部分需要做好友善的人机界面。,AutoCAD二次开发在化工制图中的应用,.,软件开发的第三阶段是运行和维护阶段,一般对于规模较小的软件,对这方面的考虑就比较少。比如我们自己经常开发一些小软件来解决一些实际问题,就较少考虑以后的维护,一般只要满足目前的应用就可以了。但对于一个完善的软件来说,就需要考虑实际运行过程中出现的各种情况,并有解决方案及维护方法。这样,就会使得一个看上去较小的软件,也会变得复杂起来,但这种复杂为使用和维护带来了方便,提高了软件对付外来情况的能力,提高了软件的使用寿命,实际上等于节约了软件使用成本。任何一个软件,总有它更新的时候,此时,进入了软件开发的第4阶段,即系统更新阶段,在新的情况下,对原有的系统进行更新开发。,AutoCAD二次开发在化工制图中的应用,.,AutoLISP语言基础,本章目录,.,基本运算基本函数编程中常用的分支及条件判断函数常用的绘图命令AutoLISP命令调用过程,.,加法格式:(+)功能:求出所列数的总和实例:(+2030)结果为50(+15-10)结果为5减法格式:(-)功能:求出第一个数逐次减去后面数的差实例:(-1203050)结果为40(-15-10)结果为25乘法格式:(*)功能:求出所列数的乘积实例:(*2030)结果为600(*1.5-102)结果为-30除法格式:(/)功能:求出第一个数逐次除以后面数的商实例:(/20)结果为20(/1302)结果为65(/330)由于表中的两个元素均为整型数,结果也为整型数,故结果为0(/3.030)结果为0.1(/30(/69)系统显示被0除,原因在于表(/69)的值为0,AutoLISP语言基础,基本运算,.,自然数求幂格式:(exp)功能:求e的次幂值,e=2.71828实例:(exp2.0)结果为7.3890561(exp0)结果为1普通数求幂格式:(expt)功能:求的次方值实例:(expt23)结果为8求自然对数格式:(log)功能:求的自然对数,要求必须大于零实例:(log10.0)结果为2.3025851求平方根格式:(sqrt)功能:求的平方根,要求必须大于零实例:(sqrt4.0)结果为2.0,AutoLISP语言基础,基本运算,.,求绝对值格式:(abs)功能:求的绝对值实例:(abs-3)结果为3求最大值格式:(max)功能:求,的最大值实例:(max23410)结果为10求余数格式:(rem)功能:求整除的余数,若参数多于两个,则将整除后的余数再整除,求出余数,以此类推。实例:(rem5094)结果为1,AutoLISP语言基础,基本运算,.,AutoLISP语言基础,正弦函数SIN格式:(sin),其中用弧度表示功能:求的正弦值实例:(sin(/pi2)结果为1余弦函数COS格式:(cos),其中用弧度表示功能:求余弦值实例:(cos(/pi2)结果为0正切TAN格式:(tan),其中用弧度表示功能:求正切值实例:(tan(/pi4)结果为1反正切函数ATAN格式:(atan)功能:求反正切值,单位为弧度,为-/2,/2实例:(atan(1)结果为0.785398,即(/4)实例:(cos(/pi2)结果为0,基本函数,.,取整函数FIX格式:(fix)功能:求的整数部分,相当于高级语言中的“INT(数)”语句。实例:(fix7.8)结果为7(fix-7.8)结果为-7(fix9)结果为9实型化函数FLOAT格式:(float)功能:求转化为实型数,不考虑该数原来的类型实例:(float3)结果为3.0(float3.3)结果为3.3赋值函数SETQ格式:(setq)功能:将表达式的值赋给变量,变量和表达式需成对出现实例:(setqa10)结果a=10(setqs“it”)结果s=“it”(setqb123c10d45)结果b=123c=10d=45(setqt(+3445)结果t=79(setqP1(3445)(setqp1(3040)/确定点P1的坐标(setqp2(300400)/确定点P2的坐标(command“line”p1p2“”)/绘制从P1点到P2点的直线,AutoLISP语言基础,基本函数,.,取表中第一元素CAR函数格式:(car),表必须为引用表而非标准表,但可以是简单表,也可以是嵌套表。功能:提取的顶层第一个元素实例:(car(135)结果为1(car((13)65)结果为(13)取表中除第一元素外其它元素的CDR函数格式:(cdr),表必须为引用表而非标准表,但可以是简单表,也可以是嵌套表。功能:提取的除顶层第一个元素外的其它元素实例:(cdr(135)结果为(35)(cdr((13)65)结果为(65)CAR和CDR的组合函数CAR和CDR可以任意组合,其组合深度可达4层,执行时从右到左依次执行,若搞错次序,其结果必然出错。4个层次的组合形式为CAR、CXXR、CXXXR、CXXXXR,其中X既可以是A也可以是D,例如:(cadr(2(123)34)结果为(123)(caadr(2(116)23)34)结果为(116)(caaadr(2(116)23)34)结果为11(caaddr(2(116)23)(34)结果3,AutoLISP语言基础,基本函数,.,LAST函数格式:(last),表必须为引用表而非标准表,但可以是简单表,也可以是嵌套表。功能:提取的顶层中最后一个元素实例:(last(123)结果为3(last(123(45)结果为(45)NTH函数格式:(nth),表必须为引用表而非标准表,但可以是简单表,也可以是嵌套表。功能:提取中第个元素,注意第一个元素的序号为0号,以此类推。实例:(nth2(23(45)5)结果为(45)(nth3(23(45)5)结果为5LIST函数格式:(list)功能:将所有的按原位置构成新表,可用于确定点的坐标位置。实例:(list23(56)结果为(23(56)(list23)结果为(23)下面是一个利用list确定点的位置,绘制圆的小程序:(setqp1(list22233)(setqp2(list200300)(commandcirclep2160)(commandcirclep1160),AutoLISP语言基础,基本函数,.,ATOF函数格式:(atof)功能:将转换成实型数,返回实型数实例:(atof23)返回结果为23.0ASCII函数格式:(ascii)功能:将中第一个字符转换成ASCII码,并返回该值实例:(asciibc)返回结果为98CHR函数格式:(chr)功能:将ASCII码为的转换成相应字符,并返回该字符实例:(chr69)返回结果为E(chr80)返回结果为P“ITOA函数格式:(itoa)功能:将转换成整数字符串实例:(itoa5)返回结果为5“,AutoLISP语言基础,基本函数,.,ATOI函数格式:(atoi)功能:将转换成整数,返回值截去小数部分实例:(atoi45.4)返回结果为45(atoi-5.6)返回结果为-5(atoi7)返回结果为7(atoi34.6ac)返回结果为34(atoidf43)45返回结果为0说明:当数字串中有非数字字符时,则转换到第一个非数字原子时终止。STRCAT函数格式:(strcat)功能:将按先后顺序头尾相连起来,组成一个新的字符串。实例:(strcatbcetrty)返回结果为bcetrty,AutoLISP语言基础,基本函数,.,(20)SUBSTR函数格式:(substr功能:从中提取一个子串,该子串从起点的字符位置开始,由连续个字符组成,若缺省,则到字符串结束。实例:(substrb212c23)返回结果为212(substrb2er12c2)返回结果为2er12c“(21)READ函数格式:(read)功能:将转化成表或原子,文件处理时经常使用实例:(readad)返回结果为AD(readb)返回结果为B(read(ab)返回结果为(AB)(read(34)返回结果为(34),AutoLISP语言基础,基本函数,.,编程中常用的分支及条件判断函数在程序编写中经常会用到一些条件判断函数及循环函数,没有这些函数,就难以完成一个理想的程序,下面将一些在编程中使用程度较高的函数介绍一下。关系运算函数关系运算函数是编程中分支及条件判断函数的基础,它对数值型表达式的大小进行比较,表达式可以是两个或两个以上,其返回值是逻辑变量。比较运算成立,则返回T;不成立则返回nil,常作为条件用于条件判断语句和循环判断语句中,这一点将在下面讲解中提到。AutoLISP共有6种关系运算函数,它们分别是“=”等于、“/=”不等于、“”大于、“=”大于等于。其中等于的关系函数,其表达式只能两个,下面是6种关系函数的实际例子:,AutoLISP语言基础,(8739)返回结果nil,全程比较(8731)返回结果T(=22)返回结果T(=sb)返回结果nil(/=123)返回结果T(/=113)返回结果nil,只比较前面两个表达式(=551)返回结果T,.,逻辑运算函数AutoLISP共有3种逻辑运算函数,分别是逻辑和AND、逻辑或OR、逻辑非NOT,下面通过实例说明其应用。(andadc3)返回结果nil,只要有一个表达式为假,则返回nil(anddc)返回结果nil(setqa3b4)返回结果4,返回最后一个赋值(andab)返回结果T,由于前面给a、b赋了值(and(35)返回结果nil(or12ab)返回结果T,只要有一个表达式为真,则返回T(or(42)(69)返回结果T二分支条件函数IF格式:(if)功能:对进行运算,若成立,则执行,否则,执行,两者必居其一,所以称之为二分支条件函数,是在编程中经常用到的条件判断函数。下面是几个实际例子:(if(=13)35)测试式不成立,执行第二个表达式,第二个表达式为原子,返回5(if(“AutoLisp”“VisualLisp编辑器”;第二中方法是在AutoCAD命令行中输入“vlisp”,启动VisualLisp编辑器。,VisualLISP基础,.,编辑VisualLISP的程序在编辑窗口进行编辑,编辑时,系统会自动进行一些识别,并将其显示成不同的颜色。如括号是红色;函数是蓝色,如果想输的是各种函数,一般为表中第一项,但输完后系统没有自动变成蓝色,则说明你输错了;双引号内的绘图命令为粉红色,包括双引号本身;各种变量是黑色;数字是绿色。掌握这些规律对减少编程中的错误很有帮助。在编程过程中,如果遇到一些较为生疏的函数,可以通过系统的帮助功能加以解决。,VisualLISP基础,.,调试调试是编程工作中一项十分重要又非常繁重的工作。在没有VisualLISP之前,AutoLISP程序的调试是十分困难的,常常找不到问题之所在。幸好有了VisualLISP,使调试工作有了质的飞跃。利用其提供的调试工具和专用工具,一般可以较快地找到问题。系统调试中最常见的错误是缺少括号或有多余括号;其次是错误函数或命令,常常是绘图命令输错,因为若函数错误,在编写中可以根据颜色判断;还有列表缺陷,被零除及函数被取消。对函数被取消这种现象有点特殊,因为它并不是当前所编的程序有问题,而是在上一次调试过程中,所编程序存在缺陷,使的AutoCAD处于命令等待状态。这时,需要通过视图转换,激活AutoCAD,取消命令等待状态,就可以了。根据我们自己开发程序的经验,认为调试工作需和整个软件的开发工作结合起来。在程序开发的步骤上考虑到调试工作问题,以采用从下到上的程序编程工作为佳,结合该方法,作者推荐如下的编程调试步骤。将整个软件分解成功能相对独立的功能块,再将功能块分解成若干个小程序。,VisualLISP基础,.,将小程序中的每一个语句,按照先后次序进行编辑。在编辑过程中首先利用颜色的改变,纠正一些明显的错误,如果对某一语句把握不大,可直接加载该语句,判断系统能否通过。关于加载运行可通过选中需要加载的语句,点击专用工具中栏中的第二个工具,一般情况下,以编完相对较完整的一段语句后,再将这段进行加载运行较好,如所有的赋值语句。一段语句编写完成,加载运行结果正确,则进入下一段语句的编写。如正确,但根据错误提示可明显找到问题的,则修改后再加载运行;如无法根据错误提示找到问题的,则可以采用调试工具栏中的各种方法进行错误查找,如仍无法查到,则需逐句加载,但在逐句加载中,需要补充对加载语句中所需变量值的设定工作。通过以上工作,将小程序全局调通,并进行封装。将同一功能的小程序进行组装,并进行调试,调试完成,将功能程序进行封装。将不同功能的功能程序进行组装,并进行全局调试,调试通过,完成软件基本开发工作。根据客户应用的各种情况,对软件进行各种测试,对发现问题进行修改,最后得到完善软件,并将其封装。,VisualLISP基础,.,DCL基础,本章目录,.,定义控件程序编辑软件调试及加载,.,定义对话框是人机交互的主要界面之一,它具有良好的视觉效果,操作方便、直观,输入数据与顺序无关。当我们编写好程序,需要通过外界输入数据时,对话框是一种首选的交互工具。对话框可以用DCL(DialogControlLanguage,即对话框控制语言)来编写。DCL本身可直接在VisualLISP的编辑框中按规律编写,并进行调试和预览工作,编辑完成后,将其后缀取为“.dcl”保存,然后在主程序中用VisualLISP语句调用即可。可向用户提供图形的交互环境,使操作更为方便和直观。DCL文件由ASCII码组成,后缀为“.dcl”。,DCL基础,.,控件控件是DCL中的主要组成部分,编写对话框主要就是编写各种控件,对各种控件的属性进行定义,常见的控件主要有Button(按钮)、Edit_box(编辑框)、Image_button(图像按钮)、List_box(列表框)、Popup_list(可下拉列表框)、Radio_button(单选按钮)、Slider(滑动条)、Toggle(复选框)、Text_part(文本控件的一部分)。每一个控件有具有不同的属性,其中控件的典型属性有以下几种。Label指定显示在控件中的文字

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论