Đến nội dung


Hình ảnh
- - - - -

Một số hàm con VL- hữu ích


  • Please log in to reply
17 replies to this topic

#1 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 05 May 2009 - 02:55 PM

Một số hàm con VL- hữu ích . Share cùng mọi người

VxAlignAtts
Rotates all attributes of a block to n°

VxGetAtts
Reads all attribute values from a block

VxSetAtts
Sets attribute values to block

VxGetOpenDwgs
Returns a list of all open drawings including path

VxGetTextStyles
Returns a list of all text style names and her font files

VxGetLineTypes
Returns a list of all line types and her descriptions

VxGetDimStyles
Returns a list of all dimension style names

VxGetXplotLayers
Returns a list of all plot or non plot Layers

VxGetLockLayers
Returns a list of all locked Layers

VxIsOnLockedLay
Check an object for locked Layer

VxGetLayoutNames
Returns a list of all Layout names

VxGetVptBoundary
Returns the lower left and upper right corner of a v'port in modelspace coordinates

VxGetLoadedMenus
Returns a list of all loaded Menu files and Groups

VxUnLoadMenuGroup
Unloads the specified Menu Group

VxGetPopups
Returns a list with all Menu groups, PopupID's and their IsVisible property

VxGetToolbars
Returns a list with all Menu groups, ToolbarID's and their IsContext property

VxXetDispCmdLines
Sets or gets the number of command lines

VxXetDispHistLines
Sets or gets the number of history lines in the text window

VxGetLoadedVbaProjs
Returns a list of all loaded VBA-Project names

VxGetDispBackCol
Returns the ACI-ColorNº of the actual graphics background color

VxOleToAciCol
Converts a OLE- to a ACI-Color number

VxGetTrueCol
Returns a TrueColor list from an object

VxSetTrueCol
Applies a TrueColor list to an object

VxDeleteGroup
Deletes a Group by name

VxGetGroupNames
Returns a list of all Group name(s) of the object

VxGetAcadLicenseInfos
Returns the license information's of the current AutoCAD version

VxGetAcadLanguage
Returns the *program* language of the current AutoCAD version

VxScrollDocs
Scrolls the open docs in alphabetic order up or down

VxGetMassProps
Returns a list of all mass properties of the object

VxGetInters
Returns all intersection points between two objects

VxGetBlockInters
Returns all intersection points between a block and an object

VxCloneBlockRef
Clones the specified block reference to a new name

VxExplode
Explodes complex objects

VxGetTangentAtPoint
Returns the tangent at the specified point

VxGetEndPoints
Returns the endpoints of an object

VxRevPline
Reverse vertex order of Polylines

VxGetObjLength
Returns the length of all kinds of objects

VxSetDrawOrder
Changes draw order of object(s) by given method

VxSsetSelect
ActiveX counterpart to 'ssget'

VxSsetMake
Creates a new selection set or clears an existing one

VxSsetFilter
Creates a filter for SelectXxx methods

VxListToArray
Converts a list into an array

VxArrayToList
Converts an array into a list

VxStringSubst
Substitutes one string for another, within a string

VxGetDriveInfos
Returns information's from a drive

VxGetFileInfos
Returns information's from a file

VxCopyFiles
Copies the specified file(s)

VxDeleteFiles
Deletes the specified file(s)

VxMakeDirectory
Creates the specified directory(ies)

VxDelDirectory
Deletes the specified directory

VxListNetworkDrives
Returns a list of all mapped network drives with UNC paths

VxRemapNetworkDrive
Remaps a network drive to another drive letter

VxCreateShortCut
Creates a shortcut to AutoCAD with the appropriate param's on the desktop

VxGetShortCutTargPaths
Returns all shortcut target paths according to the arguments

VxGetShortName
Returns the short path/name used by programs that require the earlier 8.3...

  • 12

#2 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 05 May 2009 - 08:03 PM

Một số hàm con VL- hữu ích . Share cùng mọi người


