Можно ли прорисовывать блоки в AutoCAD2007 через C#
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Можно ли прорисовывать блоки в AutoCAD2007 через C#

Можно ли прорисовывать блоки в AutoCAD2007 через C#

Ответ
Поиск в этой теме
Непрочитано 19.12.2011, 13:31 #1
Можно ли прорисовывать блоки в AutoCAD2007 через C#
ghost
 
Регистрация: 19.12.2011
Сообщений: 35

Добрый день! Уважаемые участники форума!
Я начинающий программист , хорошо знаю AutoCAD. Хотел узнать, можно ли готовые блоки которые хранятся в *.dwg файле, вставлять и прорисовывать к примеру в ряд, в новом документе AutoCAD ???
И если это возможно, может быть есть у кого нибудь какой нибудь исходник..... или ссылка на инфу об этом!
На сколько знаю Autodesk-ом выпускаются библиотека ObjectARX для С++ в которой я описания подобных манипуляций не нашел, но я так понял что с AutoCAD можно работать через NET и библиотеки есть в самом AutoCAD-е ,вот только инфы по ним нет.....
Просмотров: 15428
 
Непрочитано 19.12.2011, 14:40
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от ghost Посмотреть сообщение
На сколько знаю Autodesk-ом выпускаются библиотека ObjectARX для С++ в которой я описания подобных манипуляций не нашел, но я так понял что с AutoCAD можно работать через NET и библиотеки есть в самом AutoCAD-е ,вот только инфы по ним нет.....
тынц.
Цитата:
Хотел узнать, можно ли готовые блоки которые хранятся в *.dwg файле, вставлять и прорисовывать к примеру в ряд, в новом документе AutoCAD ???
можно. Программно импортируешь определение блока, затем создаёшь его вхождение.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 19.12.2011, 14:48
#3
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Все это делается элементарно
Если вставляется чертеж как блок, можешь использовать
такую команду (правда код на VB.NET,но легко транслировать на C#)
Код:
[Выделить все]
<CommandMethod("IBB", CommandFlags.Session And CommandFlags.Redraw)> _
    Public Sub test()
        Dim DwgNm As String = "c:\abc.dwg"
        Dim blkNm As String = "abc"
        Dim insPt As New Point3d(300.0, 300.0, 0.0)
        'Dim s3d As New Scale3d(2)
        'Dim rot As Double = Math.pi/4
        Dim AcDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = AcDoc.Database
        InsertDrawingAsBlock(AcDoc, DwgNm, blkNm, insPt)
    End Sub
    Public Sub InsertDrawingAsBlock(ByVal doc As Document, ByVal filepath As String, ByVal blockname As String, ByVal ipt As Point3d)
        Dim curdb As Database = doc.Database
        Dim ed As Editor = doc.Editor
        Dim loc As DocumentLock = doc.LockDocument()
        Using loc
            Dim tr As Transaction = doc.TransactionManager.StartTransaction
            Using tr
                Try
                    Dim blkid As ObjectId
                    Dim bt As BlockTable = CType(tr.GetObject(curdb.BlockTableId, OpenMode.ForRead, False), BlockTable)
                    If bt.Has(blockname) Then
                        Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(String.Format("Block ""{0}"" does already exist" & vbLf & "Try another name", blockname))
                        Return
                    End If
                    Dim btr As BlockTableRecord = CType(tr.GetObject(curdb.CurrentSpaceId, OpenMode.ForWrite), BlockTableRecord)
                    Dim db As Database = New Database(False, True)
                    Using db
                        db.ReadDwgFile(filepath, System.IO.FileShare.Read, False, "")
                        blkid = curdb.Insert(blockname, db, True)
                    End Using
                    If (Not bt.Has(blockname)) Then
                        Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(String.Format("Block ""{0}"" does not added to block table" & vbLf & "Exit on Error", blockname))
                        Return
                    End If
                    Dim btrec As BlockTableRecord = CType(tr.GetObject(blkid, OpenMode.ForRead, False), BlockTableRecord)
                    If String.IsNullOrEmpty(btrec.Name) Then
                        btrec.UpgradeOpen()
                        btrec.Name = blockname
                        btrec.DowngradeOpen()
                    End If
                    Dim bref As BlockReference = New BlockReference(ipt, blkid)
                    Dim mat As Matrix3d = Matrix3d.Identity
                    bref.TransformBy(mat)
                    bref.ScaleFactors = New Scale3d(2)
                    bref.Rotation = Math.PI / 4
                    btr.AppendEntity(bref)
                    tr.AddNewlyCreatedDBObject(bref, True)
 
                    If btrec.HasAttributeDefinitions Then
                        Dim atcoll As Autodesk.AutoCAD.DatabaseServices.AttributeCollection = bref.AttributeCollection
                        For Each subid As ObjectId In btrec
                            Dim ent As Entity = DirectCast(subid.GetObject(OpenMode.ForRead), Entity)
                            Dim attDef As AttributeDefinition = TryCast(ent, AttributeDefinition)
                            If attDef IsNot Nothing Then
                                ed.WriteMessage(vbLf & "Value: " + attDef.TextString)
                                Dim attRef As New AttributeReference()
                                attRef.SetPropertiesFrom(attDef)
                                attRef.Visible = attDef.Visible
                                attRef.SetAttributeFromBlock(attDef, bref.BlockTransform)
                                attRef.HorizontalMode = attDef.HorizontalMode
                                attRef.VerticalMode = attDef.VerticalMode
                                attRef.Rotation = attDef.Rotation
                                attRef.TextStyle = attDef.TextStyle
                                attRef.Position = attDef.Position + ipt.GetAsVector()
                                attRef.Tag = attDef.Tag
                                attRef.FieldLength = attDef.FieldLength
                                attRef.TextString = attDef.TextString
                                attRef.AdjustAlignment(curdb)
                                atcoll.AppendAttribute(attRef)
                                tr.AddNewlyCreatedDBObject(attRef, True)
                            End If
                        Next
                    End If
                    ed.UpdateScreen()
                    tr.Commit()
                Catch ex As Autodesk.AutoCAD.Runtime.Exception
                    Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(ex.ToString & vbCr & ex.Message)
                End Try
            End Using
        End Using
    End Sub
Если блок вставляешь из коллекции блоков другого документа
используй для его чтения методы ReadDwgFile
и метод WBlockCloneObjects для импорта нужных блоков
Смотри на болоте
http://www.theswamp.org/index.php?board=27.0
и у Кина Волмслея
http://through-the-interface.typepad.com/

Вот пример на скорую руку того что тебе нужно
Документ источник должен быть активным блоки
копируются из него в новый документ
Измени значения на нужные

Код:
[Выделить все]
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Windows
Imports System.Windows.Forms
Imports Autodesk.AutoCAD.Internal
--------------------------------------------
#Region "Wblocking for DWG.RU"
        Public Sub CreateEmptyDwg(ByVal dwgpath As String)
            Try
                Dim db As New Database(True, True)
                db.SaveAs(dwgpath, DwgVersion.Newest)
                db.CloseInput(True)
            Catch ex As System.Exception
                Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(ex.Message)
            End Try
        End Sub
        <CommandMethod("ImportBlocksToNewDwg", "ahoy", CommandFlags.Session Or CommandFlags.Modal Or CommandFlags.Redraw)> _
        Public Sub TestMultWBlocking()
            Dim newDwgPath As String = "C:\Test\InsertExample.dwg" '<-- change file path for the newly created document to insert block in
            Dim pts As New Point3dCollection
            pts.Add(New Point3d(0, 0, 0))
            pts.Add(New Point3d(100, 0, 0))
            pts.Add(New Point3d(200, 0, 0))'<-- change insertion points collection here
            Dim blocks As New List(Of String)
            blocks.Add("Block1")
            blocks.Add("Block2")
            blocks.Add("Block3")'<-- change block names collection here
            If pts.Count <> blocks.Count Then
                Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Number of instances in the both collections is not equal to each other!")
                Return
            End If
            WBlockingExample(newDwgPath, pts, blocks)
        End Sub


        Public Sub WBlockingExample(ByVal dwgpath As String, ByVal pts As Point3dCollection, ByVal blocknames As List(Of String))
            Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
            Dim ed As Editor = doc.Editor
            Dim db As Database = doc.Database

            Dim oidc As New ObjectIdCollection()
            Try
                Using tr As Transaction = db.TransactionManager.StartTransaction()
                    If Not File.Exists(dwgpath) Then
                        CreateEmptyDwg(dwgpath)
                    End If

                    If Not File.Exists(dwgpath) Then
                        Return
                    End If
                    Dim bt As BlockTable = DirectCast(tr.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable)
                    Dim btr As BlockTableRecord = TryCast(bt(BlockTableRecord.ModelSpace).GetObject(OpenMode.ForRead), BlockTableRecord)
                    Dim bname As String = String.Empty
                    For i As Integer = 0 To blocknames.Count - 1
                        bname = blocknames(i)
                        If bt.Has(bname) Then
                            Dim blkId As ObjectId = bt(bname)
                            If Not blkId.IsNull Or Not blkId.IsErased Then
                                oidc.Add(blkId)
                            End If
                        End If
                    Next
                    tr.Commit()
                End Using

                Using newdb As New Database

                    newdb.ReadDwgFile(dwgpath, FileOpenMode.OpenForReadAndWriteNoShare, False, "")
                    'Using newdoc.LockDocument()<-- include if working from form
                    Using newtr As Transaction = newdb.TransactionManager.StartTransaction()

                        Dim IDMap As New IdMapping()
                        db.WblockCloneObjects(oidc, newdb.BlockTableId, IDMap, DuplicateRecordCloning.Replace, False)

                        Dim newbt As BlockTable = DirectCast(newtr.GetObject(newdb.BlockTableId, OpenMode.ForRead), BlockTable)
                        Dim newbtr As BlockTableRecord = TryCast(newbt(BlockTableRecord.ModelSpace).GetObject(OpenMode.ForWrite), BlockTableRecord)
                        Dim newbname As String = String.Empty
                        For i As Integer = 0 To blocknames.Count - 1
                            newbname = blocknames(i)
                            If newbt.Has(newbname) Then
                                Dim newblkId As ObjectId = newbt(newbname)
                                If Not newblkId.IsNull Or Not newblkId.IsValid Then
                                    Dim bref As New BlockReference(pts(i), newblkId)
                                    newbtr.AppendEntity(bref)
                                    newtr.AddNewlyCreatedDBObject(bref, True)

                                    Dim newbd As BlockTableRecord = DirectCast(newtr.GetObject(newblkId, OpenMode.ForRead), BlockTableRecord)
                                    If newbd.Annotative = AnnotativeStates.True Then

                                        Dim ocm As ObjectContextManager = db.ObjectContextManager
                                        Dim occ As ObjectContextCollection = ocm.GetContextCollection("ACDB_ANNOTATIONSCALES")
                                        ObjectContexts.AddContext(bref, occ.CurrentContext)
                                    End If
                                    If newbd.HasAttributeDefinitions Then
                                        For Each attId As ObjectId In newbd
                                            Dim ent As Entity = DirectCast(newtr.GetObject(attId, OpenMode.ForRead), Entity)
                                            If TypeOf ent Is AttributeDefinition Then
                                                Dim ad As AttributeDefinition = DirectCast(ent, AttributeDefinition)
                                                Dim ar As New AttributeReference()
                                                ar.SetAttributeFromBlock(ad, bref.BlockTransform)
                                                ar.AdjustAlignment(newdb)
                                                bref.AttributeCollection.AppendAttribute(ar)
                                                newtr.AddNewlyCreatedDBObject(ar, True)
                                            End If
                                        Next
                                    End If
                                End If
                            End If
                        Next
                        newtr.Commit()
                    End Using
                    newdb.SaveAs(dwgpath, DwgVersion.Current) 'A2009 ok
                    'newdb.SaveAs(dwgpath, DwgVersion.Current,Database.SecurityParameters)'<--A2010?
                End Using

            Catch ex As System.Exception
                ed.WriteMessage(ex.ToString() + vbCrLf + ex.StackTrace)
            Finally

            End Try
        End Sub
#End Region

Последний раз редактировалось Олег (jr.), 19.12.2011 в 16:15. Причина: code added
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 20.12.2011, 10:44 Спасибо !!!
#4
ghost


 
Регистрация: 19.12.2011
Сообщений: 35


Спасибо большое за помощь!
Все вроде проясняется ..... "Point3d(0, 0, 0)" - это точка входа!?
P.S. Если можно, прокомментируйте пожалуйста основные части алгоритма второго исходника.....
ghost вне форума  
 
Непрочитано 20.12.2011, 13:42
#5
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Извини ничего объяснять не буду

Тебе нужно сюда:

http://docs.autodesk.com/ACD/2010/EN...icNumber=d0e51

Смотри свойста и методы
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 21.12.2011, 10:36
#6
ghost


 
Регистрация: 19.12.2011
Сообщений: 35


Спасибо! Это как раз то что нужно!
ghost вне форума  
 
Непрочитано 21.12.2011, 12:42
#7
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Не за что,
Успехов
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 11.01.2012, 18:08
#8
ghost


 
Регистрация: 19.12.2011
Сообщений: 35


Добрый день!
Подскажите пожалуйста, как именно прорисовать в пространстве модели блок по определенным координатам..... Не могу разобраться ..... Я понял как скопировать блоки из внешнего файла в базу открытого файла! Теперь не могу прорисовать..... Может есть у кого нибудь исходник на чем нибудь..... Или ткните носом в тех которых уже есть..... Я был бы весьма признателен..... Заранее спасибо!
ghost вне форума  
 
Непрочитано 11.01.2012, 19:33
#9
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от ghost Посмотреть сообщение
как именно прорисовать в пространстве модели блок по определенным координатам..... Не могу разобраться .....
Долго же ты возишься со своим вопросом.
Цитата:
Сообщение от ghost Посмотреть сообщение
... Или ткните носом в тех которых уже есть...
То о чём спрашиваешь, называется "создание вхождения блока". Тут пример создания определения блока и его вхождения (второе - то, о чём спрашиваешь).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 11.01.2012, 20:07
#10
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от ghost Посмотреть сообщение
Может есть у кого нибудь исходник на чем нибудь.....
Глянь мой набросок здесь
в коде найдешь и создание и вставку
и еще чего полезного:

http://www.acadnetwork.com/topic-147.0.html
Олег (jr.) вне форума  
 
Непрочитано 11.01.2012, 20:27
#11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Олег (jr.), там регистрация требуется
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.01.2012, 21:04
#12
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Олег (jr.), там регистрация требуется
Алексей, извини, забыл - склероззз...
Код:
[Выделить все]
        #region "Simple numbering suit"
        // simple numbering command
        [CommandMethod("bubnum")]
        public static void CreateBubble()
        {

            string blkname = "bubble";

            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            Editor ed = doc.Editor;

            Matrix3d ucs = ed.CurrentUserCoordinateSystem;

            using (DocumentLock docloc = doc.LockDocument())
            {
                Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("INSBASE", Point3d.Origin);//optional

                Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("LWDISPLAY", 1);//optional

                try
                {
                    Point3d pt = Point3d.Origin;

                    Transaction tr = db.TransactionManager.StartTransaction();

                    using (tr)
                    {
                        BlockTableRecord currSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);

                        BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);

                        BlockTableRecord btr = null;

                        if (!bt.Has(blkname))
                        {
                            db.Clayer = db.LayerZero;

                            btr = new BlockTableRecord();

                            btr.Name = blkname;

                            btr.Origin = pt;

                            btr.BlockScaling = BlockScaling.Uniform;

                            btr.Explodable = false;

                            btr.Comments = "Bubble block for numbering suite";

                            btr.Units = UnitsValue.Inches;

                            bt.UpgradeOpen();

                            bt.Add(btr);

                            bt.DowngradeOpen();

                            Circle circ = new Circle(pt, Vector3d.ZAxis, db.Textsize * 1.5);
                            //1.5
                            circ.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(ColorMethod.ByAci, 0);
                            //0 - byblock 'byblock
                            circ.LinetypeId = db.ContinuousLinetype;

                            circ.LineWeight = LineWeight.LineWeight030;

                            btr.AppendEntity(circ);

                            AttributeDefinition attDef = new AttributeDefinition(pt, "1", "NUMBER", "NUMBER", db.Textstyle);

                            attDef.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(ColorMethod.ByAci, 0);
                            //0 - byblock
                            attDef.LinetypeId = db.ContinuousLinetype;

                            attDef.VerticalMode = TextVerticalMode.TextVerticalMid;

                            attDef.HorizontalMode = TextHorizontalMode.TextCenter;

                            attDef.LockPositionInBlock = true;

                            btr.AppendEntity(attDef);

                            tr.AddNewlyCreatedDBObject(circ, true);

                            tr.AddNewlyCreatedDBObject(attDef, true);

                            tr.AddNewlyCreatedDBObject(btr, true);


                        }
                        else
                        {
                            btr = (BlockTableRecord)tr.GetObject(bt[blkname], OpenMode.ForRead);
                        }

                        int num = 1;

                        PromptPointOptions ppo = new PromptPointOptions("\nPick an Insertion Point: ");

                        ppo.AllowNone = true;

                        PromptPointResult pres = default(PromptPointResult);
                        do
                        {
                            pres = ed.GetPoint(ppo);
                            if (pres.Status != PromptStatus.OK)
                            {
                                break;
                            }
                            else
                            {
                                Point3d ipt = pres.Value.TransformBy(ucs);

                                BlockReference bref = null;

                                bref = new BlockReference(ipt, btr.ObjectId);

                                bref.ScaleFactors = new Scale3d(1, 1, 1);

                                currSpace.AppendEntity(bref);

                                tr.AddNewlyCreatedDBObject(bref, true);

                                AttributeCollection atcoll = bref.AttributeCollection;

                                foreach (ObjectId subid in btr)
                                {
                                    Entity ent = (Entity)subid.GetObject(OpenMode.ForRead);

                                    AttributeDefinition aDef = ent as AttributeDefinition;

                                    if (aDef != null)
                                    {
                                        AttributeReference attRef = new AttributeReference();

                                        attRef.SetAttributeFromBlock(aDef, bref.BlockTransform);

                                        if (attRef.Tag == "NUMBER")
                                        {
                                            attRef.TextString = num.ToString();

                                            num += 1;
                                        }
                                        attRef.AdjustAlignment(db);

                                        atcoll.AppendAttribute(attRef);

                                        attRef.DowngradeOpen();
                                    }

                                }
                                bref.DowngradeOpen();

                                tr.TransactionManager.QueueForGraphicsFlush();

                            }
                        } while (pres.Status == PromptStatus.OK);

                        tr.Commit();
                    }

                }

                catch (System.Exception ex)
                {
                    Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(ex.Message + "\n" + ex.StackTrace);
                }
                finally
                {
                    //do nothing or display your message here
                    ed.WriteMessage("\nPokey");
                }
            }
        }
        #endregion
