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

Hướng dẫn lập trình Lisp

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

Bác gia_bach đang đá xoáy em nhé ^^

@Bạn TRUNGNGAMY : mình chỉ replace thôi chứ có thấy gì lạ đâu hè ?

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ột yêu cầu khá là "ngộ" !

Vđ này các bạn đã gặp và đã giúp rất nhiều anh em trắc địa rồi mà các bạn kg để ý đấy thôi. Trong CT in Hồ sơ kỹ thuật thửa đất do cadviet viết, thường tọa độ làm tròn đến 2 số lẽ (tức đơn vị cm). Nếu ta chỉ làm tròn trên tọa độ in ra bảng mà kg làm tròn ngay bản thân cái polyline gốc thì sẽ có sai lệch diện tích, vì dụ khi bạn kg có file mà phải nhập lại bảng tọa độ đó. Trong ngành địa chính cũng sd tọa độ đỉnh thửa đất đến cm thôi

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

Vđ này các bạn đã gặp và đã giúp rất nhiều anh em trắc địa rồi mà các bạn kg để ý đấy thôi. Trong CT in Hồ sơ kỹ thuật thửa đất do cadviet viết, thường tọa độ làm tròn đến 2 số lẽ (tức đơn vị cm). Nếu ta chỉ làm tròn trên tọa độ in ra bảng mà kg làm tròn ngay bản thân cái polyline gốc thì sẽ có sai lệch diện tích, vì dụ khi bạn kg có file mà phải nhập lại bảng tọa độ đó. Trong ngành địa chính cũng sd tọa độ đỉnh thửa đất đến cm thôi

hà hà, bây giờ thì mình đã hiểu. từ hôm đến giờ cứ thắc mắc mãi không hiểu bạn muốn làm điều đó vì mục đích gì :lol:

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 ơi cho e hỏi về bài toán này chút :

Chẳng là e muốn chia đôi 1/nhiều thằng Dim bằng 1 Line như hình vẽ bên dưới

capturenq.jpg

Ý tưởng là e định:

- Phá dim ra

- Lấy entget thằng chân dim dựa vào handle so với handle của entlast (text dim)

- Lấy inters của Line cắt với line chân dim này, rồi break nó thành 2 / hoặc vẽ lại 2 nửa đoạn thẳng chân dim

- Lại dựa vào handle để lấy entget của 2 đường thẳng vừa bị break ( bỏ nếu vẽ lại đường thẳng )

- Move các phần bên trái dịch sang trái, phải dịch sang phải, copy text sang bên thiếu

 

E thấy nó tối tăm và dài dòng quá, liệu tạo lại 2 nửa như thế có nhanh hơn không nhỉ?Hay dùng thủ thuật nào hay hơn ?

