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ị

Lisp theo ý của bạn đây :

Chọn 1 loạt ARC -> Lisp sẽ vẽ tiếp tuyến như hình vẽ

(defun c:vtt(/ oldos ss i ent dd dc p1 p2 a)
 (setq oldos (getvar "osmode"))
 (setq ss (ssget '((0 . "ARC"))) i -1)
 (setvar "osmode" 0)
 (while (setq ent (ssname ss (setq i (1+ i))))
(setq tam (cdr(assoc 10 (entget ent))))
(setq dd (vlax-curve-getstartpoint ent))
(setq dc (vlax-curve-getendpoint ent))
(setq p1 (polar dd (+ (/ pi 2) (angle dd tam)) 1))
(setq p2 (polar dc (+ (/ pi 2) (angle dc tam)) 1))
(setq a (inters dd p1 dc p2 nil))
(vl-cmdf "line" dd a "")
(vl-cmdf "line" dc a "")
 );while
 (setvar "osmode" oldos)
(princ)
)

Tue_NV xử lý thêm t/hợp góc của cung tròn = 180 độ.

(khi đó (inters dd p1 dc p2 nil) trả về nil -> .... 2 đuờng tiếp tuyến song song nhau.)

  • 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

Chào Tue_NV!

Có vấn đề này nhờ bạn giúp mình

Mình có một loạt các block vật tư như: van, tê, cút... trên 1bản vẽ CAD

Mình thống kê thủ công dễ bị nhầm lẫn và thiếu vật tư nữa nên mình muốn một lisp thống kê Block cụ thể như:

có 4 cột và kẻ khung như sau:

Stt Tên vật tư Đơn vị tính Số lượng

1 van cái 01

 

Khi đánh lệnh, lisp tự động tìm các block hiện hành và thống kê như mẫu trên

Cảm ơn bạn nhiều.

(Mình đã tìm rất nhiều các lisp trên diễn đàn nhưng không có cái nào phù hợp 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
Tue_NV xử lý thêm t/hợp góc của cung tròn = 180 độ.

(khi đó (inters dd p1 dc p2 nil) trả về nil -> .... 2 đuờng tiếp tuyến song song nhau.)

Cảm ơn anh giabach.

Mãi viết quá nên em chưa đặt điều kiện cho biến (setq a (inters dd p1 dc p2 nil)) khi góc của cung tròn = 180 độ.

Em đã sửa lại code

(defun c:vtt(/ oldos ss i ent dd dc p1 p2 a)
 (setq oldos (getvar "osmode"))
 (setq ss (ssget '((0 . "ARC"))) i -1)
 (setvar "osmode" 0)
 (while (setq ent (ssname ss (setq i (1+ i))))
(setq tam (cdr(assoc 10 (entget ent))))
(setq dd (vlax-curve-getstartpoint ent))
(setq dc (vlax-curve-getendpoint ent))
(setq p1 (polar dd (+ (/ pi 2) (angle dd tam)) 1))
(setq p2 (polar dc (+ (/ pi 2) (angle dc tam)) 1))
(if (setq a (inters dd p1 dc p2 nil))
  (progn
	(vl-cmdf "line" dd a "")
	(vl-cmdf "line" dc a "")
  )
)
 );while
 (setvar "osmode" oldos)
(princ)
)

@HoangSon : yêu cầu của bạn thì phần mềm ACA (Autocad Architecture) giải quyết rất tuyệt vời -> Có khả năng thống kê như yêu cầu của bạn, có khả năng cập nhật (update) bảng thống kê khi ta thay đổi đối tượng (thêm, sửa , xoá). Mình không biết rằng Lisp có khả năng làm được điều này toàn vẹn hay không vì trình độ mình có hạn. Nhưng xem các file video mà bác trinhvqh upload và đã sơ sơ tìm hiểu đã biết rằng ACA giải quyết điều này 1 cách trọn vẹn

Bạn xem topic này nhé :

http://www.cadviet.com/forum/index.php?sho...8528&st=100

1- Bảng thống kê bản vẽ

 

2- Bảng tiến độ bản vẽ

 

3- Bảng thống kê cửa

 

4- Bảng thống kê tường (tường gạch và vách ngăn)

 

5- Bảng thống kê đèn

 

6- Bảng thống kê thiết bị vệ sinh

 

7- Bảng thống kê nhôm kính

 

8- Bảng thống kê vật dụng nội thất

 

9- Bảng thống kê vật liệu hoàn thiện sàn

 

10- Bảng thống kê diện tích

 

Theo trinhvqh thì ACA đọng lại là thống kê, liệu ACA có thể đáp ứng được những thống kê này?

...

Lấy 1 ví dụ điển hình về ốp gạch vệ sinh.

 

Khi ốp gạch vệ sinh sẽ có ron giữa các viên gạch. Liệu ACA có thống kê được diện tích ron để mua bột chà ron?

Nếu bạn làm chủ việc thống kê

Thì bạn sẽ làm được tất cả những gì bạn muố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
].....

-Cám ơn Anh Tue_NV nhiều , giờ e có vấn đề này cần nhờ a giúp tiếp. Nhờ anh kết hợp giữa hai lisp này với nhau:

+ Lisp 1: lđây http://www.cadviet.com/upfiles/2/thong_so_...__lenh_ts_1.lsp lisp này có chức năng là khi mình nhập giá trị A(góc chuyển hướng) và R(bán kính của đường cong) như hình thì nó sẽ ra được các thông số ở trong vòng tròn màu tím

+ Lisp 2 là cái lisp mà bác vừa giải quyết giúp em đó. Nó có chức năng vẽ ra tiếp tuyến , thì từ đó sẽ có được giá trị của góc A , bán kính R thì có sẵn

- Giờ e muốn nhờ bác kết hợp thánh 1 lisp có chức năng : chọn đường tròn rồi nó vẽ ra tiếp tuyến , và chọn điểm đặt vòng tròn chứa các giá trị và nó tính ra luôn, ko cần phải nhập giá trị A và R như lisp 1 nữa

-Bác xem giúp e nhé , Cám ơn bác

SC0.9623727_1_1.jpg

-Mà bác Tue_NV này em tìm mua mãi hai cuốn hướng dân lập trình autolisp của Phạm Hữu Lộc mà ko thấy ở đâu, chỗ em chỉ có đúng quyển tập 2 , ko có tập 1 nên e không mua

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ó một đề bài nhỏ thế này mong may anh xem và giúp cho mình một lisp:mính có 2 đường bất ký giống hình vẽ,mình cần tạo ra một số đường thẳng nằm ở trong 2 đường thẳng đấy và cách đều 2 đường thẳng đó,số đường thẳng tạo ra giửa 2 đường thẳng đó tuỷ mình đưa vào.Nếu 1 đường thẳng thì nó cách đều 2 đường thẳng gốc,nếu 2 thì 4 đường thẳng đó có khoảng cách đều nhau.......Mong mấy anh giúp,

thonghoang1 thử dùng lisp này xem. Lệnh là NSG

 

untitled_2.gif

 

Nội suy tuyến giữa 2 tuyế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
-Cám ơn Anh Tue_NV nhiều , giờ e có vấn đề này cần nhờ a giúp tiếp. Nhờ anh kết hợp giữa hai lisp này với nhau:

+ Lisp 1: lđây http://www.cadviet.com/upfiles/2/thong_so_...__lenh_ts_1.lsp lisp này có chức năng là khi mình nhập giá trị A(góc chuyển hướng) và R(bán kính của đường cong) như hình thì nó sẽ ra được các thông số ở trong vòng tròn màu tím

+ Lisp 2 là cái lisp mà bác vừa giải quyết giúp em đó. Nó có chức năng vẽ ra tiếp tuyến , thì từ đó sẽ có được giá trị của góc A , bán kính R thì có sẵn

- Giờ e muốn nhờ bác kết hợp thánh 1 lisp có chức năng : chọn đường tròn rồi nó vẽ ra tiếp tuyến , và chọn điểm đặt vòng tròn chứa các giá trị và nó tính ra luôn, ko cần phải nhập giá trị A và R như lisp 1 nữa

-Bác xem giúp e nhé , Cám ơn bác

Lisp của bạn rườm rà quá. Ghép lại đơn giản cho bạn đây :

(defun vtt(/ oldos)
  (setq oldos (getvar "osmode"))
 (setvar "osmode" 0)
   (princ "\n Chon 1 cung Arc :")
 (if (null (setq ss (ssget ":S" '((0 . "ARC"))) ))
 	(alert "\n Khong co cung Arc nao duoc chon ")
  (progn
   (setq ent (ssname ss 0))
    (setq tam (cdr(assoc 10 (entget ent))))
   (setq D (cdr(assoc 40 (entget ent))));bankinh
    (setq dd (vlax-curve-getstartpoint ent))
    (setq dc (vlax-curve-getendpoint ent))
    (setq p1 (polar dd (+ (/ pi 2) (angle dd tam)) 1))
    (setq p2 (polar dc (+ (/ pi 2) (angle dc tam)) 1))
    (if (setq a (inters dd p1 dc p2 nil))
      (progn
        (vl-cmdf "line" dd a "")
        (vl-cmdf "line" dc a "")
(setq c (/ (* 180 (abs (- (angle dd a) (angle dc a)))) pi))
      )
    )
   ))
  (setvar "osmode" oldos)
(princ)
)
;;;;;;;;
(defun C:TS (/ ro CC CAT MD CD C D N O M I H L J AA RR KK TT PP ss)
(SETVAR "CMDECHO" 0)
 (command "-Style" "TS DUONG CONG" "arial" "0" "1" "0" "n" "")
 (command "-Layer" "n" "TS DUONG CONG" "c" "222" "TS DUONG CONG" "lw" "0.2" "TS DUONG CONG" "")
 (command "-Layer" "s" "TS DUONG CONG" "" "")
 (setq CC (getpoint "\nCHON TAM CUA DUONG TRON / Enter ket thuc "))
 (setq CAT (getreal "\nDUONG KINH DUONG TRON: ")) 
(while CC
 (command ".circle" CC "d" CAT) (vtt)
(if ss (progn
 (setq L (rtos C 2 2))
 (setq N (rtos D 2 2))
 (setq H (COS (/ (/ (* C PI) 180) 2)))       ;CONG THUC TINH GIA TRI COS(A/2)
 (setq O (/ (SIN (/ (/ (* C PI) 180) 2)) (COS (/ (/ (* C PI) 180) 2)))) ;CONG THUC TINH GIA TRI TAN(A/2)
 (setq M (rtos (* O D) 2 2))                  ;CONG THUC TINH GIA TRI T
 (setq I (rtos (* D (- (/ 1 H) 1)) 2 2))      ;CONG THUC TINH GIA TRI P
 (setq J (rtos (/ (* D C PI) 180) 2 2))       ;CONG THUC TINH GIA TRI K
 (setq AA (strcat "A=" L "'"))            ;GIA TRI A
 (setq RR (strcat "R=" N))            ;GIA TRI R
 (setq KK (strcat "K=" J))            ;GIA TRI K
 (setq TT (strcat "T=" M))            ;GIA TRI T
 (setq PP (strcat "P=" I))            ;GIA TRI P
 (setq MD (/ CAT 10))
 (setq CD (list (car CC) (+ (cadr CC) (/ CAT 3.1))))
 (command ".text" "m" CD MD 0.0 AA)   ;TEXT GIA TRI A
 (command ".text" "" RR)              ;TEXT GIA TRI R
 (command ".text" "" KK)              ;TEXT GIA TRI K
 (command ".text" "" TT)              ;TEXT GIA TRI T
 (command ".text" "" PP)              ;TEXT GIA TRI P
  (setq CC (getpoint "\nCHON TAM CUA DUONG TRON: "))
 ))
   )                                  ;dong WHILE
 (SETVAR "CMDECHO" 1)
 (PRINC)
)                                      ;KET THUC DEFUN

  • 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
Lisp của bạn rườm rà quá. Ghép lại đơn giản cho bạn đây :

-Cám ơn bác, Bác chỉnh lại một chút cho em cái giá trị A(góc) mà bác gán bằng L ở trong lisp đó . Cái góc A là góc nhỏ bác à , tức là phải trừ giá trị L đi 180 độ. bác chỉnh giúp e nhé, e chưa biêt lisp nên ko chỉnh được cái này :undecided:

CS0.9634378_1_1.jpg

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ám ơn bác, Bác chỉnh lại một chút cho em cái giá trị A(góc) mà bác gán bằng L ở trong lisp đó . Cái góc A là góc nhỏ bác à , tức là phải trừ giá trị L đi 180 độ. bác chỉnh giúp e nhé, e chưa biêt lisp nên ko chỉnh được cái này :undecided:

Chào bạn 'bachngoctung'

Bạn sửa dòng này : (setq c (/ (* 180 (abs (- (angle dd a) (angle dc a)))) pi))

thành dòng :

(setq c (- 180 (/ (* 180 (abs (- (angle dd a) (angle dc a)))) pi)))

 

@Nataca : Tue_NV nhớ không nhầm là mình đã từng viết Lisp timsong (tìm PLINE tim sông khi đã cho PLINE của 2 bên bờ sông) và bác thiep cũng đã từng viết 1 Lisp tương tự.

Và cả 3 cái Lisp của Nataca, của bác Thiep và của Tue_NV đều chưa giải quyết được 1 nhược điểm lớn : là khi Pline bờ sông có những đoạn "cua ngoặc" lớn thì Lisp chạy không còn đúng nữa. Bản vẽ của bạn thonghoang01 upload lên là 1 minh chứng

- Không biết "chiến trường" của Nataca còn "quyết liệt" và "căng thẳng" không? :blink: . Rất mong "chiến trường" của Nataca bớt 1 chút "căng thẳng" để Nataca bớt 1 chút thời gian cho 1 vài ví dụ ở topic Nhờ viết lisp thống kê bản vẽ để làm quà cho anh em CADVIET nơi phương xa

hì. Sao mà bớt 1 hoài dzậy? Phải _THÊM MỘT__ cho quân bình chứ? :blink:

Rất cảm ơn vì sự chia sẻ của Nataca và chúc bạn sức khoẻ

  • 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

Nhờ các bạn giúp mình vấn đề giải tỏa nhà với!

em làm quy hoạch và tính giải tỏa đền bù, em muốn tính tổng diện tích giải tỏa trên từng con đường và tìm xem trong đó có bao nhiêu nhà giải tỏa trắng (giải tỏa 100%) và tổng diện tích giải tỏa trắng là bao nhiêu!

Nhờ các bạn giúp dùm mình với!vì mình làm việc này với số lượng rất lớn nên rất vất vả!

Cảm ơn các bạn nhìu!

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

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
Chào bạn 'bachngoctung'

Bạn sửa dòng này : (setq c (/ (* 180 (abs (- (angle dd a) (angle dc a)))) pi))

thành dòng :

(setq c (- 180 (/ (* 180 (abs (- (angle dd a) (angle dc a)))) pi)))

-Cám ơ A Tue nhiều nhé , e sưa được ngon rồi a à . Cái dòng sửa mà a hướng dẫn thì góc của nó ra âm . Em ngồi nghịch thêm dấu trừ vào nữa là ok ( thử mãi mới đúng được cú pháp)

(setq c (- ( - 180 (/ (* 180 (abs ( - (angle dd a) ( angle dc a)))) pi))))

-Cám ơn bác :undecided: :D :D :blink: :blink:

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ám ơ A Tue nhiều nhé , e sưa được ngon rồi a à . Cái dòng sửa mà a hướng dẫn thì góc của nó ra âm . Em ngồi nghịch thêm dấu trừ vào nữa là ok ( thử mãi mới đúng được cú pháp)

(setq c (- ( - 180 (/ (* 180 (abs ( - (angle dd a) ( angle dc a)))) pi))))

-Cám ơn bác :undecided: :D :D :blink: :blink:

Sorry. mình cũng chưa kiểm tra kỹ nữa. Nhưng bạn đã sửa thì đừng sửa theo cách thêm dấu trừ đằng trước mà nên sử dụng hàm abs là hàm lấy giá trị tuyệt đối. Việc lấy giá trị tuyệt đối chắc bạn đã biết hồi khi học phổ thông

Ví dụ :

(Abs 5) -> trả về 5

(Abs -5) -> trả về 5

Như vậy thì dòng code sẽ được sửa lại như sau : Nó đúng cho mọi trường hợp

(setq c (abs ( - 180 (/ (* 180 (abs ( - (angle dd a) ( angle dc a)))) pi))))

 

@truongthanh : Theo Tue_NV nghĩ để dễ dàng và thuận tiện -> Bạn nên quản lý đối tượng bản vẽ theo Layer

đối tượng thuộc Đường hiện trạng nên để riêng 1 layer

đối tượng thuộc Đường quy hoạch nên để riêng 1 layer

Chữ NHà (NHà giải tỏa trắng) nên để riêng 1 layer

Tên đường nên để riêng 1 layer, đường bao quanh nhà giải tỏa trắng nên để riêng 1 layer và để cho nó là 1 PLINE kín để thuận lợi hơn trong quá trình tính diện tích

Bạn đừng để các đối tượng chung 1 layer như thế. Khó quản lý lắm.

Vài lời góp ý cho bản vẽ của bạn

Chúc vui

  • 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
Sorry. mình cũng chưa kiểm tra kỹ nữa. Nhưng bạn đã sửa thì đừng sửa theo cách thêm dấu trừ đằng trước mà nên sử dụng hàm abs là hàm lấy giá trị tuyệt đối. Việc lấy giá trị tuyệt đối chắc bạn đã biết hồi khi học phổ thông

Ví dụ :

(Abs 5) -> trả về 5

(Abs -5) -> trả về 5

Như vậy thì dòng code sẽ được sửa lại như sau : Nó đúng cho mọi trường hợp

(setq c (abs ( - 180 (/ (* 180 (abs ( - (angle dd a) ( angle dc a)))) pi))))

 

@truongthanh : Theo Tue_NV nghĩ để dễ dàng và thuận tiện -> Bạn nên quản lý đối tượng bản vẽ theo Layer

đối tượng thuộc Đường hiện trạng nên để riêng 1 layer

đối tượng thuộc Đường quy hoạch nên để riêng 1 layer

Chữ NHà (NHà giải tỏa trắng) nên để riêng 1 layer

Tên đường nên để riêng 1 layer, đường bao quanh nhà giải tỏa trắng nên để riêng 1 layer và để cho nó là 1 PLINE kín để thuận lợi hơn trong quá trình tính diện tích

Bạn đừng để các đối tượng chung 1 layer như thế. Khó quản lý lắm.

Vài lời góp ý cho bản vẽ của bạn

Chúc vui

Cảm ơn TUE_NV rất nhiều!Thú thật là khi mình làm Quy Hoạch mình nhận được file bản vẽ địa chính do người ta cung cấp, tất cả các nhà và đường hiện trạng đều cùng 1 layer hết, sau đó mình XREF vào bản vẽ Quy Hoạch của mình, (tất cả các nhà hiện trạng đều được vẽ bằng LINE hết)!khi mình làm Quy hoạch lúc đó mới có đường quy hoạch và lúc đó mới lòi ra nhà nào bị giải tỏa trắng.Chính vì vậy việc phân ra từng layer như TUE_NV nói thật là khó!Nhờ TUE_NV góp ý và giúp dùm mình!(những gì mà ko liên quan đến nền hiện trạng thì mình đã phân ra layer rất rõ ràng ví dụ:tên đường, đường Quy Hoạch!

Chân thành cảm ơn bạ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

Mình rất cần một lisp như sau:

Mình làm thiết kế nên có rất nhiều bảng vẽ được đánh số thứ tự như sau: T10A03001, T10A03002, T10A03003...T10A030XY. Trong đó T10A030 là ký hiệu bảng vẽ (giống nhau với mọi bảng vẽ), 2 số cuối 01, 02, 03...XY là số thứ tự bảng vẽ. Bây giờ muốn bổ xung hay bỏ bớt bảng vẽ thì số thứ tự bảng vẽ cũng thay đổi theo. Nếu làm cách thủ công là chọn từng text và sửa thì quá lâu. Nên mình nhờ các bạn viết dùm mình một lisp với tác dụng:

- Nhập lệnh.

- Nhập số cần tăng hoặc giãm. Ví dụ +4 thì tương ứng số thứ tự bảng vẽ(XY) sẻ tăng thêm +4 đơn vị (T10A03005->T10A03009) hoặc -4 thì tương ứng số thứ tự bảng vẽ sẻ bớt đi 4 đơn vị (T10A03005->T10A03001). Mặc định là tăng +1 đơn vị.

- Chọn đối tượng cần thay đổi (Mtext hoặc Text), lệnh sẽ thực thi. Chọn tiếp đối tượng cần thay đổi(nếu có). Enter hoặc ESC kết thúc lệnh.

Xin cảm ơn các bạn rất 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
Mình rất cần một lisp như sau:

Mình làm thiết kế nên có rất nhiều bảng vẽ được đánh số thứ tự như sau: T10A03001, T10A03002, T10A03003...T10A030XY. Trong đó T10A030 là ký hiệu bảng vẽ (giống nhau với mọi bảng vẽ), 2 số cuối 01, 02, 03...XY là số thứ tự bảng vẽ. Bây giờ muốn bổ xung hay bỏ bớt bảng vẽ thì số thứ tự bảng vẽ cũng thay đổi theo. Nếu làm cách thủ công là chọn từng text và sửa thì quá lâu. Nên mình nhờ các bạn viết dùm mình một lisp với tác dụng:

- Nhập lệnh.

- Nhập số cần tăng hoặc giãm. Ví dụ +4 thì tương ứng số thứ tự bảng vẽ(XY) sẻ tăng thêm +4 đơn vị (T10A03005->T10A03009) hoặc -4 thì tương ứng số thứ tự bảng vẽ sẻ bớt đi 4 đơn vị (T10A03005->T10A03001). Mặc định là tăng +1 đơn vị.

- Chọn đối tượng cần thay đổi (Mtext hoặc Text), lệnh sẽ thực thi. Chọn tiếp đối tượng cần thay đổi(nếu có). Enter hoặc ESC kết thúc lệnh.

Xin cảm ơn các bạn rất nhiều.

mình thì ko biết có lisp như bạn cần ko, nhưng nếu bạn đang gấp thì có thể làm theo 3 bước như sau:

Bước 1:bạn dùng LISP thêm bớt text bỏ đi các ký tự phía trước, chỉ chừa lại 2 số cuối (XY). http://www.cadviet.com/forum/index.php?showtopic=6991

Bước 2:bạn dùng LISP cộng trừ nhân chia text của bạn THAISTREETZ http://www.cadviet.com/forum/index.php?sho...3203&st=100 bài viết #105.

Bước 3:làm ngược lại bước 1 là thêm lại chuỗi text đã bỏ.

Còn tổng hợp 3 bước này lại thành 1 lisp thì nhờ các cao thủ của chúng ta ra tay!

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
mình thì ko biết có lisp như bạn cần ko, nhưng nếu bạn đang gấp thì có thể làm theo 3 bước như sau:

Bước 1:bạn dùng LISP thêm bớt text bỏ đi các ký tự phía trước, chỉ chừa lại 2 số cuối (XY). http://www.cadviet.com/forum/index.php?showtopic=6991

Bước 2:bạn dùng LISP cộng trừ nhân chia text của bạn THAISTREETZ http://www.cadviet.com/forum/index.php?sho...3203&st=100 bài viết #105.

Bước 3:làm ngược lại bước 1 là thêm lại chuỗi text đã bỏ.

Còn tổng hợp 3 bước này lại thành 1 lisp thì nhờ các cao thủ của chúng ta ra tay!

Thân!

Cảm ơn truongthanh, nhưng mình thấy nếu có một lisp nào đó duy nhất thì hay biết mấy. Chỉ cần nhấp chuột là đối tượng tự thay đổi. Mình đang mày mò học về lisp, hy vọng sẽ làm được. 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
Cảm ơn truongthanh, nhưng mình thấy nếu có một lisp nào đó duy nhất thì hay biết mấy. Chỉ cần nhấp chuột là đối tượng tự thay đổi. Mình đang mày mò học về lisp, hy vọng sẽ làm được. Cảm ơn!

Bạn thử code Lisp này nhé :

(defun c:dstt(/ ss delta ob chuoi chdau chcuoi)
(vl-load-com)
;; copyright by Tue_NV
(setq ss (ssget "X" (list(cons 0 "*TEXT") (cons 1 "T10A030*"))) i -1)
(setq delta (getint "\n so tang giam :"))
(while (setq ent (ssname ss (setq i (1+ i))))
(setq ob (vlax-ename->vla-object ent))
(setq chuoi (vlax-get ob 'textstring))
(setq chdau "T10A030")
(setq chcuoi (atoi (substr chuoi (1+ (strlen chdau)) (strlen chuoi))))
  (if (and (>= (+ chcuoi delta) 0) (	(vlax-put ob 'textstring (strcat chdau "0" (itoa (+ chcuoi delta))))
  )
  (if (> (+ chcuoi delta) 9)
(vlax-put ob 'textstring (strcat chdau (itoa (+ chcuoi delta))))
  )
)
(princ)
)

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ảm ơn TUE_NV rất nhiều!Thú thật là khi mình làm Quy Hoạch mình nhận được file bản vẽ địa chính do người ta cung cấp, tất cả các nhà và đường hiện trạng đều cùng 1 layer hết, sau đó mình XREF vào bản vẽ Quy Hoạch của mình, (tất cả các nhà hiện trạng đều được vẽ bằng LINE hết)!khi mình làm Quy hoạch lúc đó mới có đường quy hoạch và lúc đó mới lòi ra nhà nào bị giải tỏa trắng.Chính vì vậy việc phân ra từng layer như TUE_NV nói thật là khó!Nhờ TUE_NV góp ý và giúp dùm mình!(những gì mà ko liên quan đến nền hiện trạng thì mình đã phân ra layer rất rõ ràng ví dụ:tên đường, đường Quy Hoạch!

Chân thành cảm ơn bạn!

nhờ TUE_NV xem xét và giúp đỡ mình với!thanks 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
Cảm ơn TUE_NV rất nhiều!Thú thật là khi mình làm Quy Hoạch mình nhận được file bản vẽ địa chính do người ta cung cấp, tất cả các nhà và đường hiện trạng đều cùng 1 layer hết, sau đó mình XREF vào bản vẽ Quy Hoạch của mình, (tất cả các nhà hiện trạng đều được vẽ bằng LINE hết)!khi mình làm Quy hoạch lúc đó mới có đường quy hoạch và lúc đó mới lòi ra nhà nào bị giải tỏa trắng.Chính vì vậy việc phân ra từng layer như TUE_NV nói thật là khó!Nhờ TUE_NV góp ý và giúp dùm mình!(những gì mà ko liên quan đến nền hiện trạng thì mình đã phân ra layer rất rõ ràng ví dụ:tên đường, đường Quy Hoạch!

Chân thành cảm ơn bạn!

Truong thanh upload lại file bạn đã thể hiện nhé.

Bạn nói rõ dữ liệu input (đầu vào) bạn nhập vào những gì?? Kết quả output (xuất ra) theo ý của bạn. Bạn nên upload khoảng 3 hoặc 4 con đường để kiểm chứng nhé. Bạn thể hiện rõ ràng, chi tiết trong file .dwg rồi upload lên luôn. Thấy trong file cũ vừa rồi truongthanh upload lên sơ sài lắm đó, chẳng hiểu được cái "mong muốn" của bạn là gì nữa??

Tue_NV không biết có giúp được không vì thời gian này mình rất bận. Nhưng chắc sẽ có các bác trên diễn đàn giúp cho bạn mà.

Vậy nhé.

  • 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
Truong thanh upload lại file bạn đã thể hiện nhé.

Bạn nói rõ dữ liệu input (đầu vào) bạn nhập vào những gì?? Kết quả output (xuất ra) theo ý của bạn. Bạn nên upload khoảng 3 hoặc 4 con đường để kiểm chứng nhé. Bạn thể hiện rõ ràng, chi tiết trong file .dwg rồi upload lên luôn. Thấy trong file cũ vừa rồi truongthanh upload lên sơ sài lắm đó, chẳng hiểu được cái "mong muốn" của bạn là gì nữa??

Tue_NV không biết có giúp được không vì thời gian này mình rất bận. Nhưng chắc sẽ có các bác trên diễn đàn giúp cho bạn mà.

Vậy nhé.

Mình gửi file khác lên nhờ bạn xem dùm nhé!nếu bản vẽ phức tạp hay cần phải theo 1 quy định nào đó để tính toán được thì bạn đưa ra ý kiến nhé!

thanks bạn rất nhiều!

http://www.cadviet.com/upfiles/2/1_8.dwg

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 gửi file khác lên nhờ bạn xem dùm nhé!nếu bản vẽ phức tạp hay cần phải theo 1 quy định nào đó để tính toán được thì bạn đưa ra ý kiến nhé!

thanks bạn rất nhiều!

http://www.cadviet.com/upfiles/2/1_8.dwg

 

Thêm một bài toán “Thống kê”

Autolisp có thể giải quyết được nhưng xem ra cũng “khê cơm” lắm! :undecided:

 

Những gì truongthanh mong muốn không đủ cơ sở để máy tính hiểu

Cho nên cần phải thêm một vài công đoạn mới có thể tính toán được

 

Một nguyên tắc để thống kê tức là những gì cần thống kê phải được vẽ phải chính xác

Muốn tính diện tích giải tỏa thì ít ra phải là các đối tượng như: Polyline, Polygon, Circle,…

Như vậy việc đầu tiên của bạn là dung lệnh Bo (Boundary) xác định phần diện tích của mỗi nhà sẽ bị giải tỏa khi mở đường

 

(Xong bước này, Tìm kiếm Lisp trên diễn đàn về tính diện tích Polyline là có thể đối phó được rồi)!

 

Tiếp theo, phải cho thêm một số thông tin cho Polyline vừa tạo:

- Ký hiệu (1,2,3,…)

- Giải tỏa trắng hay giải tỏa một phần

- Đơn giá đền bù/ m2

- Tổng tiền = Diện tích x Đơn giá

Nếu chi tiết một chút bạn có thể thêm thông tin (Tên chủ nhà, địa chỉ,…)

 

Sau đó, là lập bảng và tính tổng diện tích bị giải tỏa

 

Cuối cùng muốn làm được những điều trên phải dung ACA

Không thì bạn ráng chờ các cao thủ Lisp giải quyết vậy!

  • 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
Chào Tue_NV!

Có vấn đề này nhờ bạn giúp mình

Mình có một loạt các block vật tư như: van, tê, cút... trên 1bản vẽ CAD

Mình thống kê thủ công dễ bị nhầm lẫn và thiếu vật tư nữa nên mình muốn một lisp thống kê Block cụ thể như:

có 4 cột và kẻ khung như sau:

Stt Tên vật tư Đơn vị tính Số lượng

1 van cái 01

 

Khi đánh lệnh, lisp tự động tìm các block hiện hành và thống kê như mẫu trên

Cảm ơn bạn nhiều.

(Mình đã tìm rất nhiều các lisp trên diễn đàn nhưng không có cái nào phù hợp cả)

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

Update : http://www.cadviet.com/forum/index.php?sho...ost&p=93700

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 muốn nhờ các bác làm hộ cái lisp khi mà mình fillet 2 đường thì phần đườngthằngmới tạo ra để fillet là line khác (chứ ko phải là 2 đường cũ) layer có thể là layer hiện thời, chứ ko phải là layer của 2 đường gôc

 

3L0.9692507_1_1.png

 

Cảm ơn các bác 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
Mình gửi file khác lên nhờ bạn xem dùm nhé!nếu bản vẽ phức tạp hay cần phải theo 1 quy định nào đó để tính toán được thì bạn đưa ra ý kiến nhé!

thanks bạn rất nhiều!

http://www.cadviet.com/upfiles/2/1_8.dwg

Mình kg xem đc cả 2 file của bạn. vấn đề bạn đề cập cũng dễ hiểu. Tuy nhiên xử lý vđ này bạn cần phải chuyên nghiệp (cad làm đc nhưng phải đầu tư nghiêm túc).

về BĐ địa chính người ta vẫn phân lớp rõ ràng chứ kg nhập lại thành 1 layer như của bạn. Bạn có thể làm ở mức đơn giản như sau :

- Sử dụng lệnh tính diện tích bằng 1 cái Pick (đã có trên diễn đàn)

- Tạo block có thuộc tính là STT và diện tích vừa tính

Sau đó Pick vào từng hình bạn muốn tính diện tích (tăng STT sau mỗi lần Pick) và dùng cad để thống kê

(Mình kg giúp bạn viết thành Lisp đc vì mình kg có thời gian và mình cũng kg nhở các kiến thức trên. Bạn có thể tự viết hoặc nhờ các bạn khác viết nhé)

  • 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.

×