Chuyển đến nội dung
Diễn đàn CADViet
BinhQN

Nhờ Mọi Người Viết Giùm Lisp Offset Rectang Vào Trong L/4

Các bài được khuyến nghị

Do phải vẽ kết cầu sàn lặp lại nhiều lần nên rất mệt . Để vẽ lớp thép tăng cường phía trên sàn,  mong các bác viết giùm lisp offset vào  trong L/4 và làm tròn 50.

- B1: chọn các rectang cần offset.

- B2: Kết quả các rectang offset vào trong và làm tròn lên 50.

Mình có tìm thấy Lisp chia dim L/4 tương tự của bác quocmanh04tt .Tại úp lisp không được nên mình để link

Thank mọi người.

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chạy thử plug-in cho AutoCAD 2007 nhé.

 

Cách sử dụng :
1. giải nén và copy file "OffsetRectang.dll" vào hệ thống(đĩa cứng, USB, ...).
2. Khởi động AutoCAD.
3. Tại dấu nhắc (Command ) của CAD gõ lệnh NETLOAD và chỉ đến vị trí file "OffsetRectang.dll" vừa copy ở buớc 1, chọn OPEN để hoàn thành lệnh NETLOAD.
4. gõ lệnh OffsetRectang để bắt đầu ...

OffsetRectang.zip

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Đính kèm source code cho anh em nào có nhu cầu tham khảo:

using System;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;
[assembly: CommandClass(typeof(Gia_Bach.OffsetCmds))]

namespace Gia_Bach
{
    public class OffsetCmds
    {
        [CommandMethod("OffetRectangle")]
        public static void OffetRectangle()
        {
            var doc = AcadApp.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            PromptSelectionOptions psop = new PromptSelectionOptions();
            SelectionFilter filter = new SelectionFilter(new TypedValue[] { new TypedValue(0, "lwpolyline") });
            PromptSelectionResult psr = ed.GetSelection(psop, filter);
            if (psr.Status != PromptStatus.OK) return;

            using (var tr = db.TransactionManager.StartTransaction())
            {
                var ms = (BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForWrite);
                foreach (ObjectId id in psr.Value.GetObjectIds())
                {
                    Polyline pline = (Polyline)tr.GetObject(id, OpenMode.ForRead);
                    Polyline oPline = OffetRectangle(pline, 4);
                    if (oPline != null)
                    {
                        ms.AppendEntity(oPline);
                        tr.AddNewlyCreatedDBObject(oPline, true);
                    }
                }

                tr.Commit();
            }
        }

        public static Polyline OffetRectangle(Polyline pline, int step)
        {
            if (pline.NumberOfVertices != 4)
            {
                AcadApp.ShowAlertDialog("Select object does not a rectangle. Ignore!");
                return null;
            }

            Point2d pt1 = pline.GetPoint2dAt(0);
            Point2d pt2 = pline.GetPoint2dAt(1);
            Point2d pt3 = pline.GetPoint2dAt(2);
            Point2d pt4 = pline.GetPoint2dAt(3);

            double width = pt1.GetDistanceTo(pt2);
            double height = pt1.GetDistanceTo(pt4);

            if (width < 150 || height < 150)
            {
                AcadApp.ShowAlertDialog("Dimension of rectangle too small. Ignore!");
                return null;
            }

            double width4 = Math.Ceiling(width / step / 50.0) * 50;
            double height4 = Math.Ceiling(height / step / 50.0) * 50;

            Point2d ptw4 = pt1 + pt1.GetVectorTo(pt2).GetNormal() * width4;
            Point2d pt14 = ptw4 + pt1.GetVectorTo(pt4).GetNormal() * height4;

            ptw4 = pt2 + pt2.GetVectorTo(pt1).GetNormal() * width4;
            Point2d pt24 = ptw4 + pt2.GetVectorTo(pt3).GetNormal() * height4;

            ptw4 = pt3 + pt3.GetVectorTo(pt4).GetNormal() * width4;
            Point2d pt34 = ptw4 + pt3.GetVectorTo(pt2).GetNormal() * height4;

            ptw4 = pt4 + pt4.GetVectorTo(pt3).GetNormal() * width4;
            Point2d pt44 = ptw4 + pt4.GetVectorTo(pt1).GetNormal() * height4;

            Polyline pline4 = new Polyline();
            pline4.AddVertexAt(0, pt14, 0, 0, 0);
            pline4.AddVertexAt(1, pt24, 0, 0, 0);
            pline4.AddVertexAt(2, pt34, 0, 0, 0);
            pline4.AddVertexAt(3, pt44, 0, 0, 0);
            pline4.Closed = true;
            pline4.Elevation = pline.Elevation;
            pline4.SetPropertiesFrom(pline);

            return pline4;
        }
    }
}

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bác giúp em sao mà em làm theo sự hướng dẫn trên thì khi đánh lệnh OffsetRectang nó lại báo lỗi như sau:

Unknown command "OFFSETRECTANG".  Press F1 for help.

Và cho em lệnh ghi ngắn lại ví dụ như : gõ lệnh or . 

Em cảm ơn!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Command: OffetRectangle
Unknown command "OFFETRECTANGLE".  Press F1 for help.

Command: OffetRectang
Unknown command "OFFETRECTANG".  Press F1 for help.

Vẫn không được bác xem giúp em với !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cám ơn bác HA đã phát hiện "lỗi đánh máy".

 

Có thể file bị block trong quá trình copy, thử unblock file dll.

tham khảo cách Unblock file

UnBlock.png

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Copy tên lệnh bác Ha viết ở trên, nó chạy tốt.

Tôi thử copy lệnh của bạn ở trên thì chạy không được (unknown command), không biết tại sao ?!

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
2 phút trước, BinhQN đã nói:

Cảm ơn bác. Em copy lệnh của Bác HA ở trên chạy được rồi. Chúc bác một ngày vui vẻ, nhiều may mắn!

Đêm nay vui vẻ chứ! Ngày còn đâu??? :-)

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cả 2 lisp đều rất tuyệt vời . Lisp bác gia_bach đúng yêu cầu em, còn bác Mạnh hiểu ý cho L/4 cạnh ngắn càng tuyệt vời hơn nữa em cảm ơn !!!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
57 phút trước, gia_bach đã nói:

Copy tên lệnh bác Ha viết ở trên, nó chạy tốt.

Tôi thử copy lệnh của bạn ở trên thì chạy không được (unknown command), không biết tại sao ?!

Thế mới gọi là tài nghệ!

  • Like 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 27/4/2018 tại 22:23, quocmanh04tt đã nói:

Mình tham gia 1 cái, lệnh O4L ("O bốn lờ")... :-)

 

O4L.rar

rất xin lỗi bác có thể up lại lisp của bác k ạ? em tải file rar kia về máy báo file rar hỏng ạ.

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 27/4/2018 tại 13:30, gia_bach đã nói:

Chạy thử plug-in cho AutoCAD 2007 nhé.

 

Cách sử dụng :
1. giải nén và copy file "OffsetRectang.dll" vào hệ thống(đĩa cứng, USB, ...).
2. Khởi động AutoCAD.
3. Tại dấu nhắc (Command ) của CAD gõ lệnh NETLOAD và chỉ đến vị trí file "OffsetRectang.dll" vừa copy ở buớc 1, chọn OPEN để hoàn thành lệnh NETLOAD.
4. gõ lệnh OffsetRectang để bắt đầu ...

OffsetRectang.zip

dạ tks anh

  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×