Đến nội dung


Hình ảnh
- - - - -

XÂM NHẬP KHO CƠ SỞ DỮ LIỆU CỦA AUTOCAD!


  • Please log in to reply
7 replies to this topic

#1 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 05 November 2007 - 07:34 AM

Tiêu đề hơi “giật gân” nhưng không có gì ghê gớm. Còn thú vị hay không là tùy mỗi người…

http://www.cadviet.com/upfiles/Entity.zip
  • 0

#2 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 10 November 2007 - 09:22 AM

Tiêu đề hơi “giật gân” nhưng không có gì ghê gớm. Còn thú vị hay không là tùy mỗi người…

http://www.cadviet.com/upfiles/Entity.zip



Bác này viết được đấy. Tòan là những cái biết rồi mà đọc vẫn thấy hay....
Hehehehe. Nói thật chứ không phải lấy lòng đâu. Nhưng mà dạo này có cảm giác hình như trên diễn đàn vì có vài người nhiệt tình quá nên có nhiều người đâm ra ỷ lại, tòan những thông tin có rồi nhưng mà chẳng chịu search, chẳng chịu research gì cả...
  • 0

#3 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 12 November 2007 - 09:32 AM

Bác này viết được đấy. Tòan là những cái biết rồi mà đọc vẫn thấy hay....
Hehehehe. Nói thật chứ không phải lấy lòng đâu...

Cám ơn lời khen của bạn. Anh em trong cơ quan vẫn nói ssg có năng khiếu... sư phạm!
Mình viết bài này là có ý khơi mào để anh em lisp cùng "ngâm cứu" sâu hơn và chia sẻ cho nhau những cái phát hiện được trong kho database của Acad.
Mới có 1 chiêu học lỏm được của thiên hạ:

http://www.cadtutor.net/forum/showthread.p...ed=1#post110882

Thêm DXF 70 nữa là hoàn chỉnh. Nhưng mình chưa hiểu lắm về:
- AcDbSymbolTableRecord
- AcDbLayerTableRecord

CadViet chúng ta có pro nào giải thích cặn kẽ được không? Hay là lại phải post bài để ông bạn VovKa giải thích tiếp? Hỏi tiếp chắc chắn sẽ có câu trả lời, nhưng mình không thích lắm vì 2 lý do:
- Vốn liếng English cũng có hạn, post bài để người ta hiểu đúng ý mình mất thời gian hơn là dùng Vietnamese!
- Vì một chút sĩ diện và "tự ái dân tộc", chỉ hỏi khi thấy thật sự cần thiết
  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 12 November 2007 - 03:12 PM

Cám ơn lời khen của bạn. Anh em trong cơ quan vẫn nói ssg có năng khiếu... sư phạm!
Mình viết bài này là có ý khơi mào để anh em lisp cùng "ngâm cứu" sâu hơn và chia sẻ cho nhau những cái phát hiện được trong kho database của Acad.
Mới có 1 chiêu học lỏm được của thiên hạ:

http://www.cadtutor.net/forum/showthread.p...ed=1#post110882

Thêm DXF 70 nữa là hoàn chỉnh. Nhưng mình chưa hiểu lắm về:
- AcDbSymbolTableRecord
- AcDbLayerTableRecord

CadViet chúng ta có pro nào giải thích cặn kẽ được không? Hay là lại phải post bài để ông bạn VovKa giải thích tiếp? Hỏi tiếp chắc chắn sẽ có câu trả lời, nhưng mình không thích lắm vì 2 lý do:
- Vốn liếng English cũng có hạn, post bài để người ta hiểu đúng ý mình mất thời gian hơn là dùng Vietnamese!
- Vì một chút sĩ diện và "tự ái dân tộc", chỉ hỏi khi thấy thật sự cần thiết

Cái này thì về lý thuyết không có gì khó, mỗi thực hành là khó thôi.

