Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Nguyen Hoanh

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

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

truongthanh    7
Đúng rồi. chỉ cân nhập số muốn chia dưới dạng 1/X là ok, vậy mà em không nghĩ ra.

cảm ơn anh đã thông tin cho em về hàm distof. có nó thì vấn đề lọc text theo số và chuỗi ký tự đã đc giải quyết một cách đơn giản.

code em đã sửa lại đây ạ. Em nghĩ thế này là nó đã hoàn thiện. :cheers:

(defun c:tinh()
(setq i 0 nhan 1 chia 1 cong 0)
(setq 	nhan1 (getreal (strcat "\n nhap so muon nhan hoac chia <" (rtos nhan 2 3) ">: "))
cong1 (getreal (strcat "\n nhap so muon cong hoac tru <" (rtos cong 2 3) ">:")))
(if nhan1 (setq nhan nhan1))
(if cong1 (setq cong cong1))
(prompt "\nchon cac so can sua ...")
(setq txt (ssget '((0 . "TEXT"))))
(command "undo" "begin")
(repeat 	(sslength txt)
(setq txt_name (ssname txt i))
(setq txt_ent (entget txt_name))
(setq cont1 (cdr(assoc 1 txt_ent)))
(setq cont (atof cont1))
(if (distof cont1 2)
	(progn
	(setq s (+ (* cont nhan) cong))
	(setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))
	(entmod txt_ent));if
);if
(setq i (+ i 1))
);repeat
(command "undo" "end")
);defun

@ bác Thanh Bình: hic, bác ơi, bác đừng gọi em là "bác Thaistreetz" nhé, tổn thọ em mất. Em mới ra trường chưa lâu và so với các bác ở đây chắc cũng chỉ được coi là "tụi trẻ" thôi bác ạ. :cheers:

cái này mình muốn bỏ hết dãy số 0000 ở phía sau được ko anh?có nghĩa là cho phép mình nhập số thập phân sau dấu phẩy đó!thanks mọi người!

Thân!

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
Tue_NV    3.841
Lisp này mình down được của anh Thaistreetz!Nhờ các bạn chỉnh sửa dùm mình 1 tí nhen!

Mình muốn khi sử dụng lisp!Lisp sẽ cho phép mình tự nhập số thứ tự lô đất bắt đầu! hiện nay Lisp đang mặc định số đầu tiên là 1!

http://www.cadviet.com/upfiles/2/r.lsp

Thanks và chúc sức khỏe mọi người!

Bạn sửa dòng này :

(setq k 0

tdt 0)

 

thành dòng :

 

(setq k (1- (getreal "\n so thu tu bat dau :") )

tdt 0)

 

cái này mình muốn bỏ hết dãy số 0000 ở phía sau được ko anh?có nghĩa là cho phép mình nhập số thập phân sau dấu phẩy đó!thanks mọi người!

Thân!

Bạn thay dòng này :

(setq txt_ent  (subst (cons 1 (rtos s)) (assoc 1 txt_ent) txt_ent))

 

thành dòng :

(setq txt_ent (subst (cons 1 (rtos s 2 0)) (assoc 1 txt_ent) txt_ent))

Trong đó số 2 : quy định số thập phân decimal

số 0 : chính là số lẻ thập phân đó

  • 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
trinhvqh    222
Cám ơn các lời nhận xét của bác trinhvqh. (do chủ quan của nguời viết nên 1 số chi tiết chưa hoàn chỉnh)

 

Gửi bác Lisp đã cập nhật theo các yêu cầu ở trên.

 

về ý kiến : khoảng cách Text trong Table so với đường ngang bên dưới (hơi sát quá)

- tương tự Text và dimension, CAD cung cấp TABLE STYLE để quản lý các đối tuợng Table. Do đó khoảng cách Text trong Table (do LISP tạo ra) chỉ là tạm thời, tùy theo chủ quan và quy định mỗi nguời (cty) sẽ tự tạo TABLE STYLE theo ý mình.

 

Quản lý đối tuợng CAD theo các xì-tin (Style) cũng đuợc xem là một "PRỒ" chứ nhỉ ?! :cheers:

(defun c:Pid(/ cen doc i h height lst msp ov pt row str stt tblobj vl width x y) ;Point ID out
;;  By : Gia Bach, Copyrightゥ December 2009                    ;;
;;  Contact : gia_bach @  www.CadViet.com                      ;;
 (if (> (atof (substr (getvar "ACADVER") 1 4)) 16.0) (progn
 (princ "\nChon cac POINT de xuat ra Bang toa do :")
 (if (ssget '((0 . "POINT")))
   (progn
     (vl-load-com)
     (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
    msp (vla-get-modelspace doc))
     (vlax-for e (vla-get-ActiveSelectionSet doc)
(setq cen (vlax-safearray->list (variant-value (vla-get-Coordinates e)))
      lst (cons (list e cen )lst))
);vlax-for
     (setq lst (vl-sort lst '(lambda (x y) (or	(< (car (cadr x)) (car (cadr y)));Check X
					(and (> (cadr (cadr x)) (cadr (cadr y)));Check Y
					     (= (car (cadr x)) (car (cadr y)));Equal X
					     )	) ) )
    str (cadr (last lst))
    lst (append (mapcar 'car lst) ) )      
     (setq vl '("dimzin" "cmdecho")    ; Sys Var list  
    ov  (mapcar 'getvar vl))    ; Get Old values
     (mapcar 'setvar vl '(0 0))
     (or *h* (setq *h* 175))
     (initget 6)
     (setq h (getreal (strcat "\nChieu cao chu <" (rtos *h*) "> :")))
     (if h (setq *h* h) (setq h *h*) )
     (if (> (car str)(cadr str) )
(setq str (car str))
(setq str (cadr str)))
     (setq width (* 2(TxtWidth (rtos str) h msp))
    width1 (* 2 (TxtWidth "STT" h msp))
    height (* 2 h))
     (if (> h 3)
(setq width (* (fix (/ width 10))10)
      width1 (* (fix (/ width1 10))10)
      height (* (fix (/ height 5))5)))
     (setq i 1
    row 2
    pt (getpoint "\nDiem dat Bang :")
    TblObj (vla-addtable msp (vlax-3d-point pt) (+ (length lst) 2) 3 height width))
     (vla-put-vertcellmargin TblObj (/ h 4))
     (vla-SetColumnWidth TblObj 0 width1)
     (mapcar '(lambda (x)(vla-setTextHeight TblObj x h))
      (list acTitleRow acHeaderRow acDataRow) )
     (mapcar '(lambda (x)(vla-setAlignment TblObj x 8))
      (list acTitleRow acHeaderRow acDataRow))
     (vla-setText TblObj 0 0 "Bang toa do")
     (vla-setText TblObj 1 0 "STT")
     (vla-setText TblObj 1 1 "X")
     (vla-setText TblObj 1 2 "Y")
     (foreach e lst
(setq stt (itoa i)
      pt (vlax-safearray->list (variant-value (vla-get-Coordinates e)))
      obj_id (rtos (vla-get-objectid e))) 
(vla-AddText msp stt (vlax-3d-point (polar pt (/ pi 4) (/ h 4))) h)
(vla-setText TblObj row 0 stt)
(vla-setText TblObj row 1 (strcat "%<\\AcObjProp Object(%<\\_ObjId " obj_id ">%).Coordinates \\f \"%lu6%pt1\">%"))
(vla-setText TblObj row 2 (strcat "%<\\AcObjProp Object(%<\\_ObjId " obj_id ">%).Coordinates \\f \"%lu6%pt2\">%"))
(setq row (1+ row) i (1+ i))
)
     (vlax-release-object TblObj)
     (mapcar 'setvar vl ov)                     ;reset Sys Vars
     (princ)      
     )
   )
 )
 (alert "\nPhien ban Cad cua ban khong ho tro tao Bang (TABLE)")
 )
 )

(defun TxtWidth (val h msp / txt minp maxp)
 (setq	txt (vla-AddText msp val (vlax-3d-point '(0 0 0)) h))
 (vla-getBoundingBox txt 'minp 'maxp )
 (vla-Erase txt)
 (-(car(vlax-safearray->list maxp))(car(vlax-safearray->list minp)))
 )

 

Pid.Lsp của gia_bach như vậy là OK rồi

Nhưng tôi vẫn muốn hoàn hảo hơn một chút nữa

Điều này đồng nghĩa với việc bổ sung thêm Update Pid

 

Thực tế trong quá trình vẽ Việc Di chuyển Point và Delete point xảy ra rất thường xuyên

cho nên cần phải Update Table

Update phai dam bao cac truong hop nhu: Add Point; Reselect; Unselect,..

 

Nhu vay, Kể ra cũng hơi khó cho gia_bach vì Point; Text; Table là những đối tượng rời rạc không liên kết

Tôi xin đề xuất thế này gia_bach xem được không nhé:

 

Command: Pid (New/Update) N:

Chọn: U (Update)

Chọn Text và Table cần Xoá:

Chọn lại Point:

Chiều cao chữ (175):

Chọn điểm đặt bảng:

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
gia_bach    1.442
.............................

Thực tế trong quá trình vẽ Việc Di chuyển Point và Delete point xảy ra rất thường xuyên

cho nên cần phải Update Table

Update phai dam bao cac truong hop nhu: Add Point; Reselect; Unselect,..

 

Nhu vay, Kể ra cũng hơi khó cho gia_bach vì Point; Text; Table là những đối tượng rời rạc không liên kết

............................

Có vẻ như trinhvqh muốn biết giới hạn của LISPkhả năng viết Lisp của anh em CadViet tới đâu hơn là .... ?

 

Thực sự thì vấn đề đặt ra có độ khó rất cao. Tuy nhiên, về cơ bản bài toán này có thể giải quyết bằng LISP cộng với điều kiện biên :

- tạo liên kết giữa đối tượng Point và Text số thứ tự : khi vị trí Point thay đổi dẫn đến số thứ tự cũng cần cập nhật theo (đánh số lại số thứ tự )

Có thể tạo liên kết giữa đối tượng Point và Text số thứ tự bằng cách đưa Text số thứ tự vào 1 Layer có tên riêng biệt, nhưng việc tạo mới 1 Layer có vẻ như đụng đến CAD Standard của user (hay CTy)

 

Đó chỉ là 1 giải pháp đề xuất, thực tế tùy cơ ứng biến. Tuy nhiên vào thời điểm này, công việc quá bận rộn nên không thể giúp bác đuợ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
trinhvqh    222
Có vẻ như trinhvqh muốn biết giới hạn của LISPkhả năng viết Lisp của anh em CadViet tới đâu hơn là .... ?

 

Thực sự thì vấn đề đặt ra có độ khó rất cao. Tuy nhiên, về cơ bản bài toán này có thể giải quyết bằng LISP cộng với điều kiện biên :

- tạo liên kết giữa đối tượng Point và Text số thứ tự : khi vị trí Point thay đổi dẫn đến số thứ tự cũng cần cập nhật theo (đánh số lại số thứ tự )

Có thể tạo liên kết giữa đối tượng Point và Text số thứ tự bằng cách đưa Text số thứ tự vào 1 Layer có tên riêng biệt, nhưng việc tạo mới 1 Layer có vẻ như đụng đến CAD Standard của user (hay CTy)

 

Đó chỉ là 1 giải pháp đề xuất, thực tế tùy cơ ứng biến. Tuy nhiên vào thời điểm này, công việc quá bận rộn nên không thể giúp bác đuợc.

 

Suy luận của gia_bach thật oan cho tôi

Tôi nghĩ mình chỉ đóng vai trò thay mặt anh em để đặt vấn đề cho các cao thủ Lisp mà thôi

 

Theo tôi biết thì Pid.lsp rất cần cho công việc của bản vẽ quy hoạch Giao thông định vị

Với những kinh nghiệm từ ACA tôi muốn góp ý cho hoàn thiện mà thôi

Hoàn toàn không có ý 'thứ sức" hay "làm khó" gì ở đây

 

Vừa rồi offline, tôi quyết định đến để gặp Tue_NV để xin thông tin về bác như

tôi đã có viết trong bài viết trước đây "Hậu tạ cái vụ bác viết Dim.lsp cho tôi"

 

Chúc vui vẻ và hẹn gặp một ngày gần nhất

  • 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
Tue_NV    3.841

Bác viết những bài viết như vầy thì thiệt tình người khác nghĩ cho đúng về bác thì khó lắm

 

Vụ này coi bộ các chuyên gia "Ô tô líp" lại bó tay rồi

Bạn lại đưa ra một bài toán khá "nghẹt"

Làm cho Topic này mất đi sự xôn xao vốn có

:cheers:

 

Đành phải tiếp tục nhờ ACA khai thông giùm bạn đây

Vụ này nếu dùng ACA thì dễ hơn ăn ớt

 

http://www.cadviet.com/upfiles/2/hogatrim.rar

Nào, hãy tiếp tục leo "Ô tô" và chạy "Líp líp" đi bà con!!!

 

Tôi nghĩ mình chỉ đóng vai trò thay mặt anh em để đặt vấn đề cho các cao thủ Lisp mà thôi

 

Bác viết đặt vấn đề cho các cao thủ Lisp .

Vậy Tue_NV xin hỏi bác Ai là cao thủ Lisp vậy bác?

Chắc trên diễn đàn này chẳng có ai nhận mình là cao thủ Lisp cả đâu bác ạ

 

Nếu không ai nhận mình là cao thủ Lisp , điều đó có nghĩa là Bác đặt vấn đề nhầm địa chỉ rồi

  • 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
trinhvqh    222
Bác viết những bài viết như vầy thì thiệt tình người khác nghĩ cho đúng về bác thì khó lắm

Bác viết đặt vấn đề cho các cao thủ Lisp .

Vậy Tue_NV xin hỏi bác Ai là cao thủ Lisp vậy bác?

Chắc trên diễn đàn này chẳng có ai nhận mình là cao thủ Lisp cả đâu bác ạ

 

Bác đặt vấn đề nhầm địa chỉ rồi

 

Tue không thấy người ta vẫn suy tôn Thanh Lam, Hồng Nhung, Mỹ Linh, Hà Trần là những diva nhưng có ai trong số họ dám nhận mình là diva đâu

thì cái chuyện "cao thủ ô tô líp" cũng tuơng tự như vậy Tue à.

 

Bởi vậy, khi gặp Tue tôi liền nói Tue là người nghiêm túc nhất diễn đàn Cadviet còn gì (không thích giỡn)

Offline cadviet miền Trung có 03 mạng alô tham gia maf tá hoả (một ông giọng Bắc, một ông giọng Huế)

Quảng Nôm hay cai ăn cục nói hòn, các bác thông cả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
aliosa    4

Xin chào các bạn. Chúc các bạn năm mới sức khỏe và thành đạt !

Mình xin nhờ các bạn viets giúp mình lisp với nội dung sau:

NỘI DUNG:

- Trên bản vẽ có các đối tượng là line ở các lớp khác nhau và có chiều dài khác nhau

YÊU CẦU:

- Viết một lisp để tác các LINE ở lớp "XRGRID" và có chiều dài >2 sang lớp mới là "DUONG_GIONG"

Mong các bạn giúp mình ! Xin chân thành cảm ơn!

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
gia_bach    1.442
Xin chào các bạn. Chúc các bạn năm mới sức khỏe và thành đạt !

Mình xin nhờ các bạn viets giúp mình lisp với nội dung sau:

NỘI DUNG:

- Trên bản vẽ có các đối tượng là line ở các lớp khác nhau và có chiều dài khác nhau

YÊU CẦU:

- Viết một lisp để tác các LINE ở lớp "XRGRID" và có chiều dài >2 sang lớp mới là "DUONG_GIONG"

Mong các bạn giúp mình ! Xin chân thành cảm ơn!

Bạn chạy thử Lisp này :

(defun C:test(/ ent i ss)
 (vl-load-com)
 (if (setq i -1 ss (ssget  '((0 . "LINE")(8 . "XRGRID"))))
   (progn
     (or (tblsearch "layer" "DUONG_GIONG")
  (command "-layer" "n" "DUONG_GIONG" ""))
     (while (setq ent (ssname ss (setq i (1+ i))))
(setq ent (vlax-Ename->Vla-Object ent))
(if (> (vla-get-Length ent) 2)
  (vla-put-Layer ent "DUONG_GIONG"))  )   )))

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
aliosa    4
Bạn chạy thử Lisp này :

(defun C:test(/ ent i ss)
 (vl-load-com)
 (if (setq i -1 ss (ssget  '((0 . "LINE")(8 . "XRGRID"))))
   (progn
     (or (tblsearch "layer" "DUONG_GIONG")
  (command "-layer" "n" "DUONG_GIONG" ""))
     (while (setq ent (ssname ss (setq i (1+ i))))
(setq ent (vlax-Ename->Vla-Object ent))
(if (> (vla-get-Length ent) 2)
  (vla-put-Layer ent "DUONG_GIONG"))  )   )))

Mình xin chân thành cảm ơn bạn. Chúc bạn cùng cộng đồng CADVIET mạnh khoẻ và thành công !

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
truongthanh    7

Lúc trước mình có down lisp Scale các đối tượng tại tâm của TUE_NV!Nay mình nhờ TUE_NV sửa lại một chút dùm nhé!

Mình có rất nhiều hình vẽ bằng Pline kín, trong đó có các text!Mình muốn khi Scale tất cả các hình đó thì tâm Scale là tâm của hình Pline kín đó, text nằm trong pline kín đó thì scale theo tại đúng điểm đặt text!

Tâm của các hình đó là Centroid của hình đó được xac định bằng lệnh Massprop (ko biết còn cách nào xác định tâm ko nữa?)

Nhờ TUE_NV và các bạn giúp dùm mình nhé!

Thanks mọi người!

http://www.cadviet.com/upfiles/2/cad_1.dwg

http://www.cadviet.com/upfiles/2/scn.lsp

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
gia_bach    1.442
Lúc trước mình có down lisp Scale các đối tượng tại tâm của TUE_NV!Nay mình nhờ TUE_NV sửa lại một chút dùm nhé!

Mình có rất nhiều hình vẽ bằng Pline kín, trong đó có các text!Mình muốn khi Scale tất cả các hình đó thì tâm Scale là tâm của hình Pline kín đó, text nằm trong pline kín đó thì scale theo tại đúng điểm đặt text!

Tâm của các hình đó là Centroid của hình đó được xac định bằng lệnh Massprop (ko biết còn cách nào xác định tâm ko nữa?)

Nhờ TUE_NV và các bạn giúp dùm mình nhé!

Thanks mọi người!

http://www.cadviet.com/upfiles/2/cad_1.dwg

http://www.cadviet.com/upfiles/2/scn.lsp

Nếu hiểu yêu cầu của bạn là : Scale Pline kín tại Centroid của Pline đó và Scale tất cả các text nằm trong Pline kín tại đúng điểm đặt text

Tui e rằng sau khi thực hiện lệnh này, sẽ có truờng hợp Text lọt ra ngoài đuờng Pline ?!

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
tomboy    20
Cảm ơn bạn tomboy nhiều lắm. Đúng ý mình rồi.

Tiện thể, bạn có thể bớt chút thời gian viết thêm cho trường hợp là đa giác lõm được không?

 

Cảm ơn tomboy nhiều

mình sửa lại cho bạn thành đa giác lõm đây: http://www.cadviet.com/upfiles/2/dgl_3.lsp

vẫn là lệnh DGL nhé

Link vá lỗi: http://www.cadviet.com/upfiles/2/dgl_5.lsp

  • 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
Tue_NV    3.841
mình sửa lại cho bạn thành đa giác lõm đây: http://www.cadviet.com/upfiles/2/dgl_1.lsp

vẫn là lệnh DGL nhé

Cảm ơn tomboy rất rất nhiều lắm. Nhưng Tue_NV vẫn thấy cái Lisp trên nó vẽ đa giác lồi chứ chưa vẽ ra được đa giác lõm Tomboy à.

 

Đây là file .dwg thể hiện đa giác lõm cần vẽ

http://www.cadviet.com/upfiles/2/dagiaclom.dwg

 

Tiện thể Tomboy có thể nâng cấp lên trong trường hợp đối tượng là point nữa được không? Vì đôi lúc mọi người cần vẽ đối tượng là Point hơn là điểm chèn của Text. Tue_NV tham quá :cheers:

Cảm ơn tomboy nhiều.

 

@truongthanh : Trường hợp mà Text lọt ra ngoài Pline như trường hợp anh gia_bach nói là trường hợp mà hệ số tỉ lệ

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
gia_bach    1.442
Cảm ơn tomboy rất rất nhiều lắm. Nhưng Tue_NV vẫn thấy cái Lisp trên nó vẽ đa giác lồi chứ chưa vẽ ra được đa giác lõm Tomboy à.

 

Đây là file .dwg thể hiện đa giác lõm cần vẽ

http://www.cadviet.com/upfiles/2/dagiaclom.dwg

...............

Vẽ đa giác lõm qua các điểm nói chung sẽ có rất nhiều nghiệm ?!

Phải chăng yêu cầu của Tue_NV là : Tìm (vẽ) đa giác bao quanh tập điểm mà có diện tích nhỏ nhất ?

Tham khảo

  • 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
tomboy    20
Xin chào các bạn. Chúc các bạn năm mới sức khỏe và thành đạt !

Mình xin nhờ các bạn viets giúp mình lisp với nội dung sau:

NỘI DUNG:

- Trên bản vẽ có các đối tượng là line ở các lớp khác nhau và có chiều dài khác nhau

YÊU CẦU:

- Viết một lisp để tác các LINE ở lớp "XRGRID" và có chiều dài >2 sang lớp mới là "DUONG_GIONG"

Mong các bạn giúp mình ! Xin chân thành cảm ơn!

mình không biết bác Gia Bach đã viết cho bạn rồi nên mình lại viết nũa, cái này để bạn tham khảo thôi nhé: http://www.cadviet.com/upfiles/2/dg.lsp

lênh là DG tức là đường gióng

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
tomboy    20
Cảm ơn tomboy rất rất nhiều lắm. Nhưng Tue_NV vẫn thấy cái Lisp trên nó vẽ đa giác lồi chứ chưa vẽ ra được đa giác lõm Tomboy à.

 

Đây là file .dwg thể hiện đa giác lõm cần vẽ

http://www.cadviet.com/upfiles/2/dagiaclom.dwg

 

Tiện thể Tomboy có thể nâng cấp lên trong trường hợp đối tượng là point nữa được không? Vì đôi lúc mọi người cần vẽ đối tượng là Point hơn là điểm chèn của Text. Tue_NV tham quá :cheers:

Cảm ơn tomboy nhiều.

 

@truongthanh : Trường hợp mà Text lọt ra ngoài Pline như trường hợp anh gia_bach nói là trường hợp mà hệ số tỉ lệ < 1 và điểm chèn (Insert) của Text nằm khá xa so với tâm Centroid

Không phải đâu, mình test rồi ok mà, nói chung là do sai tham số thôi, thứ nhất là mật độ điểm đo, tỉ lệ cạnh để tạo thành đa giác lồi, tile = (a + :cheers:/ c, mình mặc định là 1,1 Trong bản vẽ của bạn thì mật độ điểm không quá dầy, nên tỉ lệ cạnh để tạo đa giác lồi hơi lớn, mình sẽ sửa lại cho bạn sau.

chúc một ngày vui.............................................................................

........................................

  • 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
truongthanh    7
Nếu hiểu yêu cầu của bạn là : Scale Pline kín tại Centroid của Pline đó và Scale tất cả các text nằm trong Pline kín tại đúng điểm đặt text

Tui e rằng sau khi thực hiện lệnh này, sẽ có truờng hợp Text lọt ra ngoài đuờng Pline ?!

Nếu vậy thì mình có thể sử dụng 2 lisp được ko?

+Thứ nhất scale hình tại tâm hình.

+Thứ 2 scale text tại điểm chèn text!

Nhờ các bạn giúp dùm mình!

Thanks!

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
Tue_NV    3.841
Nếu vậy thì mình có thể sử dụng 2 lisp được ko?

+Thứ nhất scale hình tại tâm hình.

+Thứ 2 scale text tại điểm chèn text!

Nhờ các bạn giúp dùm mình!

Thanks!

+Thứ nhất : Truongthanh thử đoạn code này thử nhé :

(defun c:scc(/ doc MS ss tle i ss obj region_obj centpoint)
(vl-load-com)
(setq doc (vla-get-activeDocument (vlax-get-acad-object))
MS (vla-get-ModelSpace doc))
(if (setq ss (ssget '((0 . "*POLYLINE") (70 . 1))))
(progn
(or *tle* (setq *tle* 1.0))
(setq tle (getreal (strcat "\n Nhap he so ti le  : "))i 0)
(if (not tle) (setq tle *tle*) (setq *tle* tle))
(while ((setq regionobj (car(vlax-invoke MS 'addregion
		(list (setq obj (vlax-ename->vla-object(ssname ss i))) )
	     )
               )
)
(setq centPoint (vlax-get regionobj 'Centroid))
(vla-erase regionobj)
(vla-ScaleEntity obj (vlax-3d-point centPoint) tle)
(setq i (1+ i))
);while
)
(alert "\khong co doi tuong nao duoc chon")
)
(princ)
)

+ Thứ hai : lệnh Scaletext sẽ giúp cho truongthanh

Truongthanh có thể đọc lệnh scaletext ở đây :

 

http://www.cadviet.com/forum/index.php?sho...amp;#entry51051

  • Vote tăng 2

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
Desperado    1

Mình có 1 lisp hay về cầu đường đã tổng hợp nhiều lisp nhỏ bên trong.

Nội dung một số đoạn mình cần các bạn hoàn chình là:

Lisp có lệnh là MN (vẽ mực nước), VC (vết cắt) và 1 số lệnh nữa khi thực hiện lệnh cho tới lúc vẽ xong thì nó làm cho chế độ Obsnap Setting ko chạy được nữa. Tức là mất chế độ bắt điểm sau khi thực hiện lệnh đó. Ai biết chỉ dùm mình được ko

Thanks!

http://www.cadviet.com/upfiles/2/cuong.lsp

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
truongthanh    7
+Thứ nhất : Truongthanh thử đoạn code này thử nhé :

+ Thứ hai : lệnh Scaletext sẽ giúp cho truongthanh

Truongthanh có thể đọc lệnh scaletext ở đây :

Xin chân thành cảm ơn TUE_NV!Trong cad có rất nhiều lệnh mà mình vẫn chưa biết!

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
nqt266    0

Gửi bác gia_bach va anh em diễn đàn.

Không biết là diễn đàn mình đã có lisp đánh số thứ tự bản vẽ tự động chưa nhỉ. Em làm bản vẽ nhiều nên đánh số thứ tự mệt quá. Vậy nhân đây nhờ bác gia_bach và anh em cùng nghiên cứu lisp này giúp em. Vấn đề có thể mô tả như sau:

- Có n bản vẽ, cần đánh số thứ tự từ 01,02,03,...,n.Các bản vẽ này đã sắp xếp với khoảng cách đều nhau.

- Thao tác: Command:

Nhập số bản vẽ cần đánh số thứ tự:

Nhập chiều rộng và chiều cao khung (cái này nhập theo kiểu kick chuột theo 2 chiều khung)

Nhập khoảng cách giữa các khung (kick chuột góc phải trên của khung thứ n và góc phải trên của khung thứ n+1)

Nhập số thứ tự bắt đầu (có thể là 01, nhưng cũng có thể bắt đầu bằng giá trị n nào đó)

Chọn vị trí cần nhập số thứ tự (ví trí kick chuột là vị trí left của text số thứ tự)

 

Anh em cadviet cùng thảo luận và giúp em giải quyết vấn đề này nhé

Xin chân thành cảm ơn!

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
Tue_NV    3.841
Gửi bác gia_bach va anh em diễn đàn.

Không biết là diễn đàn mình đã có lisp đánh số thứ tự bản vẽ tự động chưa nhỉ. Em làm bản vẽ nhiều nên đánh số thứ tự mệt quá. Vậy nhân đây nhờ bác gia_bach và anh em cùng nghiên cứu lisp này giúp em. Vấn đề có thể mô tả như sau:

- Có n bản vẽ, cần đánh số thứ tự từ 01,02,03,...,n.Các bản vẽ này đã sắp xếp với khoảng cách đều nhau.

- Thao tác: Command:

Nhập số bản vẽ cần đánh số thứ tự:

Nhập chiều rộng và chiều cao khung (cái này nhập theo kiểu kick chuột theo 2 chiều khung)

Nhập khoảng cách giữa các khung (kick chuột góc phải trên của khung thứ n và góc phải trên của khung thứ n+1)

Nhập số thứ tự bắt đầu (có thể là 01, nhưng cũng có thể bắt đầu bằng giá trị n nào đó)

Chọn vị trí cần nhập số thứ tự (ví trí kick chuột là vị trí left của text số thứ tự)

 

Anh em cadviet cùng thảo luận và giúp em giải quyết vấn đề này nhé

Xin chân thành cảm ơn!

Lisp này Tue_NV đã viết rồi. Bạn chịu khó tìm kiếm vậy nhé.

  • Vote tăng 2

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
aliosa    4

Xin nhờ các bạn chỉnh giúp mình lisp sau:

Minh đang viết một lisp để lấy các giá trị TAG của ATT trong block.

Nội dung:

;MAIN
(defun c:tag()
(setq e (entsel))
(vlax-ename->vla-object e)
(setq tag (VxGetAtts  e))
 )
(defun VxGetAtts (Obj)
(mapcar 
'(lambda (Att)
  (cons (vla-get-TagString Att)
        (vla-get-TextString Att)
  )
 )
 (vlax-invoke Obj 'GetAttributes)
)
)
; -- Function VxGetAtts
; Reads all attribute values from a block.
; Copyright:
;   ?2000 MENZI ENGINEERING GmbH, Switzerland
; Arguments [Type]:
;   Obj = Object [VLA-OBJECT]
; Return [Type]:
;   > Dotted pair list '(("Tag1" . "Val1")...) [list]
; Notes:
;   - None
;

Nhưng khi chạy thì em thấy có gì đó không ổn. Vậy nhờ các bạn chỉnh lại giúp mì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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×