def job3(): '''以该多边形的外包矩形的左下角为原点,实现沿着x方向的错切变换 ''' try: acad.doc.SelectionSets.Item('SS1').Delete() except Exception: print('Delete selection failed') selection = acad.doc.SelectionSets.Add('SS1') acad.prompt('选择一条多义线') selection.SelectOnScreen(aShort([0]), ['lwpolyline']) if selection.Count == 1: entity = selection.Item(0) else: print("选择的多义线多于一条") return coor = entity.Coordinates # minPnt=np.float_([0,0,0]) # maxPnt=np.float_([0,0]) # pBox=entity.GetBoundingBox # minx=pBox()[0][0] # miny=pBox()[0][1] # maxx=pBox()[1][0] # maxy=pBox()[1][1] retval = GetBoundingBox(entity) mat = multi(move(-retval[0], -retval[1]), shear(1), move(retval[0], retval[1])) newcoor = transform(mat, coor) entity.Coordinates = aDouble(newcoor) entity.Color = ACAD.acYellow acad.doc.Regen(1)
def job2(): '''选取最长的对角线,以对角线的某一点为原点,沿该对角线伸长1.5倍 绘制的线用蓝色表示 ''' try: acad.doc.SelectionSets.Item('SS1').Delete() except Exception: print('Delete selection failed') selection = acad.doc.SelectionSets.Add('SS1') acad.prompt('选择一条多义线') selection.SelectOnScreen(aShort([0]), ['lwpolyline']) if selection.Count == 1: entity = selection.Item(0) else: print("选择的多义线多于一条") return coor = entity.Coordinates #tuple77 vectorcoor = longestDiagonalLine(coor) basePnt = vectorcoor[0:2] endPnt = vectorcoor[2:4] angle = acad.doc.Utility.AngleFromXAxis(APoint(*basePnt), APoint(*endPnt)) negbasePnt = [-x for x in basePnt] mat1 = multi(move(*negbasePnt), rotate(-angle)) mat2 = scale(1.5) mat3 = multi(rotate(angle), move(*basePnt)) mat = multi(mat1, mat2, mat3) newcoor = transform(mat, coor) entity.Coordinates = aDouble(newcoor) entity.Color = ACAD.acBlue acad.doc.Regen(1)
def demo5(): #选择集 try: acad.doc.SelectionSets.Item('SS4').Delete() except Exception: print('未删除成功') sstext = acad.doc.SelectionSets.Add('SS4') filtertype = aShort([0]) filterdata = ('circle', ) sstext.SelectOnScreen(filtertype, filterdata)
def tin(): """ 从文件中读取点,生成tin """ acad = Autocad() ptlist = [] num = acad.doc.Utility.GetInteger('请选择从:\n1.从文件中读取点 2.现有点(当前图层)生成三角网') if num == 1: fname = tkFileDialog.askopenfilename(title=u"选择文件", filetypes=[("text file", "*.txt"), ("all", "*.*")], initialdir=r"D:\学习\计算机图形学") f = open(fname) lines = f.readlines() f.close() poLayer = acad.doc.Layers.Add('point') acad.doc.ActiveLayer = poLayer for i in range(1, len(lines), 2): t = lines[i].split(',') ap = APoint(float(t[1]), float(t[2]), float(t[3])) ptlist.append(ap) acad.model.AddPoint(ap) elif num == 2: try: acad.doc.SelectionSets.Item("SS1").Delete() except Exception: print('Delete selection failed') ss = acad.doc.SelectionSets.Add('SS1') ss.Select(ACAD.acSelectionSetAll, aShort([0, 8]), ['POINT', 'point']) for i in range(ss.Count): c = ss.Item(i).Coordinates ptlist.append(APoint(ss.Item(i).Coordinates)) ptlist = PointSet(ptlist) minpo, maxpo = ptlist.GetBoundingBox() acad.app.ZoomWindow(minpo, maxpo) lineLayer = acad.doc.Layers.Add('line') lineLayer.Color = ACAD.acRed acad.doc.ActiveLayer = lineLayer points = np.array(ptlist) points = points[:, 0:2] tri = Delaunay(points) for simplex in tri.simplices: aplist = [ APoint(ptlist[simplex[0]]), APoint(ptlist[simplex[1]]), APoint(ptlist[simplex[2]]) ] lwp = acad.model.AddLightWeightPolyline(toLightWeightPolyline(aplist)) lwp.Closed = True
def demo12(): #选择0层圆并将颜色改为红色 try: acad.doc.SelectionSets.Item('SS5').Delete() except Exception: print('ss5不存在') ss = acad.doc.SelectionSets.Add('SS5') filtertype = aShort([0, 8]) filterdata = ('Circle', '0') ss.SelectOnScreen(filtertype, filterdata) newcolor = acad.app.GetInterfaceObject('AutoCAD.AcCmColor.20') #.20 version independent newcolor.SetRGB(255, 0, 0) #Colors are identified by an AcCmColor object. # This object can hold an RGB value, an ACI number # (an integer from 1 to 255), or a named color. # Using an RGB value, you can choose from millions of colors. for entity in ss: entity.TrueColor = newcolor ss.Delete()
def job1(): '''绕中心点逆时针旋转45度,绘制的线用红色表示 ''' try: acad.doc.SelectionSets.Item('SS1').Delete() except Exception: print('Delete selection failed') selection = acad.doc.SelectionSets.Add('SS1') acad.prompt('选择一条多义线') selection.SelectOnScreen(aShort([0]), ['lwpolyline']) if selection.Count == 1: entity = selection.Item(0) else: print("选择的多义线多于一条") return coor = entity.Coordinates #tuple newcoor = transform(rotate(radians(45), *center(coor)), coor) entity.Coordinates = aDouble(newcoor) entity.Color = ACAD.acRed acad.doc.Regen(1)
def job5(): try: acad.doc.SelectionSets.Item('SS1').Delete() except Exception: print('Delete selection failed') selection = acad.doc.SelectionSets.Add('SS1') acad.prompt('选择一条多义线') selection.SelectOnScreen(aShort([0]), ['lwpolyline']) if selection.Count == 1: entity = selection.Item(0) else: print('选择的多义线多于一条') return coor = entity.Coordinates ptlist = Polygon(coor) leftup = ptlist.Topleft index0 = ptlist.GetTopLeftIndex() retVal = ptlist.GetDirectionArea() oriention = retVal[0] area = abs(retVal[1]) edge = ptlist.GetAverageEdgeLength() edgecenter = ptlist.GetEdgeCenter() height = edge / 20 #字高为平均边长的1/20 num = 1 if oriention: for i in range(index0, index0 - len(ptlist), -1): acad.model.AddText('J%d' % num, ptlist[i], height) acad.model.AddText('L%d' % num, edgecenter[i], height) num += 1 else: for i in range(index0 - len(ptlist), index0, 1): acad.model.AddText('J%d' % num, ptlist[i], height) acad.model.AddText('L%d' % num, edgecenter[i], height) num += 1 area = round(area, 2) #point=GetMiddle(ptlist) point = ptlist.Center acad.model.AddText('面积=%s' % area, point, height)