* Về DXF 70 chưa rõ ssg hỏi về cái gì?
Nếu là của Table Layer thì nó là Standard flags, nói về trạng thái của Layer. Đây là đoạn copy từ help ra.
1 = Layer is frozen; otherwise layer is thawed
2 = Layer is frozen by default in new viewports
4 = Layer is locked
...
Vậy nên muốn tạo 1 layer vừa frozen vừa locked chúng ta cho giá trị DXF 70 bằng (1 OR 4) = 5, lệnh lisp là (logior 1 4) nếu nhanh thì dùng (+ 1 4) cũng được vì or là phép cộng không nhớ.

* về AcDbSymbolTableRecord và AcDbLayerTableRecord thì không có gì khó hiểu. Nếu ssg dùng entget để lấy thông tin của 1 đối tượng layer, ssg sẽ rõ điều này:
(entget (tblobjname "layer" "0")). nó cũng như DXF 100 AcDbEntity, AcDbLine, AcDbArc, AcDbCircle,... về của các đối tượng line, arc, circle,... thôi mà, là một dữ liệu riêng mà AutoCAD tự thêm vào. Trong hàm entmake không cần phải có (tuy nhiên không hiểu sao bên cadtutor.net người ta vẫn cho vào).

Như ban đầu đã nói, chỉ khó khi thực hành. Đến bây giờ, tôi vẫn không hiểu vì sao với các mã thâm nhập vào hệ thống table của AutoCAD. Cùng một mã nguồn nhưng lúc thì chạy được lúc thì không chạy được.
Kể cả với hàm entmake để tạo layer như vấn đề của Ssg.
  • 0

#5 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 12 November 2007 - 05:31 PM

* về AcDbSymbolTableRecord và AcDbLayerTableRecord thì không có gì khó hiểu. Nếu ssg dùng entget để lấy thông tin của 1 đối tượng layer, ssg sẽ rõ điều này:
(entget (tblobjname "layer" "0")). nó cũng như DXF 100 AcDbEntity, AcDbLine, AcDbArc, AcDbCircle,... về của các đối tượng line, arc, circle,... thôi mà, là một dữ liệu riêng mà AutoCAD tự thêm vào. Trong hàm entmake không cần phải có (tuy nhiên không hiểu sao bên cadtutor.net người ta vẫn cho vào).

Như ban đầu đã nói, chỉ khó khi thực hành. Đến bây giờ, tôi vẫn không hiểu vì sao với các mã thâm nhập vào hệ thống table của AutoCAD. Cùng một mã nguồn nhưng lúc thì chạy được lúc thì không chạy được.
Kể cả với hàm entmake để tạo layer như vấn đề của Ssg.

Ssg không hỏi về code 70, cái đó mình biết rồi. Vấn đề là thế này:

- Với các đối tượng line, circle, arc... mình không cần code 100. Ví dụ:
(entmake (list (cons 0 "line") (cons 10 '(100 100)) (cons 11 '(150 200)))) là có ngay line

- Nhưng với layer thì phải đầy đủ. Ví dụ:
(entmake (list (cons 0 "LAYER")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbLayerTableRecord")

(cons 2 "MyLayer")
(cons 70 0)
(cons 6 "continuous")
(cons 62 1)
)
)

Có thể bỏ code 6 và 62, khi đó Acad sẽ lấy mặc định là "continuous" và "white". Nhưng không thể bỏ được code 100, 100, 2, 70 (thiếu 1 trong 4 "chú" trên sẽ không tạo được layer). Anh Hoành kiểm tra lại xem có phải vậy không?
Còn về việc lúc được lúc không đối với hệ thống table thì mình chưa gặp. Nếu đúng vậy thì chương trình mình viết ra làm sao tin cậy được?!
Tóm lại là: tại sao đối với layer phải cần đến các dòng tô màu đỏ ở trên, còn line, arc, circle... thì không cần?
  • 0

#6 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 12 November 2007 - 05:42 PM

Ssg không hỏi về code 70, cái đó mình biết rồi. Vấn đề là thế này:

