gia_bach
-
Số lượng nội dung
1.621 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
122
Bài đăng được đăng bởi gia_bach
-
-
-
16 giờ trước, thanhduan2407 đã nói:Chào các bác!
Em đang mò mẫm cách thức để tạo Boundary mà nó vẫn không triệt để.
Cụ thể là em có các lưới ô vuông (dạng Polyline) riêng biệt và 1 đường Polyline khép kín khác Layer với lưới ô vuông.
Em muốn tạo Boundary phần giao giữa từng lưới ô vuông với đường Polyline (Boundary này phải nằm phía trong của Polyline như hình đi kèm).
Nhờ các bác gợi ý cho em thuật toán để làm được điều đó được không? Cảm ơn các bác nhiều.
P/s: Hatch chỉ là mô tả các Boundary riêng biệt chứ không cần tạo Hatch.
Link file:
http://www.mediafire.com/file/9t4w1t8rksbwuob/TAO+BOUNDARY.dwg
Vấn đề của bạn có thể đưa về dạng cơ bản là tìm boundary của 2 polyline.
Cách 1:
- nổ (explode) polyline màu trắng thành các đối tượng cơ bản (line, arc)
- lần lượt tìm phần giao (bên trong) của các đối tượng cơ bản ở trên với polyline ô lưới
- nối các phần giao ở trên thành các boundary (nếu tồn tại)
Cách 2: (sử dụng command)
- convert các polyline thành region, lệnh REGION
- sử dụng lệnh INTERSECT để tìm giao của 2 region.
Cách 2 có vẻ đơn giản nhưng tốc độ không bằng cách 1.
- 1
-
Nguyên nhân do cạc màn hình (VGA) quá yếu, Cad hiển thị không đúng hình ảnh của đối tượng theo từng tỉ lệ tương ứng.
Tham khảo các bài viết về Annotation trên CadViet: Annotation CadViet
-
-
6 giờ trước, lvchien.xd đã nói:Chào các bác. Em có tìm được 1 lisp trên mạng tính tổng chiều dài. Bình thường vẫn sử dụng rất tốt.
Nhưng khi chuyển qua CAD 2019 thì không xài được nữa. Báo lỗi sau :
Lisp em đính kèm. Cảm ơn các bác nhiều
Lisp này chạy tốt với CAD2019.
Chắc do cad của bạn có vấn đề ?!
-
-
-
5 giờ trước, nvson đã nói:Nhờ các anh trợ giúp:
Trong VB.NET tôi đã tạo ra 2 đường Polyline,
Tối muốn kiểm tra nếu 2 đường này giao nhau > 2 điểm thì TRIM cái phần giao nhau đi (hoặc BREAK 1 đường).
Cảm ơn các anh.
Kiểm tra 2 đường có giao nhau: dùng hàm IntersectWith
Break 1 đường: sử dụng hàm GetSplitCurves
- 1
-
Sử dụng GetKeyword nhé.
Tham khảo:
Sub Ch3_KeyWord2()
Dim keyWord As String
ThisDrawing.Utility.InitializeUserInput 0, "Line Circle Arc"
keyWord = ThisDrawing.Utility.GetKeyword(vbCrLf & "Enter an option [Line/Circle/<Arc>]: ")
If keyWord = "" Then keyWord = "Arc"
MsgBox keyWord, , "GetKeyword Example"
End Sub- 2
-
1 giờ} trướ}c, trieu12341 đã nói:à, thêm 1 cái nữa là tại sao sau (princ "\nm2") lại có (princ) vậy bác. k có thì có sao ko
có sao hay không là do cảm nhận của mỗi người ?!
chạy 2 lisp dưới đây để thấy sự khác biệt :
(defun c:coPrinc(/) (princ"\nCo (princ).") (princ) ) (defun c:koPrinc(/) (princ"\nKhong co (princ).") )
1 giờ} trướ}c, trieu12341 đã nói:........
à mình nên dùng soft nào để tập viết lisp ạ, cty em xài zwcad k có visuallsip editor
Muốn sài VisualLisp Editor thì phải cài AutoCAD.
Có thể dùng Notepad++ để viết lisp nhưng không bằng Editor chính chủ của AutoCAD.
Có 1 số hàm của visualLisp không chạy (hoặc chạy không chính xác) trên ZwCAD !
-
-
Lisp này có ưu điểm gì so với lệnh Fillet của CAD ?
- 2
-
10 giờ trước, Người Nhà đã nói:a ơi, e hỏi ngoài lề 1 chút! giả sử e muốn chèn point vào 2 đầu của line và điểm chèn lúc này là Endpoint thì e phải sửa như thế nào ạ?
Oh, chẳng phải sửa gì cả !!!
Viết mới lại thôi.
-
thử copy dòng này (setvar "XCLIPFRAME" 0) vào file acad.lsp hoặc acaddoc.lsp
-
xóa xls đi: (setq duongdan (getfiled "\nChon File du lieu ve" "D:/" "" 4))
hoặc:
(setq duongdan (getfiled "\nChon File du lieu ve" "D:/" "xls;txt;dwg" 4))
- 1
-
-
@ ketxu: vẫn biết là càng ngon càng tốt, tuy nhiên ngân sách thì có giới hạn !
Tôi dự đinh built con i3-8100, nhưng đang cân nhắc giữa ram 16GB vs 8GB+SSD ??
-
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 ?!
- 1
-
-
Đí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; } } }
-
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 ...- 1
-
Chào các "vọc sĩ":
Anh em nào đã cài đặt và sử dụng Cad 2019 cho hỏi: cấu hình máy tính tối thiểu để chạy ngon bản Cad này ?
(Trên website của Autodesk có viết rồi, nhưng tôi muốn tham khảo ý kiến của người sử dụng.)
Cám ơn nhiều.
-
-
Thử cái này nhé (y/cầu NetFramework 3.5).
- hiển thị các file có kí tự tàu, nhật, hàn (ảrập ...) trong folder đã chọn.
- click Remove : copy các file có kí tự lạ ở bước trên và đổi thành tên mới (sau khi đã remove các kí tự lạ đó, file gốc giữ nguyên)
- 1
Lisp search đúng tên file trong folder định sẵn và tự động mở
trong AutoLisp
Đã đăng · Trả lời báo cáo
Có lẻ thớt cần 1 cái tương tự như "Import block", nhưng thay vì import thì open file đã chọn.