Олег (jr.) вне форума  
 
Непрочитано 11.01.2012, 21:17
#13
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Глянь мой набросок здесь
Чем не устроила ссылка на KEAN WALMSLEY? Всё то же самое...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 11.01.2012, 21:44
#14
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811



А меня-то каким боком цитировать?
Я вроде вопросов не задавал...
Олег (jr.) вне форума  
 
Непрочитано 11.01.2012, 21:59
#15
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
А меня-то каким боком цитировать?
Я вроде вопросов не задавал...
Так ты показал идентичный код.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 11.01.2012, 22:05
#16
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от hwd Посмотреть сообщение
Так ты показал идентичный код.
Спасибо за намек - типа стырил у Кина Волмслея...
Олег (jr.) вне форума  
 
Непрочитано 11.01.2012, 22:10
#17
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
типа стырил у Кина Волмслея...
Идентичный - не значит, что "стыренный"(с). Я о том, что оба кода делают одно и то же: создают определение блока и затем его вхождение (я же писал об этом). А поскольку уже есть ссылка, то какой смысл давать ещё одну на идентичный (по характеру содержимого) ресурс? Если автор не поймёт содержимое первой ссылки, то вторая ему так же не поможет...

Ладно, забудь...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 11.01.2012 в 22:16.
hwd вне форума  
 
