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

Viết lisp theo yêu cầu [phần 2]

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

cám ơn bác nhiều, lisp quay của bác đúng ý em rồi nhưng còn phần chọn góc quay chua được tiện lắm, bác có thể điều chỉnh cách lấy góc quay bằng cách pick hai điểm ( giống lệnh torient)vì em hay phải chèn text và tập hợp đối tượng song song với một đoạn thẳng. em cám ơn bác nhiều, chúc bác mạnh khỏe!

Bạn sửa lại 1 tí như vầy :) Brgs

(defun c:rtt(/ ss sst)
(setq ss (ssadd))
(while (or 
(= (setq sst (acet-list-to-ss (vl-remove-if '(lambda(x)  (null (wcmatch (acet-dxf 0 (entget x)) "*TEXT")))  (acet-ss-to-list ss)))) nil)
(>(sslength sst) 1))
(Prompt "\nXin h\U+00E3y ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng :")
   (setq ss (ssget))
)    
   (command ".rotate" ss "" (acet-dxf 10 (entget(ssname sst 0))) (* 180.0 (/ (getangle "\nG\U+00F3c quay :") pi)))
)

  • Vote tăng 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ách pro cho mình hỏi chút, mình muốn vẽ hình đơn giản dưới đây, nhưng còn thắc mắc chỗ dùng lệnh hatch để gạch mặt cắt , mãi nó ko gạch theo ý mình muốn

mình đã vẽ xong chi tiết, chỉ còn phần gạch mặt cắt là chưa đc như ý, mong các pro chỉ giáo với,

sau đây là đoạn code mình đã viết, và hình mình cần vẽ (mình chưa vẽ đc hình này bằng autolisp)

 

 

(defun C:thelinh()

(command "Layer" "Make" "Dam" "Ltype" "Continuous" "Dam" "")
 (command "Layer" "Make" "Dam" "Color" "10" "Dam" "")
 (command "Layer" "Make" "Dam" "Lweight" "0.50" "Dam" "")
(command "line" '(26.6667 0.0000) '(26.6667 25.1757) "")
(command "line" '(25.3333 0.0000) '(25.3333 17.0667) "")
(command "line" '(26.6667 18.5333) '(25.3415 17.1964) "")
(command "line" '(25.3333 17.0667) '(0.0771 17.0667) "")
(command "line" '(26.6667 20.0000) '(0.0000 20.0000) "")
(command "line" '(8.6210 26.6667) '(25.0565 26.6667) "")
(command "line" '(24.0000 26.6667) '(24.0000 96.0000) "")
(command "line" '(6.6210 86.0000) '(6.6210 28.6667) "")
(command "line" '(6.6210 48.3212) '(0.0000 48.3212) "")
(command "line" '(6.6210 65.3333) '(0.0000  65.3333) "")
(command "line" '(24.0000  88.0000) '(8.6210  88.0000) "")
(command "line" '(24.0000  96.0000) '(0 96.0000) "")
(command "line" '(0  101.2938) '(22.6667 101.2938) "")
(command "line" '(24  96) '(0 96) "")
(command "line" '(0  101.2938) '(22.6667 101.2938) "")
(command "line" '(22.6667 101.2938) '(24.0000 96.0000) "")
(command "line" '(22.6667 101.2938) '(24.0000 96.0000) "")

(command "arc" '(26.6667 25.1757) "e" '(25.0565 26.6667) "r" 2.44)
(command "arc" '(6.6210 28.6667) "e" '(8.6210 26.6667) "r" 2)
(command "arc" '(8.6210 88.0000) "e" '(6.6210 86.0000) "r" 2)

(command "mirror" (ssget "x") "" '(0.0000 101.2938) '(0 0) "N" "")
(command "mirror" (ssget "x") "" '(26.6667 0.0000) '(-26.6667 0.0000) "N" "")

(command "Layer" "Make" "Duongtruc" "Ltype" "ACAD_ISO10W100" "Duongtruc" "")
 (command "Layer" "Make" "Duongtruc" "Color" "yellow" "Duongtruc" "")
  (command "line" '(0.0000 108.4677) '(0.0000 -106.7723) "")
(command "line" '(-11.4760 56.8273) '(12.7819 56.8273) "")
(command "line" '(-35.0811 0.0000) '(37.3477 0.0000) "")
(command "line" '(-11.4760 -56.8273) '(12.7819 -56.8273) "")    

(command "Layer" "Make" "manh" "Ltype" "Continuous" "manh" "")
 (command "Layer" "Make" "manh" "Color" "white" "manh" "")
 (command "Layer" "Make" "manh" "Lweight" "0.25" "manh" "")

;(setq hatch_name "ANSI31")
;(setq hatch_angle "1")
;(setq hatch_scale "5")
;(setq hh (ssget "W" '(-33 98) '(31 61)))
;(command "hatch" hatch_name hatch_angle hatch_scale hh "")
(command "hatch" "ANSI31" 1 1 (ssget "C" '(-33 98) '(31 61)) "")

)

hinh can ve

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ạn sửa lại 1 tí như vầy :) Brgs

(defun c:rtt(/ ss sst)
(setq ss (ssadd))
(while (or 
(= (setq sst (acet-list-to-ss (vl-remove-if '(lambda(x)  (null (wcmatch (acet-dxf 0 (entget x)) "*TEXT")))  (acet-ss-to-list ss)))) nil)
(>(sslength sst) 1))
(Prompt "\nXin h\U+00E3y ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng :")
   (setq ss (ssget))
)    
   (command ".rotate" ss "" (acet-dxf 10 (entget(ssname sst 0))) (* 180.0 (/ (getangle "\nG\U+00F3c quay :") pi)))
)

 

lisp chạy rất tốt, cám ơn bạn nhiều!

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

em có vấn đề như thế này nhờ các bác giúp đỡ

em xây dựng bề mặt trong civil bằng đối tượng Text nhưng gặp 1 vấn đề rất chi là gay go!

đó là em muốn gắn giá tri "contents" của text vào giá trị position Z (giá trị này đang là 0"

nghĩa là thế này a: contents = 190.5

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

em có vấn đề như thế này nhờ các bác giúp đỡ

em xây dựng bề mặt trong civil bằng đối tượng Text nhưng gặp 1 vấn đề rất chi là gay go!

đó là em muốn gắn giá tri "contents" của text vào giá trị position Z (giá trị này đang là 0"

nghĩa là thế này a: contents = 190.5 position Z = 0 em muốn giá trị position Z = 190.5

hoặc là khi em thay đổi giá trị contents = 190.5 thành contents = 180.5 thì giá trị position Z cũng thay đổi là = 180.5

các cao thủ viết lisp có thể giải quyết bài toán này không? text của 1 bình đồ là rất lớn nên việc ngồi làm thủ công từng text là không tưởng! cảm ơn các bác!

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

em có vấn đề như thế này nhờ các bác giúp đỡ

em xây dựng bề mặt trong civil bằng đối tượng Text nhưng gặp 1 vấn đề rất chi là gay go!

đó là em muốn gắn giá tri "contents" của text vào giá trị position Z (giá trị này đang là 0"

nghĩa là thế này a: contents = 190.5 position Z = 0 em muốn giá trị position Z = 190.5

hoặc là khi em thay đổi giá trị contents = 190.5 thành contents = 180.5 thì giá trị position Z cũng thay đổi là = 180.5

các cao thủ viết lisp có thể giải quyết bài toán này không? text của 1 bình đồ là rất lớn nên việc ngồi làm thủ công từng text là không tưởng! cảm ơn các bác!

Việc không có file mẫu mà viết được lisp giúp bạn cũng có thể gọi là điều không tưởng. Không biết civil với CAD khác nhau k nhỉ :rolleyes:

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

Việc không có file mẫu mà viết được lisp giúp bạn cũng có thể gọi là điều không tưởng. Không biết civil với CAD khác nhau k nhỉ :rolleyes:

 

Civil dùng trong thiết kế hạ tầng

Nó xài toàn ACAD_PROXY_ENTITY thôi

AutoLisp thì bó tay rồi

:rolleyes: :rolleyes:

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

Em có vấn đề này nhờ các cao thủ giúp đỡ:

Khi vẽ bản vẽ không theo tỉ lệ 1:1 mà cần stretch thi phải nhân chia rất mệt nên các cao thủ giúp em tạo lệnh chọn dim để đọc scale factor sau đó chỉ gõ chiều dài cần stretch (không nhân tỉ lệ của dim) để nó stretch cho mình. Cám ơn các đại ca!

 

Các cao thủ oi giúp em với nhé!

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

Scale le6n 1:1 -> Stretch hay làm gì tùy ý (move, copy,...) -> Scale xuống lại.

 

 

Nếu Scale xuống lại thi còn gì để nói chứ! Em định dùng lisp nhưng trình độ ABC nên muốn nhờ các cao thủ giúp thôi! vì số lượng hình đã scale lên nhiều rồi mà có hình lại scale 2 chiều khác nhau nữa chứ! Mong các anh chỉ giáo!!!

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

Nếu Scale xuống lại thi còn gì để nói chứ! Em định dùng lisp nhưng trình độ ABC nên muốn nhờ các cao thủ giúp thôi! vì số lượng hình đã scale lên nhiều rồi mà có hình lại scale 2 chiều khác nhau nữa chứ! Mong các anh chỉ giáo!!!

Việc này giúp bạn được, nhưng lại có cái dở là nếu đã dùng phương thức như thế (nhập) thì khi kích chuột, khoảng cách đó cũng nhân, bạn ok k ?

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

Việc này giúp bạn được, nhưng lại có cái dở là nếu đã dùng phương thức như thế (nhập) thì khi kích chuột, khoảng cách đó cũng nhân, bạn ok k ?

Anh giúp hộ nếu có bất cập gì thì tìm cách khắc phục vậy. Cám ơn anh nhiều!

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

Anh giúp hộ nếu có bất cập gì thì tìm cách khắc phục vậy. Cám ơn anh nhiều!

Bạn dùng tạm, mình để chọn dim đầu tiên trong tập chọn làm dim để lấy Scale, bạn có thể kích chọn dim chỉ định hoặc quét lẫn cả vào nếu vùng đó chỉ có 1 dimstyle. Đến giờ về, mình hơi vội, viết k được hay, có gì bạn cứ phản hồi nhé:

(defun c:sd(/ ss ssd basePnt) 
(setq ss (ssadd)) 
(while 
(= (setq ssd (acet-list-to-ss (vl-remove-if '(lambda(x) (null (wcmatch (acet-dxf 0 (entget x)) "DIMENSION"))) (acet-ss-to-list ss)))) nil)
(Prompt "\nXin h\U+00E3y ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng :") (setq ss (ssget)))  

(command ".stretch" ss "" 
(setq basePnt (getpoint "\n\U+0110i\U+1EC3m c\U+01A1 s\U+1EDF"))
(polar basePnt (getangle basePnt "\nH\U+01B0\U+1EDBng Stretch :")
(/ (getdist "\nKho\U+1EA3ng stretch :") (vla-get-LinearScaleFactor (vlax-ename->vla-object (ssname ssd 0)))))    
) 
)

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ạn dùng tạm, mình để chọn dim đầu tiên trong tập chọn làm dim để lấy Scale, bạn có thể kích chọn dim chỉ định hoặc quét lẫn cả vào nếu vùng đó chỉ có 1 dimstyle. Đến giờ về, mình hơi vội, viết k được hay, có gì bạn cứ phản hồi nhé:

(defun c:sd(/ ss ssd basePnt) 
(setq ss (ssadd)) 
(while 
(= (setq ssd (acet-list-to-ss (vl-remove-if '(lambda(x) (null (wcmatch (acet-dxf 0 (entget x)) "DIMENSION"))) (acet-ss-to-list ss)))) nil)
(Prompt "\nXin h\U+00E3y ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng :") (setq ss (ssget)))  

(command ".stretch" ss "" 
(setq basePnt (getpoint "\n\U+0110i\U+1EC3m c\U+01A1 s\U+1EDF"))
(polar basePnt (getangle basePnt "\nH\U+01B0\U+1EDBng Stretch :")
(/ (getdist "\nKho\U+1EA3ng stretch :") (vla-get-LinearScaleFactor (vlax-ename->vla-object (ssname ssd 0)))))    
) 
)

Trước tiên mình chân thành cám ơn anh đã giúp đỡ. Mình vừa dùng thử và có một ý kiến sau. Khi chọn tập đối tượng mà có nhiều tỉ lệ scale factor thì nên có thao tác chọn dim để làm cơ sở scale. ngoài ra anh nên bỏ hướng Stretch mà hướng vẫn theo hướng mouse để như lệnh stretch nguyên thuỷ của cad. Xin cám ơn anh nhiều!

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

Trước tiên mình chân thành cám ơn anh đã giúp đỡ. Mình vừa dùng thử và có một ý kiến sau. Khi chọn tập đối tượng mà có nhiều tỉ lệ scale factor thì nên có thao tác chọn dim để làm cơ sở scale. ngoài ra anh nên bỏ hướng Stretch mà hướng vẫn theo hướng mouse để như lệnh stretch nguyên thuỷ của cad. Xin cám ơn anh nhiều!

Bạn không đọc kỹ bài mình nói rồi.

Đỏ : Nếu tập chọn nhiều dim, bạn cứ pick chọn 1 dim đầu làm dim cơ sở, rồi quét chọn tiếp cả tập đối tượng, vì mình lấy đối tượng dim đầu tiên làm cơ sở, bạn hiểu chứ? Như vậy sẽ giúp bạn bớt đi 1 thao tác thừa nếu toàn bộ dim giống nhau

Xanh : hướng stretch vẫn theo điểm mouse, không khác gì cả, chỉ thêm phần bạn phải nhập khoảng cách thôi, chứ k chỉ định điểm chuẩn xác được , vì getdist đã thêm tỉ lệ scale, nên nếu pick chuột thì k trực quan như stretch nguyên thủy

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

Civil dùng trong thiết kế hạ tầng

Nó xài toàn ACAD_PROXY_ENTITY thôi

AutoLisp thì bó tay rồi

:rolleyes: :rolleyes:

Mình vẫn xài lisp cad cho civil binh thường mà!

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

Mình vẫn xài lisp cad cho civil binh thường mà!

Bình thường hay không thì yêu cầu của bạn cũng cần có file :)

  • Vote tăng 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

Bạn không đọc kỹ bài mình nói rồi.

Đỏ : Nếu tập chọn nhiều dim, bạn cứ pick chọn 1 dim đầu làm dim cơ sở, rồi quét chọn tiếp cả tập đối tượng, vì mình lấy đối tượng dim đầu tiên làm cơ sở, bạn hiểu chứ? Như vậy sẽ giúp bạn bớt đi 1 thao tác thừa nếu toàn bộ dim giống nhau

Xanh : hướng stretch vẫn theo điểm mouse, không khác gì cả, chỉ thêm phần bạn phải nhập khoảng cách thôi, chứ k chỉ định điểm chuẩn xác được , vì getdist đã thêm tỉ lệ scale, nên nếu pick chuột thì k trực quan như stretch nguyên thủy

 

Em thấy thế này nhé: Nếu dim chọn ban đầu thì không bị stretch mà bị move đi

Còn hướng stretch thì mình phài thêm 1 động tác kích chuột so với lệnh stretch nguyên thuỷ. Anh xem có thể bỏ bớt động tác kích chuột này đi không! Vì thêm 1 dộng tác vừa mất thời gian vừa ko quen tay :lol:

Em đọc câu lệnh của anh mà không hiểu tí gì cả nên không thể sửa gì được :D

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

Em thấy thế này nhé: Nếu dim chọn ban đầu thì không bị stretch mà bị move đi

Còn hướng stretch thì mình phài thêm 1 động tác kích chuột so với lệnh stretch nguyên thuỷ. Anh xem có thể bỏ bớt động tác kích chuột này đi không! Vì thêm 1 dộng tác vừa mất thời gian vừa ko quen tay :lol:

Em đọc câu lệnh của anh mà không hiểu tí gì cả nên không thể sửa gì được :D

Mình sửa tạm cho bạn phần chọn Dim trước, còn bỏ kich chuột hướng đi thì mình chưa làm được, vì lý do : Mình còn kém, chưa tìm hiểu kỹ được các hàm grread,redraw.. nên nếu để chọn hướng chuột của bạn thì sẽ không có đường gióng, rất khổ :(, còn làm Dynamic thì sẽ dài (i think so), mình chưa có thời gian đầu tư..Vậy nên, đành chờ các mem khác fix giúp bạn, hoặc hẹn bạn vào 1 ngày xa xa ^^.Mà theo mình nghĩ việc đặt chuột sao cho đúng hướng với việc đặt chuột sao cho đúng hướng + 1 phát click thì k thể nhanh hơn hay chậm hơn được, chỉ là bạn chưa quen thao tác thôi. Hehe

 

(defun c:sd(/ dsc)
(if (setq dsc (vla-get-LinearScaleFactor 
(vlax-ename->vla-object (car(entsel "\nCh\U+1ECDn Dim c\U+01A1 s\U+1EDF :"))))) 
(progn 
(Prompt "\nXin h\U+00E3y ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng :")   
(command ".stretch" (ssget) "" 
(setq basePnt (getpoint "\n\U+0110i\U+1EC3m c\U+01A1 s\U+1EDF"))
(polar basePnt (getangle basePnt "\nH\U+01B0\U+1EDBng Stretch :")
(/ (getdist "\nKho\U+1EA3ng stretch :") dsc ))    
)
)) 
)

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

Mình sửa tạm cho bạn phần chọn Dim trước, còn bỏ kich chuột hướng đi thì mình chưa làm được, vì lý do : Mình còn kém, chưa tìm hiểu kỹ được các hàm grread,redraw.. nên nếu để chọn hướng chuột của bạn thì sẽ không có đường gióng, rất khổ :(, còn làm Dynamic thì sẽ dài (i think so), mình chưa có thời gian đầu tư..Vậy nên, đành chờ các mem khác fix giúp bạn, hoặc hẹn bạn vào 1 ngày xa xa ^^.Mà theo mình nghĩ việc đặt chuột sao cho đúng hướng với việc đặt chuột sao cho đúng hướng + 1 phát click thì k thể nhanh hơn hay chậm hơn được, chỉ là bạn chưa quen thao tác thôi. Hehe

 

(defun c:sd(/ dsc)
(if (setq dsc (vla-get-LinearScaleFactor 
(vlax-ename->vla-object (car(entsel "\nCh\U+1ECDn Dim c\U+01A1 s\U+1EDF :"))))) 
(progn 
(Prompt "\nXin h\U+00E3y ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng :")   
(command ".stretch" (ssget) "" 
(setq basePnt (getpoint "\n\U+0110i\U+1EC3m c\U+01A1 s\U+1EDF"))
(polar basePnt (getangle basePnt "\nH\U+01B0\U+1EDBng Stretch :")
(/ (getdist "\nKho\U+1EA3ng stretch :") dsc ))    
)
)) 
)

Em chân thành cám ơn! em sẽ dùng cả 2 đoạn code của anh khi các đối tượng có 1 loại dim hoặc khi có nhiều loại dim. Dù sao em cũng cám ơn anh nhiều đã dành thời gian để giúp em!

 

Mong các cao thủ cùng hoàn thiện lisp này. Em nghĩ các anh em cũng hay dùng lệnh này!

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ác Bác giúp em tạo Block có Attribute và tự nhập cao độ cho nó với.

(Lệnh dưới mới chỉ tạo được block (không có Attribute):

 

...

(setq TenBlock (getstring "\n - Nhap ten block: "))

(setq Caodo (getreal "\n - Nhap cao đo: "))

(setq Diem (getpoint "\n - Chon Diem Dat Block: "))

(entmake (list (cons 0 "insert") (cons 2 TenBlock) (cons 10 Diem)))

...

 

Xin cảm ơn nhiều !

Hề hề hề,

Bạn có thể tham khảo cách tạo block thuộc tính của bác 18011985 ở đây nhé.

http://www.cadviet.com/forum/index.php?showtopic=19617&st=0&p=95481&fromsearch=1entry95481

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

Mình đã paste như hướng dẫn của bạn nhưng không được .

Mong bạn chỉ giúp

Hề hề hề,

Đúng là không được do hàm con (xuly .....) chỉ dùng có hai đối số là biến toàn cục là hai list pts và txts . Do vậy khi thêm vào (caddr data) sẽ bị lỗi là too arguments.

Việc sửa lại cho nó có thêm biến z ở kết quả tuy không quá khó nhưng cần có thời gian một chút do cái lisp này quá dài. Chỉ đọc để hiểu nó nói gì cũng mất hàng giờ rồi bạn ạ. Mong bạn chịu khó chờ một chút nha.

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ờ các anh chị viết giúp em lip như thế này:(em đã seach nhưng không thấy)

- đổi tất cả các text, mtext,dim có trong bãn vẽ về cùng chiều cao chữ và về cùng 1 layer.

-chuển font chữ có trong bản vẽ về font VNswitzerlandCondensed(text và mtext)

Chân thành cảm ơn các anh chị

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

Mình có seach được trên diễn đàn lisp copy tăng dần này http://www.cadviet.com/upfiles/3/copy_tang_dancom.lsp nhưng chỉ copy tăng dần được từ 1 tới 99 thôi. Bác nào biết sửa lại giúp mình copy tăng dần từ 1 tới 10000 mình cám ơn nhiều

Hề hề hề,

Chào bạn Lacvanhoa, Bạn hãy thử thay (if (= luusokt 100) (setq luusokt 0))bằng (if (= luusokt 10000) (setq luusokt 0)) và chạy thử xem sao nhé.

Lưu ý rằng cái lisp này chỉ tăng dần với các text mà có hai ký tự cuối là chữ số thôi nhé. Nếu có hơn hai ký tự cuối là chữ số thì chỉ có tăng ở hai ký tự cuối chứ không tăng các ký tự còn lại bạn ạ.

Chúc bạn vui.

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ờ các anh chị viết giúp em lip như thế này:(em đã seach nhưng không thấy)

- đổi tất cả các text, mtext,dim có trong bãn vẽ về cùng chiều cao chữ và về cùng 1 layer.

-chuển font chữ có trong bản vẽ về font VNswitzerlandCondensed(text và mtext)

Chân thành cảm ơn các anh chị

Bạn đưa ra 1 bài toán quá thiếu dữ liệu đầu vào :) => Mình viết tạm như thế này , có gì bạn tự sửa nhé (lưu ý, mình lờ block ^^, ngại với anh này lắm rồi)

 

(defun c:cht1()
(vl-load-com)
(command "undo" "be")
(foreach ent 
(mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "X" '((0 . "DIMENSION,LEADER,*TEXT,ATT*"))))))) 
(if (vlax-property-available-p ent 'TextHeight) (vlax-put-property ent 'TextHeight "2") )
(if (vlax-property-available-p ent 'Height) (vlax-put-property ent 'Height "2") )
(if (vlax-property-available-p ent 'Layer) (vlax-put-property  ent 'Layer "0"))
) 
(vlax-for x (vla-get-textstyles
      (vla-get-activedocument (vlax-get-acad-object))
    )
 (vla-put-fontfile x "Romans.shx")
)
(command "undo" "en")
)

- Các thứ cần sửa bao gồm :

+ Chiều cao text, bạn chưa nói là do người dùng nhập vào hay chọn đối tượng mẫu => Mình để là "2", bạn sửa lại theo con số bạn ưa thích ^^

+ Tương tự với Layer Name, mình đang để là "0"

+ Tên font của bạn chưa có đuôi :) Mình đang để tạm là Romans.SHX

  • Vote tăng 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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×