Mọi người góp ý hộ e với :(

P/S : nếu để nguyên Dim mà không phá ra, e cũng không tìm được 1 cách hiểu trực quan 2 điểm intersec của Dim và đường thẳng cắt. E mường tượng là nó cắt ở 2 điểm giao với "đường bao" tưởng tượng của block Dim, nhưng lạ là vì khi Line cắt thẳng đứng, tọa độ x của 2 điểm này lại khác nhau @@, mong các bác chỉ giúp.

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 ơi cho e hỏi về bài toán này chút :

Chẳng là e muốn chia đôi 1/nhiều thằng Dim bằng 1 Line như hình vẽ bên dưới

capturenq.jpg

Ý tưởng là e định:

- Phá dim ra

- Lấy entget thằng chân dim dựa vào handle so với handle của entlast (text dim)

- Lấy inters của Line cắt với line chân dim này, rồi break nó thành 2 / hoặc vẽ lại 2 nửa đoạn thẳng chân dim

- Lại dựa vào handle để lấy entget của 2 đường thẳng vừa bị break ( bỏ nếu vẽ lại đường thẳng )

- Move các phần bên trái dịch sang trái, phải dịch sang phải, copy text sang bên thiếu

 

E thấy nó tối tăm và dài dòng quá, liệu tạo lại 2 nửa như thế có nhanh hơn không nhỉ?Hay dùng thủ thuật nào hay hơn ?

Mọi người góp ý hộ e với :(

P/S : nếu để nguyên Dim mà không phá ra, e cũng không tìm được 1 cách hiểu trực quan 2 điểm intersec của Dim và đường thẳng cắt. E mường tượng là nó cắt ở 2 điểm giao với "đường bao" tưởng tượng của block Dim, nhưng lạ là vì khi Line cắt thẳng đứng, tọa độ x của 2 điểm này lại khác nhau @@, mong các bác chỉ giúp.

Có phải như thế này không: COPY DIM lên chính nó, sau đó TRIM mỗi DIM 1 lần về 2 phía của đường cắ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

Các bác ơi cho e hỏi về bài toán này chút :

Chẳng là e muốn chia đôi 1/nhiều thằng Dim bằng 1 Line như hình vẽ bên dưới

capturenq.jpg

Ý tưởng là e định:

- Phá dim ra

- Lấy entget thằng chân dim dựa vào handle so với handle của entlast (text dim)

- Lấy inters của Line cắt với line chân dim này, rồi break nó thành 2 / hoặc vẽ lại 2 nửa đoạn thẳng chân dim

- Lại dựa vào handle để lấy entget của 2 đường thẳng vừa bị break ( bỏ nếu vẽ lại đường thẳng )

- Move các phần bên trái dịch sang trái, phải dịch sang phải, copy text sang bên thiếu

 

E thấy nó tối tăm và dài dòng quá, liệu tạo lại 2 nửa như thế có nhanh hơn không nhỉ?Hay dùng thủ thuật nào hay hơn ?

Mọi người góp ý hộ e với :(

P/S : nếu để nguyên Dim mà không phá ra, e cũng không tìm được 1 cách hiểu trực quan 2 điểm intersec của Dim và đường thẳng cắt. E mường tượng là nó cắt ở 2 điểm giao với "đường bao" tưởng tượng của block Dim, nhưng lạ là vì khi Line cắt thẳng đứng, tọa độ x của 2 điểm này lại khác nhau @@, mong các bác chỉ giúp.

ketxu post bài thế nào mà không thấy hình(image) ?!

Có mỗi con ếch-nhái gì đó làm sao góp ý.

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ó phải như thế này không: COPY DIM lên chính nó, sau đó TRIM mỗi DIM 1 lần về 2 phía của đường cắt?

Mình cũng đã nghĩ đến phương án đó.Nói thì nhanh vậy thôi nhưng mình nghĩ vẫn sẽ phải mần tương đối nhiều bước để trim được :( Dim để nguyên mình không biết cách trim.Phá ra rồi trim thì lại đi theo trình tự như trên :(

 

ketxu post bài thế nào mà không thấy hình(image) ?!

Có mỗi con ếch-nhái gì đó làm sao góp ý.

Híc, sao e lại nhìn thấy rõ nhỉ.Chắc bọn Imageshack nó làm tiền e ^^ Các bác xem bằng hình bên dưới hộ e với nhé

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

Mình cũng đã nghĩ đến phương án đó.Nói thì nhanh vậy thôi nhưng mình nghĩ vẫn sẽ phải mần tương đối nhiều bước để trim được :( Dim để nguyên mình không biết cách trim.Phá ra rồi trim thì lại đi theo trình tự như trên :(

 

 

Híc, sao e lại nhìn thấy rõ nhỉ.Chắc bọn Imageshack nó làm tiền e ^^ Các bác xem bằng hình bên dưới hộ e với nhé

Capture.jpg

Imageshack đòi Login mới cho đọc file image.

 

Từ Cad 2008 có lệnh DIMBREAK cho phép break đuờng dimension nhưng k/quả chỉ hiển thị 1 giá trị TEXT.

  • 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 bác ssg nhiều lắm. Thú thật là em cũng mới biết đến Autolisp thời gian gần đây và cũng muốn học cho biết nhưng ko có sư phụ, đọc sách thì không hiểu. Chúc bác ssg và anh em cadviet.com mạnh khoẻ và công hiến cho diễn đàn với tinh thần "share is receive". 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

Chào cả nhà, mình đang rất cần tư vấn về vấn đề liệu lisp có lệnh tìm giao điểm giữa mặt (3D Face)

va đường (LWpolyline có Z=/0) không ? mọi người gúp mình nhé.

(Mình đã nêu vấn đề này bên mục "Viết Lisp theo yêu cầu phần 2" mà không ai phản hồi cả, buồn quá) !

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 cả nhà, mình đang rất cần tư vấn về vấn đề liệu lisp có lệnh tìm giao điểm giữa mặt (3D Face)

va đường (LWpolyline có Z=/0) không ? mọi người gúp mình nhé.

(Mình đã nêu vấn đề này bên mục "Viết Lisp theo yêu cầu phần 2" mà không ai phản hồi cả, buồn quá) !

Lisp không có LỆNH bạn à :) Và nếu giải câu hỏi bạn đưa ra trong 1 ngày chưa có đáp án, hãy chịu khó chờ thêm...1,2 ngày nữa trước khi vội vàng up double vấn đề của mình. Ai cũng cần suy nghĩ mà :)

  • 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 cả nhà, mình đang rất cần tư vấn về vấn đề liệu lisp có lệnh tìm giao điểm giữa mặt (3D Face)

va đường (LWpolyline có Z=/0) không ? mọi người gúp mình nhé.

(Mình đã nêu vấn đề này bên mục "Viết Lisp theo yêu cầu phần 2" mà không ai phản hồi cả, buồn quá) !

Cái này mình đã tìm giúp bạn và cũng đã thử dùng intersectwith nhưng không được nó không có tác dụng trong không gian 3D. Có lẽ sẽ có người khác giải đáp thắc mắc giúp bạ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 tất cả các Bác, chắc ý tưởng này cụt đường rồi.

mình đã ấp ủ từ lâu rồi chứ không như bác "Ketxu" kết luận đâu, còn

Lisp không có LỆNH sao lại có (Command... ?

Bác cứ đùa em.

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 tất cả các Bác, chắc ý tưởng này cụt đường rồi.

mình đã ấp ủ từ lâu rồi chứ không như bác "Ketxu" kết luận đâu, còn

Lisp không có LỆNH sao lại có (Command... ?

Bác cứ đùa em.

Hề hề hề,

Thực ra vấn đề của bạn nêu ra hơi phức tạp. Với các bề mặt phẳng và các LWpolyline thì mình đã có giải pháp là sử dụng các phép tính trong hình học giải tích. Còn với các mặt bậc cao và các đường cong phi tuyến thì chưa có các công thức giải tích phù hợp nên chưa thể trả lời bạn được. Bạn chớ nóng, hy vọng sẽ có người tìm ra giải pháp hữu hiệu giúp bạn.

Hề hề hề.

  • 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 tất cả các Bác, chắc ý tưởng này cụt đường rồi.

mình đã ấp ủ từ lâu rồi chứ không như bác "Ketxu" kết luận đâu, còn

Lisp không có LỆNH sao lại có (Command... ?

Bác cứ đùa em.

Command cũng là 1 biểu thức trả về Nil đó chứ :)

Nếu ấp ủ từ lâu mà chưa tìm ra được câu trả lời, thì bạn càng cần cho CV member thời gian tìm hiểu vấn đề của bạn, đúng hok :)

Bạn ngó qua đây xem bác gile trả lời :

Line - 3dface

  • 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

Nhờ các bác xem giùm cách sử dụng initget:

Chỗ nhập đường kính thép mình muốn mặc định là 25 chỉ việc enter là sẽ hiểu nhưng lại không được,mong các bác xem lại cấu trúc giùm e.

(initget 1 "D B")
 	(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq  	p1 (getpoint "\nDiem chen:")
	l1 (getreal "\nBe rong mong:")
	l2 (getreal "\nBe rong co mong:")
	l3 (/ (- l1 l2) 2)
	h1 (getreal "\nChieu cao ben mong:")
	h2 (getreal "\nChieu cao phan nghieng:")
	h3 (getreal "\nChieu cao co mong:")
	bv (getreal "\nBe day lop bao ve:")
               (setq dkt 25)
       (initget 6)
       (setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
       (if (null d) (setq d dkt))
	n (getint "\nS.luong thep day mong:")
)

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ác xem giùm cách sử dụng initget:

Chỗ nhập đường kính thép mình muốn mặc định là 25 chỉ việc enter là sẽ hiểu nhưng lại không được,mong các bác xem lại cấu trúc giùm e.

 

Bạn thiếu hàm setq ở truớc n (getint "\nS.luong thep day mong:")

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 thiếu hàm setq ở truớc n (getint "\nS.luong thep day mong:")

Hình như không phải đâu bạn ơi.Mình làm như bạn nói vẫn không được:

(initget 1 "D B")
 	(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq  	p1 (getpoint "\nDiem chen:")
	l1 (getreal "\nBe rong mong:")
	l2 (getreal "\nBe rong co mong:")
	l3 (/ (- l1 l2) 2)
	h1 (getreal "\nChieu cao ben mong:")
	h2 (getreal "\nChieu cao phan nghieng:")
	h3 (getreal "\nChieu cao co mong:")
	bv (getreal "\nBe day lop bao ve:")
               (setq dkt 25)
       (initget 6)
       (setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
       (if (null d) (setq d dkt))
	(getq n (getint "\nS.luong thep day mong:")
)

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

Hình như không phải đâu bạn ơi.Mình làm như bạn nói vẫn không được:

(initget 1 "D B")
 	(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq  	p1 (getpoint "\nDiem chen:")
	l1 (getreal "\nBe rong mong:")
	l2 (getreal "\nBe rong co mong:")
	l3 (/ (- l1 l2) 2)
	h1 (getreal "\nChieu cao ben mong:")
	h2 (getreal "\nChieu cao phan nghieng:")
	h3 (getreal "\nChieu cao co mong:")
	bv (getreal "\nBe day lop bao ve:")
               (setq dkt 25)
       (initget 6)
       (setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
       (if (null d) (setq d dkt))
	(getq n (getint "\nS.luong thep day mong:")
)

Setq chứ không phải getq 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

Setq chứ không phải getq bạn ạ

Cảm ơn bạn,mình lộn,đã sửa lại nhưng sau khi nhập Bề rộng cổ móng thì nó báo:; error: bad argument type: numberp: nil.Mong các bác chỉ giúp.Thanks.

(initget 1 "D B")
 	(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq  	p1 (getpoint "\nDiem chen:")
	l1 (getreal "\nBe rong mong:")
	l2 (getreal "\nBe rong co mong:")
	l3 (/ (- l1 l2) 2)
	h1 (getreal "\nChieu cao ben mong:")
	h2 (getreal "\nChieu cao phan nghieng:")
	h3 (getreal "\nChieu cao co mong:")
	bv (getreal "\nBe day lop bao ve:")
               (setq dkt 25)
       (initget 6)
       (setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
       (if (null d) (setq d dkt))
	(setq n (getint "\nS.luong thep day mong:")
)


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ạn,mình lộn,đã sửa lại nhưng sau khi nhập Bề rộng cổ móng thì nó báo:; error: bad argument type: numberp: nil.Mong các bác chỉ giúp.Thanks.

(initget 1 "D B")
 	(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq  	p1 (getpoint "\nDiem chen:")
	l1 (getreal "\nBe rong mong:")
	l2 (getreal "\nBe rong co mong:")
	l3 (/ (- l1 l2) 2)
	h1 (getreal "\nChieu cao ben mong:")
	h2 (getreal "\nChieu cao phan nghieng:")
	h3 (getreal "\nChieu cao co mong:")
	bv (getreal "\nBe day lop bao ve:")
               (setq dkt 25)
       (initget 6)
       (setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
       (if (null d) (setq d dkt))
	(setq n (getint "\nS.luong thep day mong:")
)


Bạn xem lại ( và )

Bạn mở hàm bằng ( thì Kết thúc hàm nào thì phải ) hàm đó.

Bạn mắc phải cái lỗi là : Mở ngoặc 1 hàm nào đó, bạn chưa đóng ngoặc hàm đó, mà bạn lại mở ngoặc cho hàm khác => Thành ra bị lỗi.

Cái lỗi này Tue_NV hy vọng bạn tự sửa được

Chúc 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

Mới nhìn qua đã thấy bạn thiếu dấu đóng ngoặc cho dãy setq rồi. Lisp thì không thể vội được bạn ơi

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 lại như vầy rồi mà vẫn báo lỗi như cũ:

(initget 1 "D B") (setq res (getkword "\n<M.BANG/M.DON><B/D>:")) (setq p1 (getpoint "\nDiem chen:") l1 (getreal "\nBe rong mong:") l2 (getreal "\nBe rong co mong:") l3 (/ (- l1 l2) 2) h1 (getreal "\nChieu cao ben mong:") h2 (getreal "\nChieu cao phan nghieng:") h3 (getreal "\nChieu cao co mong:") bv (getreal "\nBe day lop bao ve:") (setq dkt 25) (initget 6) (setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: "))) (if (null d) (setq d dkt)) (setq n (getint "\nS.luong thep day mong:")) )

Mong các bác giúp đỡ,chập chững tìm hiểu nên chưa biết hết.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

Mình đã sửa lại như vầy rồi mà vẫn báo lỗi như cũ:

(initget 1 "D B") (setq res (getkword "\n<M.BANG/M.DON><B/D>:")) (setq p1 (getpoint "\nDiem chen:") l1 (getreal "\nBe rong mong:") l2 (getreal "\nBe rong co mong:") l3 (/ (- l1 l2) 2) h1 (getreal "\nChieu cao ben mong:") h2 (getreal "\nChieu cao phan nghieng:") h3 (getreal "\nChieu cao co mong:") bv (getreal "\nBe day lop bao ve:") (setq dkt 25) (initget 6) (setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: "))) (if (null d) (setq d dkt)) (setq n (getint "\nS.luong thep day mong:")) )

Mong các bác giúp đỡ,chập chững tìm hiểu nên chưa biết hết.Thanks.

Như vầy là như nào ??? Mình thấy bạn âm thầm thêm dấu ngoặc ở cuối hàm, trong khi các hàm setq thì lại không đóng ngoặc.Bạn nên thêm cái dấu đóng ngoặc đằng sau chỗ đặt bv = Bề dày lớp bảo vệ đi ^^ Bạn không để ý lời bác Tuệ rồi :)

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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×