Непрочитано 12.01.2012, 09:15
#18
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Сколько кода, чтобы всего лишь создать блок и вставить! А если сотни всяких блочков вставлять, с разными масштабами, поворотами, разнотипными атрибутами?

"Месье знают толк в извращениях" (С)
ShaggyDoc вне форума  
 
Непрочитано 12.01.2012, 10:26
#19
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Offtop: Так это еще не весь код - надо еще стандартную "шапку" библиотек подключить...
p.s. но правда от сотни блоков (при правильном подходе) код не более чем на 5 строк вырастет
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 12.01.2012, 10:50
#20
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Сколько кода, чтобы всего лишь создать блок и вставить! А если сотни всяких блочков вставлять, с разными масштабами, поворотами, разнотипными атрибутами?

"Месье знают толк в извращениях" (С)
Не согласен.
1. Создать блок и настроить различные его параметры (в случае необходимости) - это всегда будет требовать написания некоторого объёма кода.
2. Если имеется определение блока, то просто создать его вхождение - много строк кода не займёт. А вот если потребуется не просто создать вхождение, но и выполнить некоторую инициализацию атрибутов, настроить некоторые свойства - тут так же придётся писать соответствующий код.

При желании указанный код можно написать более компактно, но всё равно это не будет 2-3 строчки.

Может конечно в Lisp'е это и проще/короче делается, прописывая все параметры сразу в виде списка, но ведь C# это не Lisp

Цитата:
Так это еще не весь код - надо еще стандартную "шапку" библиотек подключить...
Оно того стоит.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 12.01.2012 в 10:58.
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Можно ли прорисовывать блоки в AutoCAD2007 через C#



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46
Как можно открыть чертеж через LISP на котором стоит пароль? ivspec LISP 7 10.02.2006 17:36
Можно ли через VBA динамически двигать объекты? {Smirnoff} Программирование 4 11.12.2003 01:14