- Với các đối tượng line, circle, arc... mình không cần code 100. Ví dụ:
(entmake (list (cons 0 "line") (cons 10 '(100 100)) (cons 11 '(150 200)))) là có ngay line

- Nhưng với layer thì phải đầy đủ. Ví dụ:
(entmake (list (cons 0 "LAYER")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbLayerTableRecord")

(cons 2 "MyLayer")
(cons 70 0)
(cons 6 "continuous")
(cons 62 1)
)
)

Có thể bỏ code 6 và 62, khi đó Acad sẽ lấy mặc định là "continuous" và "white". Nhưng không thể bỏ được code 100, 100, 2, 70 (thiếu 1 trong 4 "chú" trên sẽ không tạo được layer). Anh Hoành kiểm tra lại xem có phải vậy không?
Còn về việc lúc được lúc không đối với hệ thống table thì mình chưa gặp. Nếu đúng vậy thì chương trình mình viết ra làm sao tin cậy được?!
Tóm lại là: tại sao đối với layer phải cần đến các dòng tô màu đỏ ở trên, còn line, arc, circle... thì không cần?

Đúng vậy, bây giờ tôi mới để ý về DXF 100.
Bởi có lúc thiếu DXF 100 vẫn entmake được các đối tượng Table (LAYER, STYLE, DIMSTYLE, BLOCK, ...).
:bigsmile:
Bây giờ mới phần nào biết được tại sao lúc trước entmake khi được khi không, mình đã ngộ nhận DXF 100 sẽ được tự động thêm vào.
  • 0

#7 elleHCSC

elleHCSC

    biết lệnh copy

  • Members
  • PipPipPip
  • 119 Bài viết
Điểm đánh giá: 98 (tàm tạm)

Đã gửi 07 December 2007 - 12:00 AM

- Với các đối tượng line, circle, arc... mình không cần code 100. Ví dụ:
(entmake (list (cons 0 "line") (cons 10 '(100 100)) (cons 11 '(150 200)))) là có ngay line


For entity types introduced in AutoCAD Release 13 and later releases, you must also specify subclass markers (DXF group code 100) when creating the entity. All AutoCAD entities have the AcDbEntity subclass marker, and this must be explicitly included in the entmake list. In addition, one or more subclass marker entries are required to identify the specific sub-entity type. These entries must follow group code 0 and must precede group codes that are specifically used to define entity properties in the entmake list. For example, the following is the minimum code required to entmake an MTEXT entity:


(entmake '(
(0 . "MTEXT") ; Object type.
(100 . "AcDbEntity") ; Required for all post-R12 entities.
(8 . "ALAYER") ; Layer name.
(100 . "AcDbMText") ; Identifies the entity as MTEXT.
(10 4.0 4.0 0.0)
(1 . "Some\\Ptext")
)
)
The following table identifies the entities that do not require subentity marker entries in the list passed to entmake: DXF names of entities introduced prior to AutoCAD Release 13

3DFACE
ARC

ATTDEF
ATTRIB

CIRCLE
DIMENSION

INSERT
LINE

POINT
POLYLINE (old-style)

SEQEND
SHAPE

SOLID
TEXT

TRACE
VERTEX

VIEWPORT


- Nhưng với layer thì phải đầy đủ. Ví dụ:
(entmake (list (cons 0 "LAYER")
(cons 100 "AcDbSymbolTableRecord")
(cons 100 "AcDbLayerTableRecord")

(cons 2 "MyLayer")
(cons 70 0)
(cons 6 "continuous")
(cons 62 1)
)
)


2 cái dòng đỏ đỏ đó của bác là "subclass marker" mà (vì bác tạo mới Layer) còn như VD MTEXT ở trên thì ko phải tạo Layer mà tạo Mtext thì bỏ 2 cái dòng đó cho dòng (100 . "AcDbMText") vào đó thôi.




Có thể bỏ code 6 và 62, khi đó Acad sẽ lấy mặc định là "continuous" và "white". Nhưng không thể bỏ được code 100, 100, 2, 70 (thiếu 1 trong 4 "chú" trên sẽ không tạo được layer).


