明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3432|回复: 14

[求助]关于.net实现不了的功能,怎么办?

  [复制链接]
发表于 2010-4-24 12:58:00 | 显示全部楼层 |阅读模式
我开发一些功能,.net实现不了,但是LIsp可以实现,那我该怎么办?可以在.net中调用LISP么?请教各位大侠!
发表于 2010-4-24 13:25:00 | 显示全部楼层

哪些功能?

 楼主| 发表于 2010-4-25 21:42:00 | 显示全部楼层

版主,你就帮帮我吧,我是在cad06下搞的东西,但是有一个建属性块的时候,就出现致命错误,其他版本的CAD呢,我们这里没有人用

我想弄个.NET中,用LISP把这个功能实现了,我做的程序就缺这一步了!唉!苦恼呀!

 楼主| 发表于 2010-4-25 21:49:00 | 显示全部楼层

我想着用COM来创建属性块,但是总是搞不好,飞狐版主,你的VBA好,能否教教我呢!

所有点的数据都用.NET得到了,怎么能利用这些数据为每个点创建一个属性块?

能写一段,用COM创建的属性块么?谢了!

发表于 2010-4-25 21:52:00 | 显示全部楼层

Cad06建属性快应该没什么问题的,以前做过的

看看你的代码?

另外,代码在其他版本有没问题?

。net调lisp前面的帖子我不是贴过方法了么

 楼主| 发表于 2010-4-26 19:21:00 | 显示全部楼层
  1. Public Class Class1
  2.     <CommandMethod("CBWA")> Public Sub CreateBlockWithAttributes()
  3.         Dim db As Database = HostApplicationServices.WorkingDatabase
  4.         Dim blockId As ObjectId = ObjectId.Null
  5.         Dim record As New BlockTableRecord
  6.         record.Name = "RmNum"
  7.         Using trans As Transaction = db.TransactionManager.StartTransaction
  8.             Dim points As New Point3dCollection
  9.             points.Add(New Point3d(-18, -6, 0))
  10.             points.Add(New Point3d(18, -6, 0))
  11.             points.Add(New Point3d(18, 6, 0))
  12.             points.Add(New Point3d(-18, 6, 0))
  13.             Dim pline As New Polyline2d(Poly2dType.SimplePoly, points, 0, True, 0, 0, Nothing)
  14.             record.Origin = points(3)
  15.             record.AppendEntity(pline)
  16.             Dim attdef As New AttributeDefinition
  17.             attdef.Position = New Point3d(100, 200, 0)
  18.             attdef.Height = 8
  19.             attdef.Rotation = 0
  20.             attdef.HorizontalMode = TextHorizontalMode.TextMid
  21.             attdef.VerticalMode = TextVerticalMode.TextVerticalMid
  22.             attdef.Prompt = "Room Number;"
  23.             attdef.TextString = "0000"
  24.             attdef.Tag = "Number"
  25.             attdef.Invisible = False
  26.             attdef.Verifiable = False
  27.             attdef.Preset = False
  28.             attdef.Constant = False
  29.             record.Origin = points(3)
  30.             record.AppendEntity(attdef)
  31.             Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForWrite)
  32.             If bt.Has("RmNum") = False Then
  33.                 blockId = bt.Add(record)
  34.                 trans.AddNewlyCreatedDBObject(record, True)
  35.                 trans.Commit()
  36.             End If
  37.         End Using
  38.     End Sub
  39. End Class
平台是Autocad2006 VB.net2005
发表于 2010-4-26 20:00:00 | 显示全部楼层

Public Class Class1
   <CommandMethod("CBWA")> Public Sub CreateBlockWithAttributes()
      Dim db As Database = HostApplicationServices.WorkingDatabase
      Dim blockId As ObjectId = ObjectId.Null

      Using trans As Transaction = db.TransactionManager.StartTransaction
          Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForWrite)
          If bt.Has("RmNum") Then
                     Return
          End If

          Dim record As New BlockTableRecord
          record.Name = "RmNum"
          blockId = bt.Add(record)
          trans.AddNewlyCreatedDBObject(record, True)

          Dim points As New Point3dCollection
          points.Add(New Point3d(-18, -6, 0))
          points.Add(New Point3d(18, -6, 0))
          points.Add(New Point3d(18, 6, 0))
          points.Add(New Point3d(-18, 6, 0))

          Dim pline As New Polyline2d(Poly2dType.SimplePoly, points, 0, True, 0, 0, Nothing)
          record.Origin = points(3)
          record.AppendEntity(pline)
          trans.AddNewlyCreatedDBObject(pline, True)

          Dim attdef As New AttributeDefinition
          attdef.Position = New Point3d(100, 200, 0)
          attdef.Height = 8
          attdef.Rotation = 0
          attdef.HorizontalMode = TextHorizontalMode.TextMid
          attdef.VerticalMode = TextVerticalMode.TextVerticalMid
          attdef.Prompt = "Room Number;"
          attdef.TextString = "0000"
          attdef.Tag = "Number"
          attdef.Invisible = False
          attdef.Verifiable = False
          attdef.Preset = False
          attdef.Constant = False
          record.Origin = points(3)
          record.AppendEntity(attdef)
          trans.AddNewlyCreatedDBObject(attdef, True)

          trans.Commit()

      End Using
   End Sub
End Class

 楼主| 发表于 2010-4-26 21:22:00 | 显示全部楼层

本帖子中包含更多资源

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

x
 楼主| 发表于 2010-4-26 21:23:00 | 显示全部楼层
还是有错误,这是怎么回事呢?
发表于 2010-4-26 22:00:00 | 显示全部楼层

逐步调试下,是那句代码的问题看看

不过代码在2008下没有任何问题

要么是2006下要用特殊的代码顺序写,要么是Bug

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 01:55 , Processed in 0.183318 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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