Thanks nataca!! mình đang học hỏi về các hàm vla, vlax nên những hàm của bạn sưu tầm rất có ích. Cám ơn nhiều. Chúc bạn thành công.
  • 2

#3 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 May 2009 - 10:55 AM

Một số hàm con VL- hữu ích . Share cùng mọi người

Cám ơn Nataca rất nhiều, các hàm VL rất hay và rất bổ ích.
Nhân đây cho Tue_NV hỏi tí :
Mình chưa hiểu về Vla-object. Bạn và mọi người có thể giải thích cho mình một chút về loại đối tượng này không?
Thanks
  • 1

#4 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 06 May 2009 - 11:29 AM

Cám ơn Nataca rất nhiều, các hàm VL rất hay và rất bổ ích.
Nhân đây cho Tue_NV hỏi tí :
Mình chưa hiểu về Vla-object. Bạn và mọi người có thể giải thích cho mình một chút về loại đối tượng này không?
Thanks

Chào Tue_NV.
Cách chuyển đối tượng CAD sang kiểu Vla-object : dùng hàm (vlax-ename->vla-object CADEnt)
ví dụ :
(repeat (sslength ss)
(setq ent (vlax-ename->vla-object (ssname ss i) ))
.................
)
dòng này chắc bạn quá quen rồi
(repeat (sslength ss)
(setq ent (ssname ss i))
..............
)
  • 2

#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 May 2009 - 11:42 AM

Chào Tue_NV.
Cách chuyển đối tượng CAD sang kiểu Vla-object : dùng hàm (vlax-ename->vla-object CADEnt)
ví dụ :
(repeat (sslength ss)
(setq ent (vlax-ename->vla-object (ssname ss i) ))
.................
)
dòng này chắc bạn quá quen rồi
(repeat (sslength ss)
(setq ent (ssname ss i))
..............
)

Chào bạn Nataca
Chào anh giabach

Vấn đề trên thì Tue_NV đã hiểu. Nhưng phải có mục đích gì đó thì người ta mới chuyển đối tượng CAD sang kiểu Vla-object . Cho Tue_NV hỏi thêm một chút là mục đích khi chuyển đối tượng CAD sang kiểu Vla-object để làm gì vậy?
Cám ơn bạn Nataca, gia bách thật nhiều
  • 0

#6 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 06 May 2009 - 12:17 PM

Cám ơn Nataca rất nhiều, các hàm VL rất hay và rất bổ ích.
Nhân đây cho Tue_NV hỏi tí :
Mình chưa hiểu về Vla-object. Bạn và mọi người có thể giải thích cho mình một chút về loại đối tượng này không?
Thanks