Đúng không thể bỏ được 100, 100, 2, 70

(entmake (list
(cons 0 "LAYER") - Object type (Table)
(cons 100 "AcDbSymbolTableRecord") - Subclass marker
(cons 100 "AcDbLayerTableRecord") - Subclass marker
(cons 2 "MyLayer") - Table Name
(cons 70 0) - Maximum number of entries in table
)
)

Thằng Khoai Tây nó bắt mấy củ khoai lang nhà ta phải lam theo nó mừ. :) Hi vọng bạn hiểu ý của tôi vì thực tình tôi hay phải làm với DXF file và group code hơn làm lisp (ko biết nhìu). Có thể bạn chưa đọc kỹ reference của thằng DXF thôi. Đây là cấu trúc của file DXF (tôi nghĩ file DWG cũng vậy nhưng nó là dạng nhị phân :) )


The overall organization of a DXF file is as follows:

HEADER section. Contains general information about the drawing. It consists of an AutoCAD database version number and a number of system variables. Each parameter contains a variable name and its associated value.

CLASSES section. Holds the information for application-defined classes, whose instances appear in the BLOCKS, ENTITIES, and OBJECTS sections of the database. A class definition is permanently fixed in class hierarchy.

TABLES section. Contains definitions for the following symbol tables:
APPID (application identification table)

BLOCK_RECORD (block reference table)

DIMSTYLE (dimension style table)

LAYER (layer table)

LTYPE (linetype table)

STYLE (text style table)

UCS (user coordinate system table)

VIEW (view table)

VPORT (viewport configuration table)

BLOCKS section. Contains block definition and drawing entities that make up each block reference in the drawing.

ENTITIES section. Contains the graphical objects (entities) in the drawing, including block references (insert entities).

OBJECTS section. Contains the nongraphical objects in the drawing. All objects that are not entities or symbol table records or symbol tables are stored in this section. Examples of entries in the OBJECTS section are dictionaries that contain mline styles and groups.

THUMBNAILIMAGE section. Contains the preview image data for the drawing. This section is optional.

Chúc vui vẻ !
  • 0
Share for all, all will share !

--------------------
HTTP://WWW.HCSC.VN
HTTP://WWW.HCSC.COM.VN

#8 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 07 December 2007 - 08:27 AM

For entity types introduced in AutoCAD Release 13 and later releases, you must also specify subclass markers (DXF group code 100) when creating the entity. All AutoCAD entities have the AcDbEntity subclass marker, and this must be explicitly included in the entmake list.

Thằng Khoai Tây nó bắt mấy củ khoai lang nhà ta phải lam theo nó mừ. :) Hi vọng bạn hiểu ý của tôi vì thực tình tôi hay phải làm với DXF file và group code hơn làm lisp (ko biết nhìu). Có thể bạn chưa đọc kỹ reference của thằng DXF thôi. Đây là cấu trúc của file DXF (tôi nghĩ file DWG cũng vậy nhưng nó là dạng nhị phân :) )

Khà khà, sự so sánh rất ấn tượng! Củ khoai lang buộc phải theo củ khoai tây vì củ khoai lang gần gũi với... củ chuối hơn!
Cám ơn bạn, mình đã hiểu thêm đôi chút. Nếu Autodesk một mình một cõi thì củ khoai tây nó cũng chẳng bày vẽ lắm chuyện lôi thôi để cho củ khoai lang phải đau đầu! Nhưng vì có những "củ" khác, thuộc nhiều thành phần năm cha bảy mẹ, lại ưa moi móc thông tin từ DXF nên nó phải bày ra để phân biệt cho rõ ràng!

All class filer members are expected to precede their class-specific portion of instance data with a "subclass" marker—a 100 group code followed by a string with the actual name of the class. This does not affect the state needed to define the object's state, but it provides a means for the DXF file parsers to direct the group codes to the corresponding application software.
  • 0