anhcos
-
Số lượng nội dung
305 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
21
Bài đăng được đăng bởi anhcos
-
-
Ví dụ một vài cái logo:
File định dạng png, có nền trong suốt, hộp thoại ACAD cổ điển có thể không hỗ trợ bnền trong suốt nên khi hiển thị có thể sẽ khác đi so với ảnh trên.
Mấy cái logo mẫu tải ở đây nhé.
- 2
-
Một Entity có các đặc điểm nhận dạng:
- ObjectName: ứng với từng kiểu đối tượng,cho dù ở bất kỳ bản vẽ nào.
- ObjectID: duy nhất tại thời điểm mở, thay đổi mỗi khi bản vẽ được mở lên.
- Handle: duy nhất trong 1 bản vẽ, không thay đổi trong suốt thời gian sống của nó.
Entity Name ở câu hỏi trên trong VBA chính là Handle của nó.
Từ Handle, ta có thể lấy dữ liệu từ nó: ThisDrawing.HandleToObject(Handle)
- 1
-
Cái logo không đẹp lắm, chắc phải nhờ ai có tay đồ họa tạo cho một cái.
- 1
-
Giả sử tập chọn có n đối tượng
Dùng 2 vòng lặp lồng nhau, một cái chạy theo i = 1 .. n-1, cái kia chạy từ i+1 đến n để tránh trùng hợp.
Dùng hàm IntersectWith để tìm giao giữa 2 đối tượng.
Gets the points where one object intersects another object in the drawing.
Signature
RetVal = object.IntersectWith(IntersectObject' date=' ExtendOption)
object: All Drawing Objects (Except Pviewport and PolygonMesh)
The object or objects this method applies to.
IntersectObject: Object, input-only;
The object can be one of All Drawing Objects.
ExtendOption: AcExtendOption enum; input-only
This option specifies if none, one or both, of the objects are to be extended in order to attempt an intersection.
acExtendNone
Does not extend either object.
acExtendThisEntity
Extends the base object.
acExtendOtherEntity
Extends the object passed as an argument.
acExtendBoth
Extends both objects.
RetVal
Variant (array of doubles)
The array of points where one object intersects another object in the drawing.
Remarks
If the two objects do not intersect, no data is returned. You can request the point of intersection that would occur if one or both of the objects were extended to meet the other. For example, in the following illustration, Line1 is the base object from which this method was called and line3 is the object passed as a parameter. If the ExtendOption passed is acExtendThisEntity, point A is returned as the point where line1 would intersect line3 if line1 were extended. If the ExtendOption is acExtendOtherEntity, no data is returned because even if line3 were extended, it would not intersect line1.
If the intersection type is acExtendBothEntities and line2 is passed as the parameter entity, point B is returned. If the ExtendOption is acExtendNone and line2 is the parameter entity, no data is returned.
More information:
http://www.progecad.us/index.pl?iid=21577
http://forums.autodesk.com/t5/Visual-Basic-Customization/intersectwith/td-p/1343013
- 1
-
Tôi thấy phần dữ liệu nên gom lại để trong 1 file riêng, có thể ở dạng text or dạng binary theo định dạng riêng của mình.
Như thế chương trình tránh được sự lệ thuộc quá nhiều vào các chương trình ngoài. Nó sẽ linh hoạt hơn, vì trong trường hợp chương trình ngoài có lỗi mà ta không kiểm soát được thì chương trình của ta sẽ đứng mà đợi...
Hầu như các chương trình lớn đều có dữ liệu theo định dạng riêng của mình, sau đó có thêm tool để chỉnh sửa dữ liệu đó.
Còn phần chương trình thì tùy theo sở trường mà làm thôi.
- 2
-
Chuyển dữ liệu dạng bảng thì dùng ABBYY or OmniPage để convert từ ảnh thành text.
Cái này mà dùng Lisp viết liệu có ổn về giao diện không nhỉ?
- 1
-
Nếu tạo trong ModelSPace thì như sau:
Dim count as integer
count = ThisDrawing.ModelSpace.Items.Count
Dim LastObj as Entity
Set LastObj = ThisDrawing.ModelSpace.Items(count-1)
- 1
-
Đề bài quá rõ rồi, quay quanh 1 trục là quay 3D.
Chiều quay theo quy tắc bàn tay phải thôi, âm thì ngược lại.
- 1
-
Giới thiệu các bạn phần tạo thép mẫu tùy biến cho chương trình vẽ và thống kê thépi:
-
@ketxu:
Cắt thanh thì giải vẫn không khó, vì đó coi như là bài toán 1 chiều, còn kiểu diện tích này thì đúng là bó tay.
-
Có tùy biến khổ tôn được mà, nó nằm trong file text nhập bằng tay.
-
Đây là bài toán tối ưu hóa (2 chiều) nên cực khó, cho dù có viết bằng ngôn ngữ nào.
Có thể sử dụng thư viện Solver của Microsoft để tính, nhưng chả dễ dàng tí nào.
Nếu toàn là hình chữ nhật thì dùng chương trình này, việc nhập liệu thông qua textfile hơi mất công.
Nếu hên thì có thể tìm thấy source code bằng Delphi đó:
-
Bài này kiểu như lý thuyết đồ thị và tìm đường đi ngắn nhất, khi mô hình hóa các line thành một cây, ta có thể tìm đường đi từ node này đến node khác.
Trước đây tôi toàn dùng kiểu con trỏ, rất dễ làm, mà giờ nếu sử dụng họ Visual basic thì phải triển khai dữ liệu kiểu khác.
-
Phần này không quá khó.
Tớ có thể hướng dẫn, tuy nhiên câu hỏi của tớ không được trả lời.
-
Cái polyline của bạn có cung hay không, vì có cung sẽ vất hơn.
-
7GB nhỏ xíu xiu, chỉ cần up lên site trong nước nếu muốn chia sẻ, còn không thì tớ chẳng thèm.
-
Món này trông hay quá, mình chưa thử bao giờ.
Đặt khóa chỉ phòng người ngay thôi.... chức năng này khá là hữu dụng trong nhiều trường hợp đấy chứ.
-
Đã cập nhật mới link tải về, nhớ đừng hỏi link ở đâu nhé. :)
- Sẵn bonus thêm một User Control - NumericAcad giúp lấy số thực từ Acad.
Em này kế thừa từ Control NumericUpDown, nên thừa hưởng tất cả các thuộc tính và thành phần của cha nó.
Ngoài ra còn đo khoảng cách hoặc lấy chiều dài Arc, Circle, Line, Polyline, số trong Text và Mtext, kích thước/nội dung của Dimesion đưa vào điều kiểm này.
-
Hi AnhCos! Mình đang dùng tool của bạn cho ứng dụng của mình. Nói chung là ổn và tuyệt. Mình xin góp ý bạn có thể add thêm array đối tượng nữa là tuyệt. Cảm ơn share của bạn.Đã thêm lệnh tạo đối tượng mảng cho đối tượng: ArrayPolar và ArrayRectangle.
Cách sử dụng:
'Tạo đối tượng mà không thêm vào khung thể hiện
dim ent as TEntityData = CreateCircle(0,0,1)
+ Entity.ArayPolar(NumberOfObjects, AngleToFill, CenterPoint)
'array thành 16 đối tượng, góc quay tổng 3*pi/2, tâm quay (12,8)
dim ents() as TEntityData = ent.ArrayPolar(16 , 3*pi/2, 12, 8)
'thêm vào khung thể hiện
Add(ents)
hoặc viết tắt:
Add(ent.ArrayPolar(16 , 3*pi/2, 12, 8))
+ Entity.ArrayRectangular (NumberOfRows, NumberOfColumns, DistBetweenRows, DistBetweenColumns)
'array 2 chiều, 4 hàng, 5 cột ...
Add(ent.ArrayRecTangle(4,5,1.3,2.85))
- 1
-
Tình hình là em đang có nhu cầu vẽ các đường ống hơi-khí nén trong nhà máy.Dạng 3D giả, coi thì thấy 3D thôi, chứ ko có xoay vòng vòng được.
Em cũng còn non kinh nghiệm, được các anh trong cty cho cái bản vẽ như File đính kèm, nhưng ko có chỉ cách vẽ.Em vẽ từng nét từng nét thì mệt quá.KO biết có phải đó là do vẽ bằng phần mềm khác rồi chuyển qua hay ko.Có anh nào biết vẽ giống bản vẽ này, chỉ cho em với nha.Em cám ơn rất nhiều
Tìm chương trình Autodesk Plant Design Suite mà xài.
3D thực, có giải quyết đụng chạm và tìm đường đi hợp lý từ sơ đồ nguyên lý.
Vẽ xong có thể sửa, có thể "đi bộ" qua hệ thống.
Xem thêm:
- 2
-
Gởi thêm cái hình chương trình cho sinh động, có chế độ xem trước kết quả trước khi kết xuất qua AutoCAD.
-
.Chương trình này trước đây tôi đã làm cho một công ty, có các chức năng chính:
- Chèn tự động, tự tìm và xóa, kiểm tra COG, PROP (FF, NF), LIFTER ... trên sub-drawing và cả trên elevation drawing.
- Tách evelavtion drawing thành các sub-drawing
- Cập nhật thông số gross area, net area, volume, mass, perimeter bar, main reinforcement, grade 28day, elevation number, view looking, cog x, cog y cho sub-drawing và elevation-drawing.
Trong trường hợp chọn nhiều panel khác nhau, các panel chính và các penetrate của nó sẽ được xác định tự động. Các LIFTER cũng tương tự, sẽ tự tính số lượng và nơi cần đặt.
-
Hướng dẫn sử dụng tập chọn đối tượng có trong thư viện:
Tập chọn đối tượng của acad rất mạnh và dễ tùy biến, tuy nhiên việc triển khai hơi mất công sức một chút.
Vì thế rút gọn được phần này sẽ đỡ mất thời gian hơn.
Trong thư viện sử dụng lớp TFilterSet để chọn đối tượng trong acad.
* Cách khai báo:
- TFilterSet(mảng_tên_các_đối_tượng() as string) 'không quan tâm đến tên của tập chọn
- hoặc TFilterSet(Tên_tập chọn as string, mô_tả as string, mảng_tên_các_đối_tượng() as string)
VD:
- Tạo tập chọn Line và Text
Dim fs as New TFilterSet(new string(){"Line","Text"})
- Tạo tập chọn MText và Block có tên là "tập chọn a"
Dim fs as New TFilterSet("tap chon a", "tap chon vd", new string(){"Insert", "Mtext"})
* Để kết hợp dùng thêm Layer khi chọn, sử dụng hàm SetFilter(layers() as tring) như sau:
Dim fs as New TFilterSet(new string(){"Line","Text"})
fs.SetFilter(new string(){"0","Center"})
Sẽ chọn Line và Text nằm trong layer "0" và "Center"
*Để kết hợp với TextStyle, sử dụng hàm SetFilter(layers() as tring, textstyles() as string) như sau:
Dim fs as New TFilterSet(new string(){"Line","Text"})
fs.SetFilter(new string(){"0","Center"}, new string(){"UNI"})[/code]
Sẽ chọn Line và Text nằm trong layer "0" và "Center", Text phải thuộc textstyle có tên là UNI
* Để chọn theo tên Block, dùng hàm SetBlock(blocks() as string)
Dim fs as New TFilterSet(new string(){"Line","INSERT","Text"}) fs.SetFilter(new string(){"0","Center"}, new string(){"UNI"}) fs.SetBlock(new string(){"Abc","Def","GGH"})
Sẽ chọn Line, Text, BlockRef trong layer 0 và Center, texstyle UNI, block có tên "Abc" or "Def" or"GGH".
* Chọn đối tượng
Gọi hàm SelectOnScreen(Dwg as Object, SelectionSet as Object, Optional Clear as Boolean = True) hoặc
SelectAll(Dwg as Object, SelectionSet as Object, Optional Clear as Boolean = True)
Trong đó:
Hàm sẽ trả về True nếu có đối tượng được chọn
- Dwg là biến đại diện cho bản vẽ
- SelectionSet là biến đại diện cho tập chọn sẽ được tạo ra trong bản vẽ
- Clear: xóa tập chọn trước khi bắt đầu chọn mới
VD:
if Acad_link() then ...Dim selset as Object ...Dim fs as New TFilterSet(new string(){"Line","Text"}) ...if fs.SelectOnScreen(acad.ActiveDocument, selset) then ......'neu co doi tuong duoc chon ......'xu ly no.... ......Dim i% ......for i=0 to selset.Count -1 ......next i ...end if end if
hoặc đơn giản hơn có thể dùng bằng như sau:
if Acad_link() then ...Dim selset as Object ...If New TFilterSet(New String() {"Line","Text"}).SelectOnScreen(Acad.ActiveDocument, SelSet) Then ......Dim i% ......for i=0 to selset.Count -1 ......next i ...End If End if
Lưu ý:
Tập chọn chỉ dùng theo các tên thực thể, layer, textstyle, block name, các kiểu lọc theo các tính chất khác chưa có trong phiên bản này, VD như lọc theo màu, dimstyle ... hoặc áp dụng lọc tùy chọn của người dùng
- 4
-
Dùng liên kết muộn, hễ chỗ nào dùng mảng các thực thể là nó báo lỗi "Invalid object array", hiện tại tôi chưa tìm ra cách.
[Hỏi] Code VBA lấy Entity name đối tượng
trong Lập trình khác
Đã đăng · Trả lời báo cáo
Handle là thuộc tính bắt buộc phải có.
dim hwnd as string
hwnd = object.Handle
object là đối tượngsau:
All Drawing objects, Block, Blocks, Dictionary, Dictionaries, DimStyle, DimStyles, Group, Groups, Layer, Layers, Layout, Layouts, Linetype, Linetypes, ModelSpace Collection, PaperSpace Collection, PlotConfiguration, PlotConfigurations, RegisteredApplication, RegisteredApplications, TextStyle, TextStyles, UCS, UCSs, View, Views, Viewport, Viewports, XRecord