Theo em hiểu thì Vla là Visual lisp activeX. Từ phiên bản cad14 trở về trước thì chỉ có ngôn ngữ Autolisp tích hợp trong cad. Cụ tổ của ngôn ngữ Visual lisp là Vital lisp. Autodesk đã mua lại bản quyền và biến Vital lisp thành visual lisp và tích hợp trong các phiên bản Cad từ 200 trở về sau. Trong quá trình tích hợp để thành 1 phần của Autocad thì Vital lisp đã có sự biến đổi đôi chút, tuy nhiên về cơ bản thì không thay đổi nhiều. Mặc dù có sự xuất hiện của ngôn ngữ visual lisp nhưng Autolisp không hề bị vứt bỏ đi mà 2 ngôn ngữ này được kết hợp với nhau cùng hỗ trợ cho Autocad. Ename là đối tượng cơ bản của Autolisp, và Object là đối tượng cơ bản của Visual lisp. Chính vì thế khi anh chuyển ename ->object thì tức là anh đã đổi dạng đối tượng để dùng được ngôn ngữ Visual lisp. Nó chỉ là cách đặt tên khác nhau của 1 đối tượng. Đối tượng đó không hề thay đổi (kể cả VBA, C++ cũng thế). Vậy tại sao ta vẫn dùng 2 ngôn ngữ Autolisp và Visual lisp trong 1 bài toán? Vì mỗi cái có 1 thế mạnh riêng, ta kết hợp cả 2 ngôn ngữ này sẽ giúp giải bài toán một cách nhanh và ngắn gọn nhất. Ví dụ việc chọn đối tượng trong Autolisp rất đơn giản nhưng trong Visual lisp khá phức tạp và khó khăn, trong khi việc lấy layer của 1 đối tượng chẳng hạn, thì Visual lisp lấy rất đơn giản, trực quan (vla-get-layer obj) không phải nhớ những dãy DXF lằng nhằng như thằng Autolisp. Chưa nói đến việc áp dụng công nghệ ActiveX làm cho Visual lisp được mở rộng rất nhiều cách giải một bài toán (gần như chẳng thua gì thằng VBA), thư viện hàm được mở rộng rất nhiều.
Đấy là những gì em hiểu được qua quá trình mày mò tự đọc sách. Có gì hiểu chưa đúng mong các anh chỉ bảo :(
  • 3

#7 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 06 May 2009 - 04:08 PM

Theo em hiểu thì Vla là Visual lisp activeX.


Mình xin góp ý thêm:
Vì vba là ngôn ngữ hướng đối tượng khác với vlisp nên autocad mới bày thêm cái vla và vlax để bổ sung cho autolisp.
Cho nên sau tên hàm bạn sẽ đều thấy có tên đối tượng, thí dụ (vla-get-Linetype obj) chẳng hạn.

Mỗi đối tượng đều có các method và property riêng.
Muốn dùng method thì ghép vla- , chẳng hạn vla-IntersectWith
Muốn dùng lấy thông tin property của obj thì ghép vla-get- , chẳng hạn vla-get-Linetype
Muốn thay đổi thông tin property của obj thì ghép vla-put- , chẳng hạn vla-put-Linetype

Ở điểm này thì nó đơn giản hơn autolisp.
Bạn có thể coi thêm ở file acad_dev.chm->Activex and VBA reference->Object để biết các method và property.
  • 2

#8 Tri

Tri

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 24 (tàm tạm)

Đã gửi 30 June 2009 - 11:50 AM

Một số hàm con VL- hữu ích . Share cùng mọi người

Cảm ơn bác Nataca.

Nhân tiện đây cho em hỏi về các hàm vla. Sao em đọc trong cuốn Developer Documentation sao không thấy các hàm vla
chỉ thấy các hàm của Lisp, các hàm vl; vlax nhưng chẳng thấy các hàm vla đâu
Em muốn học về các hàm vla lắm. Mong các anh, các bác chỉ giúp em phải đọc các hàm vla ở đâu?

Em xin cảm ơn
  • 0

#9 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 30 June 2009 - 05:58 PM

Cảm ơn bác Nataca.

Nhân tiện đây cho em hỏi về các hàm vla. Sao em đọc trong cuốn Developer Documentation sao không thấy các hàm vla
chỉ thấy các hàm của Lisp, các hàm vl; vlax nhưng chẳng thấy các hàm vla đâu
Em muốn học về các hàm vla lắm. Mong các anh, các bác chỉ giúp em phải đọc các hàm vla ở đâu?

Em xin cảm ơn


Nó nằm trong phần VBA đó, bạn mở file acad_dev.chm trong thư mục help, phần
ActiveX and VBA reference->code examples có các ví dụ.

VBA và VLA dùng chung hàm với nhau (cùng tên hàm), chỉ khác cách viết thôi,
bạn phải "dịch" từ VBA sang VLA.
Td:
VBA có ThisDrawing.Application.ZoomAll thì bạn hiểu là dùng cái method ZoomAll của đối tượng Application.

Bạn viết lại như sau
(vla-ZoomAll (vlax-get-acad-object))
ở đây (vlax-get-acad-object) <=> ThisDrawing.Application

Khi là method thì bạn thêm vla-
Khi là properties thì bạn thêm vla-get- (để lấy property) hoặc vla-put- (để thay đổi property).
  • 3

#10 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 26 September 2014 - 05:11 PM

Là học viên lớp học Autolisp Online, là thành viên "trung thành" của Cadviet cũng đc mấy năm_ nay mình đã biết đc đôi chút về lisp

Những lúc rảnh mình thường "đào bới" mò mẫm hòng kiếm đc vài củ lisp trang bị cho công việc & hy vọng đc cống hiến nhiều hơn cho CV !

 

Ngặt nỗi cứ động đến củ nào có hàm vla, vl ... là mình đuối, nay mò đến đây, mình muốn đặt vấn đề muốn đc các tiền nhân hãy mổ xẻ dần dần về chủ đề các hàm này. Có thể là "Mỗi ngày 1 hàm vla (vlax)" chẳng hạn !

 

Mong đc các cao nhân đi ngang qua để lại "bút tích" !!! _ Cảm ơn !


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#11 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 26 September 2014 - 06:18 PM

anh Tot77 đâu nhỉ, thấy a  ấy hay xài mấy thằng vl, mong đc a ghé qua chia sẽ cho đàn e chúng e đc học tập ^^


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#12 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 26 September 2014 - 07:40 PM

Tôi đâu biết cái nào bạn biết rồi, cái nào bạn chưa biết. Nhỡ nhè cái bạn biết rồi mà nói thì đâm ra thừa. 

Tuy nhiên thấy các bạn nhiệt tình nên cũng giới thiệu cho bạn cái hàm vlax-curve-getClosestPointTo mà mấy cái lisp gần đây tôi hay dùng.

Dạng của nó là  (vlax-curve-getClosestPointTo doituong diem [nil t]) 

Mục đích là lấy điểm nằm trên curve gần với điểm cho trước nhất (hay còn gọi là điểm thẳng góc ngắn nhất)

Để minh họa thì bạn hãy vẽ 1 line, 1 pline, 1 arc, 1 circle hay bất cứ dtg nào bạn muốn (trừ block) rồi chạy cái lsp dưới đây.

Nó sẽ vẽ 2 đường : màu đỏ với tham số nil và màu vàng với tham số t.

(defun c:test ()
  (setq a (car (entsel "\nChon doi tuong:"))
b (getpoint "\nChon diem:"))
  (entmake (list (cons 0 "LINE") (cons 10 b) (cons 11 (vlax-curve-getClosestPointTo a b))
(cons 62 1)))
  (entmake (list (cons 0 "LINE") (cons 10 b) (cons 11 (vlax-curve-getClosestPointTo a b t))
(cons 62 2)))
)

  • 1

#13 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 26 September 2014 - 07:50 PM

hehe đâu có gì là thừa a, có người pit người chưa pit, pit rùi ôn lại chưa pit thì có thể học hỏi thêm ^^


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#14 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 27 September 2014 - 09:02 AM

Thank Tot77 !
Bác co´ thể khái qua´t vêˋ vla put, vla get giˋ giˋ đo´ vaˋ cho vd cụ thể (càng nhiều vd càng phê) ^^
  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#15 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 27 September 2014 - 10:10 AM

Đánh lệnh vlide, bấm f1, vào ActiveX and VBA reference > Objects > Line object. Bên phần Properties bạn thấy 1 dãy. Tất cả những cái đó đều có thể ghép với vla-get- để biết thuộc tính của line, nhưng chỉ 1 số có thể ghép với vla-put- để thay đổi thuộc tính. Muốn biết cái nào dùng dc với vla-put- thi bạn cứ ghép thử, thấy cái nào chuyển màu xanh là ok, còn màu đen là not ok.

Dưới đây là lsp test, tôi chỉ lấy vài cái prop đẻ thử thôi. bạn vẽ 1 line rồi chạy lsp.

 

(defun c:test ()
  (defun v2p (a)  (vlax-safearray->list (vlax-variant-value a)))
  (setq a (car (entsel "\nChon Line:"))
obj (vlax-ename->vla-object a))
  (alert  (strcat "\nAngle : " (rtos (vla-get-Angle obj))
 "\nDelta : " (vl-prin1-to-string (v2p (vla-get-Delta obj)))
 "\nLength : " (rtos (vla-get-Length obj))
 "\nStartPoint : " (vl-prin1-to-string (setq dd (v2p (vla-get-StartPoint obj))))
 "\nEndPoint : " (vl-prin1-to-string (setq dc (v2p (vla-get-EndPoint obj))))
 "\nLayer : " (vla-get-Layer obj)
 "\nLinetype : " (vla-get-Linetype obj)
 "\nLinetypeScale : " (rtos (vla-get-LinetypeScale obj))
 "\nLineweight : " (rtos (vla-get-Lineweight obj))      
   ))
  (vla-put-StartPoint obj (vlax-3d-point (polar dd 0 1)))
  (vla-put-EndPoint obj (vlax-3d-point (polar dc 0 -1)))
  (alert  (strcat "\nNew StartPoint : " (vl-prin1-to-string  (v2p (vla-get-StartPoint obj)))
 "\nNew EndPoint : " (vl-prin1-to-string  (v2p (vla-get-EndPoint obj)))))
)

  • 2

#16 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 01 October 2014 - 05:19 PM

Trông chờ các bác tùy hứng các hàm tiếp theo ^^


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#17 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 19 January 2015 - 10:26 AM

Đánh lệnh vlide, bấm f1, vào ActiveX and VBA reference > Objects > Line object. Bên phần Properties bạn thấy 1 dãy. Tất cả những cái đó đều có thể ghép với vla-get- để biết thuộc tính của line, nhưng chỉ 1 số có thể ghép với vla-put- để thay đổi thuộc tính. Muốn biết cái nào dùng dc với vla-put- thi bạn cứ ghép thử, thấy cái nào chuyển màu xanh là ok, còn màu đen là not ok.

Dưới đây là lsp test, tôi chỉ lấy vài cái prop đẻ thử thôi. bạn vẽ 1 line rồi chạy lsp.

 

(defun c:test ()
  (defun v2p (a)  (vlax-safearray->list (vlax-variant-value a)))
  (setq a (car (entsel "\nChon Line:"))
obj (vlax-ename->vla-object a))
  (alert  (strcat "\nAngle : " (rtos (vla-get-Angle obj))
 "\nDelta : " (vl-prin1-to-string (v2p (vla-get-Delta obj)))
 "\nLength : " (rtos (vla-get-Length obj))
 "\nStartPoint : " (vl-prin1-to-string (setq dd (v2p (vla-get-StartPoint obj))))
 "\nEndPoint : " (vl-prin1-to-string (setq dc (v2p (vla-get-EndPoint obj))))
 "\nLayer : " (vla-get-Layer obj)
 "\nLinetype : " (vla-get-Linetype obj)
 "\nLinetypeScale : " (rtos (vla-get-LinetypeScale obj))
 "\nLineweight : " (rtos (vla-get-Lineweight obj))      
   ))
  (vla-put-StartPoint obj (vlax-3d-point (polar dd 0 1)))
  (vla-put-EndPoint obj (vlax-3d-point (polar dc 0 -1)))
  (alert  (strcat "\nNew StartPoint : " (vl-prin1-to-string  (v2p (vla-get-StartPoint obj)))
 "\nNew EndPoint : " (vl-prin1-to-string  (v2p (vla-get-EndPoint obj)))))
)

Cái này hay quá, các bác ơi nổ tiếp để em học hỏi với 


  • 0

#18 Tr.CongSon

Tr.CongSon

    biết lệnh array

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

Đã gửi 27 May 2015 - 03:54 PM

Chào các anh chị,

Lâu rồi không thấy ai động đậy gì đến Topic này nên em mạn phép hâm nóng lại tí  

Mong các cao thủ tung vài chiêu để  lớp đàn em đi sau như bọn em Có thể là  học "Mỗi ngày 1 hàm vla (vlax)" !

Như a Hieprttr đã nói ^^

@a hiepttr học được chiêu mô chỉ bảo em mò mẫm với :)

Hóng tin ae!


  • 0