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ị

Em đã tìm ra trên diễn đàn rùi, Bác NATACA quá giỏi, Bác thật là tuyệt.

đây là đạon code của bác NATCA:

 

;*******************************************************************************

 

;* WRITTEN BY DAO NGUYEN THANG 94X3 - HANOI ARCHITECTURAL UNIVERSITY (VIETNAM) *

;*******************************************************************************

 

(defun myerror (s) ; If an error (such as CTRL-C) occurs

; while this command is active...

(cond

((= s "quit / exit abort") (princ))

((/= s "Function cancelled") (princ (strcat "\nError: " s)))

)

(setvar "cmdecho" CMD) ; Restore saved modes

(setvar "osmode" OSM)

(setq *error* OLDERR) ; Restore old *error* handler

(princ)

)

;*******************************************************************************

 

(DEFUN C:CD (/ CMD SS LTH DEM PT DS KDL N70 GOCX GOCY PT13 PT14 PTI PT13I PT14I

PT13N PT14N O13 O14 N13 N14 OSM OLDERR PT10 PT11)

(SETQ CMD (GETVAR "CMDECHO"))

(SETQ OSM (GETVAR "OSMODE"))

(SETQ OLDERR *error*

*error* myerror)

(PRINC "Please select dimension object!")

(SETQ SS (SSGET))

(SETVAR "CMDECHO" 0)

(SETQ PT (reverse (cdr (reverse (GETPOINT "Point to trim or extend:")))))

(SETQ PT (TRANS PT 1 0))

(COMMAND "UCS" "W")

(SETQ LTH (SSLENGTH SS))

(SETQ DEM 0)

(WHILE (< DEM LTH)

(PROGN

(SETQ DS (ENTGET (SSNAME SS DEM)))

(SETQ KDL (CDR (ASSOC 0 DS)))

(IF (= "DIMENSION" KDL)

(PROGN

(SETQ PT10 (reverse (cdr (reverse (CDR (ASSOC 10 DS))))))

(SETQ PT11 (reverse (cdr (reverse (CDR (ASSOC 11 DS))))))

(SETQ PT13 (reverse (cdr (reverse (CDR (ASSOC 13 DS))))))

(SETQ PT14 (reverse (cdr (reverse (CDR (ASSOC 14 DS))))))

(SETQ N70 (CDR (ASSOC 70 DS)))

(IF (OR (= N70 0) (= N70 32) (= N70 33) (= N70 160) (= N70 161))

(PROGN

(SETQ GOCY (ANGLE PT10 PT14))

(SETQ GOCX (+ GOCY (/ PI 2)))

)

)

(SETVAR "OSMODE" 0)

(SETQ PTI (POLAR PT GOCX 2))

(SETQ PT13I (POLAR PT13 GOCY 2))

(SETQ PT14I (POLAR PT14 GOCY 2))

(SETQ PT13N (INTERS PT PTI PT13 PT13I NIL))

(SETQ PT14N (INTERS PT PTI PT14 PT14I NIL))

(SETQ O13 (ASSOC 13 DS))

(SETQ O14 (ASSOC 14 DS))

(SETQ N13 (CONS 13 PT13N))

(SETQ N14 (CONS 14 PT14N))

(SETQ DS (SUBST N13 O13 DS))

(SETQ DS (SUBST N14 O14 DS))

(ENTMOD DS)

)

)

(SETQ DEM (+ DEM 1))

)

)

(COMMAND "UCS" "P")

(SETVAR "CMDECHO" CMD)

(SETVAR "OSMODE" OSM)

(setq *error* OLDERR) ; Restore old *error* handler

(PRINC)

)

;******************************************************************************

 

(DEFUN C:sd (/ CMD SS LTH DEM PT DS KDL N70 GOCX GOCY PT13 PT14 PTI

PT10 PT10I PT10N O10 N10 PT11 PT11N O11 N11 KC OSM OLDERR)

(SETQ CMD (GETVAR "CMDECHO"))

(SETQ OSM (GETVAR "OSMODE"))

(SETQ OLDERR *error*

*error* myerror)

(PRINC "Please select dimension object!")

(SETQ SS (SSGET))

(SETVAR "CMDECHO" 0)

(SETQ PT (reverse (cdr (reverse (GETPOINT "Point to trim or extend:")))))

(SETQ PT (TRANS PT 1 0))

(COMMAND "UCS" "W")

(SETQ LTH (SSLENGTH SS))

(SETQ DEM 0)

(WHILE (< DEM LTH)

(PROGN

(SETQ DS (ENTGET (SSNAME SS DEM)))

(SETQ KDL (CDR (ASSOC 0 DS)))

(IF (= "DIMENSION" KDL)

(PROGN

(SETQ PT13 (reverse (cdr (reverse (CDR (ASSOC 13 DS))))))

(SETQ PT14 (reverse (cdr (reverse (CDR (ASSOC 14 DS))))))

(SETQ PT10 (reverse (cdr (reverse (CDR (ASSOC 10 DS))))))

(SETQ PT11 (reverse (cdr (reverse (CDR (ASSOC 11 DS))))))

(SETQ N70 (CDR (ASSOC 70 DS)))

(IF (OR (= N70 0) (= N70 32) (= N70 33) (= N70 160) (= N70 161))

(PROGN

(SETQ GOCY (ANGLE PT10 PT14))

(SETQ GOCX (+ GOCY (/ PI 2)))

)

)

(SETVAR "OSMODE" 0)

(SETQ PTI (POLAR PT GOCX 2))

(SETQ PT10I (POLAR PT10 GOCY 2))

(SETQ PT10N (INTERS PT PTI PT10 PT10I NIL))

(SETQ KC (DISTANCE PT10 PT10N))

(SETQ O10 (ASSOC 10 DS))

(SETQ N10 (CONS 10 PT10N))

(SETQ DS (SUBST N10 O10 DS))

(SETQ PT11N (POLAR PT11 (ANGLE PT10 PT10N) KC))

(SETQ O11 (ASSOC 11 DS))

(SETQ N11 (CONS 11 PT11N))

(SETQ DS (SUBST N11 O11 DS))

(ENTMOD DS)

)

)

(SETQ DEM (+ DEM 1))

)

)

(COMMAND "UCS" "P")

(SETVAR "CMDECHO" CMD)

(SETVAR "OSMODE" OSM)

(setq *error* OLDERR)

(PRINC)

)

 

CÁM ƠN BÁC VÀ CÁC ANH EM TRÊN CAD VIỆ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
em xuất từ GPS ra file autocad thì các điểm định vị P001, P002, P003... là các block thuộc tính. nhờ các bác viết giúp em lisp chuyển từ block này thành các text có nội dung tương ứng. ví dụ: P514 thành 514. Em gửi kèm file để các bác làm giúp. Xin cảm ơn!

http://www.cadviet.com/upfiles/3/test_2.dwg

Chào bạn quynhnn,

Mình đã xem file của bạn gửi, trong đó cái block point của bạn chứa tới gần hai chục attref . hầu hết trong số chúng được lấy giá trị mặc định. Tuy nhiên mình chưa rõ là cái bạn cần ra sao. Bạn có thể post cái kết quả bạn cần như thế nào lên được không vì quả thực mình không biết nên bỏ hay nên lấy thuộc tính nào trong cái mớ thuộc tính này bạn ạ.

Nếu có thể bạn nên post file ở dạng CAD2004 sẽ có nhiều người đọc được hơn bạn 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
Chào bạn Phamngoctukts.

Bạn thử nghiên cứu cái hàm này xem sao, nó trả về vecto pháp tuyến của đường cong tại vị trí đang xét

vlax-curve-getSecondDeriv Function

 

 

Returns the second derivative (in WCS) of a curve at the specified location

 

(vlax-curve-getSecondDeriv curve-obj param)

 

Arguments

 

curve-obj

 

The VLA-object to be measured.

 

param

 

A number specifying a parameter on the curve.

 

Return Values

 

A 3D vector list, if successful; otherwise nil.

 

Examples

 

For the following example, assume that splineObj points to the spline shown in the example of the vlax-curve-getDistAtParam function.

 

Obtain the start parameter of the curve:

 

_$ (setq startSpline (vlax-curve-getStartParam splineObj))

0.0

Obtain the end parameter of the curve:

 

_$ (setq endSpline (vlax-curve-getEndParam splineObj))

17.1546

Determine the second derivative at the parameter midway along the curve:

 

_$ (vlax-curve-getSecondDeriv splineObj

( / (- endspline startspline) 2))

(0.0165967 0.150848 0.0)

Chào bạn Bình

có phải nó sử dụng như thế này không bạn.

Nó cho ra toạ độ của 1 điểm mà mình không biết điểm đó là điểm nào.

(defun c:tam ()
(setq ss (ssget (list (cons 0 "lwpolyline"))))
(setq ent (ssname ss 0))
(setq start (vlax-curve-getStartParam ent))
(setq end (vlax-curve-getEndParam ent))
(vlax-curve-getSecondDeriv ent ( / (- end start) 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 bạn Bình

có phải nó sử dụng như thế này không bạn.

Nó cho ra toạ độ của 1 điểm mà mình không biết điểm đó là điểm nào.

(defun c:tam ()
(setq ss (ssget (list (cons 0 "lwpolyline"))))
(setq ent (ssname ss 0))
(setq start (vlax-curve-getStartParam ent))
(setq end (vlax-curve-getEndParam ent))
(vlax-curve-getSecondDeriv ent ( / (- end start) 2))
)

Hề hề hề,

Bạn Phamngoctukts ơi,

Ngó vậy mà hổng phải vậy đâu, đó không phải là tọa độ của điểm mà là tọa độ của vec tơ pháp tuyến của đường cong tại chính cái điểm đang xét trên đường cong bác à. Còn mối liên hệ giữa cái véc tơ pháp tuyến này với bán kính của đường cong tại điểm đó chắc bác phải mò thêm chút xíu nữa bác à. Tỷ như cái đoạn lisp bác viết là nó xác định cái véc tơ pháp tuyến tại điểm giữa của đường cong đó .

Rất mong bá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
Hề hề hề,

Bạn Phamngoctukts ơi,

Ngó vậy mà hổng phải vậy đâu, đó không phải là tọa độ của điểm mà là tọa độ của vec tơ pháp tuyến của đường cong tại chính cái điểm đang xét trên đường cong bác à. Còn mối liên hệ giữa cái véc tơ pháp tuyến này với bán kính của đường cong tại điểm đó chắc bác phải mò thêm chút xíu nữa bác à. Tỷ như cái đoạn lisp bác viết là nó xác định cái véc tơ pháp tuyến tại điểm giữa của đường cong đó .

Rất mong bác thành công....

Bổ sung thêm tý nữa : Độ dài của vectơ đó chính là bán kính cong của đoạn cong đó tai điểm đang xét. Như vậy, có bán kính cong, có góc với điểm đang xét => ta xác định được tâm cong (hàm polar)

  • 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ác nào có thể giúp tôi viết lisp link giá trị dim được không

ví dụ: thay đổi giá trị text trong dim thì text của dim link cũng thay đổi theo (giống như lisp LinkT của bác NguyenHoanh)

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
Chào bạn quynhnn,

Mình đã xem file của bạn gửi, trong đó cái block point của bạn chứa tới gần hai chục attref . hầu hết trong số chúng được lấy giá trị mặc định. Tuy nhiên mình chưa rõ là cái bạn cần ra sao. Bạn có thể post cái kết quả bạn cần như thế nào lên được không vì quả thực mình không biết nên bỏ hay nên lấy thuộc tính nào trong cái mớ thuộc tính này bạn ạ.

Nếu có thể bạn nên post file ở dạng CAD2004 sẽ có nhiều người đọc được hơn bạn nhé.

Cảm ơn bác Bình đã quan tâm

Em cần thay mỗi block bằng một single text có nội dung là các số thứ tự tương ứng với block (cái value visible hoặc name đó bác) . Em gửi kèm theo bản vẽ em xử lý thủ công để bác tiện theo dõi và làm giúp em nhé

http://www.cadviet.com/upfiles/3/test_3.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
Cảm ơn bác Bình đã quan tâm

Em cần thay mỗi block bằng một single text có nội dung là các số thứ tự tương ứng với block (cái value visible hoặc name đó bác) . Em gửi kèm theo bản vẽ em xử lý thủ công để bác tiện theo dõi và làm giúp em nhé

http://www.cadviet.com/upfiles/3/test_3.dwg

Không cần sử dụng tới Lisp

Sử dụng các lệnh sau : Bedit, Quick select, Erase, Attsync

-> Muốn chuyển Block thành Text nữa thì dùng lệnh Burst

Giờ Tue_NV phải có việc đi rồi.

Bạn ngâm cứu thử nhé. Có gì không được. Hãy post lên đây, mình sẽ 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 bác Bình đã quan tâm

Em cần thay mỗi block bằng một single text có nội dung là các số thứ tự tương ứng với block (cái value visible hoặc name đó bác) . Em gửi kèm theo bản vẽ em xử lý thủ công để bác tiện theo dõi và làm giúp em nhé

http://www.cadviet.com/upfiles/3/test_3.dwg

Chào bạn quynhnn,

Bạn dùng thử lisp này nếu cần thay đổi gì hãy post lên để mình sửa lại.

Lisp này sẽ tạo text ngay trên lớp của thuộc tính và lấy text màu đỏ, đồng thời tạo 1 point cũng trên lớp này nhưng có màu vàng tại điểm đặt text bạn nhé. Do mình thấy trên bản vẽ của bạn gửi sau khi sửa có thêm point này nên mình mới làm vậy. Nếu không cần thiết bạn có thể bỏ nó đi.

Tuy nhiên có việc mình chưa rõ vì sao sau khi tạo text lại xuất hiện một điểm ở ngay chân của ký hiệu điểm trong block cũ. Mình đang tìm hiểu kỹ lại cái block này, có gì sẽ sửa lại sau bạn nhé.

(defun c:chpt (/ ss n i bln ebl en els txt ptxt htxt gtxt stxt ltxt )
(command "undo" "be")
(setq ss (ssget (list (cons 0 "INSERT")))
       n (sslength ss)
       i 0)
(while (        (setq bln (ssname ss i)
               ebl (entget bln))
       (if (and ( = (cdr (assoc 2 ebl)) "WAYPOINT") (= (cdr (assoc 66 ebl)) 1))
           (progn
                  (setq en (entnext bln)
                          els (entget en))
                  (while (/= (cdr (assoc 0 els)) "SEQEND")
                           ( if (= (cdr (assoc 2 els)) "Visible")
                                (progn 
                                        (setq txt (cdr (assoc 1 els))
                                                ptxt (cdr (assoc 10 els))
                                                htxt (cdr (assoc 40 els))
                                                gtxt (cdr (assoc 50 els))
                                                stxt (cdr (assoc 7 els))
                                                ltxt (cdr (assoc 8 els))
                                         )
                                         (entmake (list (cons 0 "TEXT")
                                                              (cons 1 txt)
                                                              (cons 40 htxt)
                                                              (cons 10 ptxt)
                                                              (cons 50 gtxt)
                                                              (cons 7 stxt)
                                                              (cons 8 ltxt)
                                                              (cons 62 1)
                                                        )
                                           )
                                           (entmake (list (cons 0 "POINT")
                                                             (cons 10 ptxt)
                                                             ;;;;;;(cons 40 0.001)
                                                             (cons 8 ltxt)
                                                             (cons 62 2)
                                                         )
                                           )
                                   )
                               )
                               (setq en (entnext en)
                                       els (entget en))
                     )
                     (command "erase" bln "") 
              )
          )

          (setq i (1+ i))
)
(command "undo" "e")
(princ)
)

 

Chúc bạn 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
Cảm ơn bác Bình đã quan tâm

Em cần thay mỗi block bằng một single text có nội dung là các số thứ tự tương ứng với block (cái value visible hoặc name đó bác) . Em gửi kèm theo bản vẽ em xử lý thủ công để bác tiện theo dõi và làm giúp em nhé

http://www.cadviet.com/upfiles/3/test_3.dwg

Hề hề hề,

Đã phát hiện ra, đây là cái điểm chèn của block chứ không phải điểm thuộc block. Do vậy nếu chỉ xóa block thì nó vẫn nằm chình ình ra ăn vạ ở đó chứ chả chịu biến đi. Mình đã sửa lại cái lisp trên để xóa béng thằng này. Bạn thử xem nhé.

(defun c:chpt (/ ss n i bln ebl en els txt ptxt htxt gtxt stxt ltxt ssc p1 p2 ssp)
(vl-load-com)
(command "undo" "be")
(setq ss (ssget (list (cons 0 "INSERT")))
       n (sslength ss)
       i 0)
(while (        (setq bln (ssname ss i)
               ebl (entget bln)
               ssc (ssadd bln)
               p1 (car (acet-geom-ss-extents-fast ssc))
               p2 (cadr (acet-geom-ss-extents-fast ssc))
               ssp (ssget "w" p1 p2)
       )
       (if (and ( = (cdr (assoc 2 ebl)) "WAYPOINT") (= (cdr (assoc 66 ebl)) 1))
           (progn
                  (setq en (entnext bln)
                          els (entget en))
                  (while (/= (cdr (assoc 0 els)) "SEQEND")
                           ( if (= (cdr (assoc 2 els)) "Visible")
                                (progn 
                                        (setq txt (cdr (assoc 1 els))
                                                ptxt (cdr (assoc 10 els))
                                                htxt (cdr (assoc 40 els))
                                                gtxt (cdr (assoc 50 els))
                                                stxt (cdr (assoc 7 els))
                                                ltxt (cdr (assoc 8 els))
                                         )
                                         (entmake (list (cons 0 "TEXT")
                                                              (cons 1 txt)
                                                              (cons 40 htxt)
                                                              (cons 10 ptxt)
                                                              (cons 50 gtxt)
                                                              (cons 7 stxt)
                                                              (cons 8 ltxt)
                                                              (cons 62 1)
                                                        )
                                           )
                                           (entmake (list (cons 0 "POINT")
                                                             (cons 10 ptxt)
                                                             ;;;;;;(cons 40 0.001)
                                                             (cons 8 ltxt)
                                                             (cons 62 2)
                                                         )
                                           )
                                   )
                               )
                               (setq en (entnext en)
                                       els (entget en))
                     )
                     (command "erase" ssp "") 
              )
          )
          (setq ssc nil) 
          (setq i (1+ i))
)
(command "undo" "e")
(princ)
)

 

Chúc bạn vui, nếu bạn muốn chỉnh sửa lại màu và lớp của các đối tượng mới thì có thể vào sửa ngay trong các hàm entmake bạn nhé. Nó cũng đơn giản thô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

- Em xin được hỏi lisp có thể tạo ra 1 file lưu dữ liệu (chẳng hạn như Nova thì có file .ntd, thiết kế cống có file .tcg) , để có thể gọi các dữ liệu này bất cứ lúc nào khi mình chọn đường dẫn đến file l­ưu. Em xin 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

@thanhbinh:

Mấy hôm bận quá giờ mới online đc bác ợ.

Chắc có lẽ cái líp ko chạy đc là do cái e đặt cái biến nào đó trong cad rùi. E thử down lại cái file bác post lên và thử ở cty và ở nhà cũng đều báo lỗi. cả CAD2007 & 2008. Hjx. Dù sao e cũng cảm ơn bác 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
@thanhbinh:

Mấy hôm bận quá giờ mới online đc bác ợ.

Chắc có lẽ cái líp ko chạy đc là do cái e đặt cái biến nào đó trong cad rùi. E thử down lại cái file bác post lên và thử ở cty và ở nhà cũng đều báo lỗi. cả CAD2007 & 2008. Hjx. Dù sao e cũng cảm ơn bác rất nhiều !!!

Nó báo lỗi gì vậy??? Bạn hãy post cái báo lỗi của nó lên nhé. Mình vẫn chưa hiểu lắm vì cái mình chạy thì như bạn đã thấy. Vậy là sao 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

xin lỗi nhưng cho mình hỏi cái líp này có tác dụng gì?nó có phải là các lệnh đã đc soạn thảo sẵn ko?

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ó báo lỗi gì vậy??? Bạn hãy post cái báo lỗi của nó lên nhé. Mình vẫn chưa hiểu lắm vì cái mình chạy thì như bạn đã thấy. Vậy là sao cà????

Tình hình là như thế này này bac bình ạ:

Với cái file tét bác gửi lại trên 4r mình nhé:

........Lúc đầu e chỉ load líp CH: Thì các text sẽ chuyển về đúng yêu cầu kể cả Text có nằm trong 1 Block ( cao đích - cao nguồn ). Nhưng riêng Dim ở trong BLOCK thì không thay đổi gì cả. ở command thì thông báo như vầy:

 

Command:

Chon doi tuong block nguon

Select objects: Specify opposite corner: 9 found

Select objects: regen Regenerating model.

Command: regen Regenerating model.

Command: regen Regenerating model.

Command: undo Current settings: Auto = On, Control = All, Combine = Yes

Enter the number of operations to undo or [Auto/Control/BEgin/End/Mark/Back]

<1>: e

 

Nhưng khi e tiếp tục load líp CS vào thì cái líp CH lại lỗi nếu trong nguồn có block: thông báo nhu* vầy :

 

Command:

Chon doi tuong block nguon

Select objects: Specify opposite corner: 9 found

Select objects: ; error: too many arguments

 

Còn nếu chỉ load nguyên Líp CS thì: Với cả text trong đích kể cả nằm trong block vẫn hoạt động tốt ( scale đích theo tỉ lệ X của block nguồn). Nhưng riêng với Dim trong Block thì không biến đổi gi` 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 xin được hỏi lisp có thể tạo ra 1 file lưu dữ liệu (chẳng hạn như Nova thì có file .ntd, thiết kế cống có file .tcg) , để có thể gọi các dữ liệu này bất cứ lúc nào khi mình chọn đường dẫn đến file l­ưu. Em xin cảm ơn!

 

Không thấy các anh trả lời chắc là autolisp không thực hiện được chức năng này 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ình hình là như thế này này bac bình ạ:

Với cái file tét bác gửi lại trên 4r mình nhé:

........Lúc đầu e chỉ load líp CH: Thì các text sẽ chuyển về đúng yêu cầu kể cả Text có nằm trong 1 Block ( cao đích - cao nguồn ). Nhưng riêng Dim ở trong BLOCK thì không thay đổi gì cả. ở command thì thông báo như vầy:

 

Command:

Chon doi tuong block nguon

Select objects: Specify opposite corner: 9 found

Select objects: regen Regenerating model.

Command: regen Regenerating model.

Command: regen Regenerating model.

Command: undo Current settings: Auto = On, Control = All, Combine = Yes

Enter the number of operations to undo or [Auto/Control/BEgin/End/Mark/Back]

: e

 

Nhưng khi e tiếp tục load líp CS vào thì cái líp CH lại lỗi nếu trong nguồn có block: thông báo nhu* vầy :

 

Command:

Chon doi tuong block nguon

Select objects: Specify opposite corner: 9 found

Select objects: ; error: too many arguments

 

Còn nếu chỉ load nguyên Líp CS thì: Với cả text trong đích kể cả nằm trong block vẫn hoạt động tốt ( scale đích theo tỉ lệ X của block nguồn). Nhưng riêng với Dim trong Block thì không biến đổi gi` cả.

Hề hề hề,

Cái vấn đề của bạn có nhẽ nó là thế này:

1/- Bạn cài đặt sao đó mà nó có dòng

Command: undo Current settings: Auto = On, Control = All, Combine = Yes

Trên máy của mình xài CAD2004 chả thấy nó í ới gì với mấy thằng cu này cả. Có nhẽ mấy thằng cu này không khoái cái lisp của mình chăng???

2/- Do cả hai lisp đều sử dụng hàm upwb mà hai thằng này sử dụng các biến toàn cục khác nhau. Vì vậy khi bạn load thằng thứ hai thì thằng upWb ở lisp đầu trở thành vô nghĩa. Vì thế nó mới báo là too many argument bạn ạ.

Vì thế bạn nên đổi tên của cái hàm upwb ở thằng thứ hai thành upwb1 chẳng hạn thì sẽ kh6ng bị conflict nữa.

3/- Cái này cũng có lỗi của mình do không lường trước vấn đề này khi bạn chạy hai lisp đồng thời. vả lại khi mình chạy thì mình lại chạy rời từng thằng, mỗi lần chạy lại load lisp lại nên không phát hiện ra. Thành thật xin lỗiba5n

4/- Về các Dim trong block đích không thay đổi thì quả thật mình chưa rõ tại sao vì ở máy mình thì nó chạy phe phé, phanh chả kịp nên cũng chả biết nó chạy vì sao, hề hề hề..... Theo mình đoán thì có thể trong các biến hệ thống của bạn có biến nào đó không cho thay đổi các thuộc tính của block bạn ạ. Hãy mò thử xem chứ mình chịu vì cái thằng block này cũng rắc rối ra trò bạn ạ. Đặc biệt bạn chú ý cái thằng undo Curent setting ở trên nhé.

Hy vọng bạn hiểu và thông cảm với cái sự dốt của mình.....

Chúc bạn vui.

Hề hề 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

Các anh chị có thể Viết một LISP về Thiết kế chi tiết mẫu cửa (gỗ, kính....) mà chỉ cần nhập các thông số vẽ nên cửa đó thì CAD sẽ vẽ cho mình một kiểu cửa mình cần (Cứ là mẫu thịnh hành mẫu chung rồi ai thấy chưa phù hợp thì chỉnh). Dạ em là SV nên mong anh 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
Không thấy các anh trả lời chắc là autolisp không thực hiện được chức năng này rồi.

Hề hề hề,

Tức khí rùi hử????

Cái cách đặt vấn đề như bạn thì sẽ dốt hoài thôi..... Bạn nói cứ như tất cả mọi người đều giỏi nova với vẽ cống như bạn vậy. Nhầm to rồi, bạn nên cho cái ví dụ cụ thể về cái bạn cần thì mới nói chuyện tiếp được. Còn mấy cái đã có nếu bạn không bí mật thì hãy cho mọi người xem mặt ngang mũi dôc nó ra sao mới bắt chước được chớ... Còn cái kiểu úp úp mở mở, đánh đố bà con vậy, chả ai khoái cả đâu. Có thì xài chả có thì nhịn chớ sao. Trước giờ vẫn chả biết có nó thì nay không có cũng vẫn cứ được bạn à.....

Chuyện khích bác lẫn nhau ở đây cũng chả phải là nên làm, autolisp nó có làm được hay không là việc của nó, còn mình có cần làm hay không là việc của mình. Khi đã cần thì chả có ô tô, chạy bộ cũng cứ phải chạy chớ khích bác nhau thì được cái chi????

Thế đấy, bạn à.

Bây giờ, nếu bạn thấy chán thì thôi, đừng thèm chơi với mình nữa, song nếu thấy phải thì hãy chịu khó nghiền ngẫm kỹ cái ý tưởng của bạn và post vấn đề lên cho nó rõ ràng, cụ thể. Đầu vào bạn có những gì, đầu ra bạn muốn ra sao, còn cái khúc xử lý thì để tùy mọi người cảm hứng. Như vậy may ra mới có người trả lời bạn được.

Hề hề hề,..

Chúc bạn 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
Các anh chị có thể Viết một LISP về Thiết kế chi tiết mẫu cửa (gỗ, kính....) mà chỉ cần nhập các thông số vẽ nên cửa đó thì CAD sẽ vẽ cho mình một kiểu cửa mình cần (Cứ là mẫu thịnh hành mẫu chung rồi ai thấy chưa phù hợp thì chỉnh). Dạ em là SV nên mong anh chị giúp đỡ ạ!

Bạn muốn giúp cái chi???

Giúp học làm lisp???? Hay giúp làm cái lisp vẽ cửa sổ??? mà cửa sổ nó tròn méo ra răng??? Mẫu thịnh hành là mẫu nào??? Kiếm đâu cho ra cái mẫu đó???? Các thông số vẽ là thông số gì, ai cho và cho mượn hay cho thuê???? Ai là người xác định cái vẽ ra là đúng mẫu, bạn hay là trung ương hội KTS????

hề hề hề, nói chơi mà không phải chơi nghen, không dễ đâu????

Hãy suy nghĩ nghiêm chỉnh về cái ý tưởng của bạn, và hãy post cụ thể cái đầu vào bạn có, cái đầu ra bạn cần, có thêm hình ảnh minh họa càng tốt rồi mới nói đến chuyện học líp, sửa lisp được bạn ơ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
Bạn muốn giúp cái chi???

Giúp học làm lisp???? Hay giúp làm cái lisp vẽ cửa sổ??? mà cửa sổ nó tròn méo ra răng??? Mẫu thịnh hành là mẫu nào??? Kiếm đâu cho ra cái mẫu đó???? Các thông số vẽ là thông số gì, ai cho và cho mượn hay cho thuê???? Ai là người xác định cái vẽ ra là đúng mẫu, bạn hay là trung ương hội KTS????

hề hề hề, nói chơi mà không phải chơi nghen, không dễ đâu????

Hãy suy nghĩ nghiêm chỉnh về cái ý tưởng của bạn, và hãy post cụ thể cái đầu vào bạn có, cái đầu ra bạn cần, có thêm hình ảnh minh họa càng tốt rồi mới nói đến chuyện học líp, sửa lisp được bạn ơi.

Dạ! Bác nói rành khó nghe đó. hix:((. Nhưng mà thích phong cách đó của bác. Hề hề (học điệu cười của Bác^^)! Em có biết chi về viết LISP mô bác mồ. Các bác viết Lisp em biết dùng các Lisp đó là đạ sướng trong con ngài rồi.hihi ^^. Tại vì em thấy mấy anh chị đi làm cũng copy chỉnh sửa kích thước...... mà kiểu làm arứa thì em cũng làm được nói mần chi? Nên em mới có cấy ý tưởng a rứa nà.hihi. "Cấy chi cũng phải cụ thể".hihi Mới học thêm được cấy ni từ bác đó.keke.

P/s: Bác nói từ "ra răng" nên em nghĩ Bác là dân Miền Trung. Chắc những dòng em viết trên bác đọc đc. hề hề^^. Cảm ơn bác nha! :undecided:

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

@thanhbinh:

 

cái dòng Command: undo Current settings: Auto = On, Control = All, Combine = Yes có là do trong líp có gọi lệnh Undo begin và undo end. E cũng chưa hiểu tác dụng của cái lệnh này như thế nào cả. khi xóa cà 2 dòng này trong líp đi thì nó sẽ không hiện lên nữa mặc dù em chả hiểu nó có ảnh hưởng gì không nữa. e cung sửa upwb thành upwb1 và chạy cả 2 líp rất ngon. chỉ còn cái vấn đề dim trong block đích thì thôi mặc kệ nó bác ah. Cảm ơn bác 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 có một dialog nhập dữ liệu bây giờ mình muốn đang chạy dialog kích vào bản vẽ thì zoom và pan được. Bình thường đang chạy dialog kích vào bản vẽ CAD vẫn chọn dialog, có cách nào chọn vào bản vẽ thì xử lý bản vẽ kích vào dialog lại tiếp tục dialog không?

Mong các bạn chỉ giúp cho.

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
1/- Bạn cài đặt sao đó mà nó có dòng

Command: undo Current settings: Auto = On, Control = All, Combine = Yes

Trên máy của mình xài CAD2004 chả thấy nó í ới gì với mấy thằng cu này cả. Có nhẽ mấy thằng cu này không khoái cái lisp của mình chăng???

Chì cần (setvar "cmdecho" 0) trước (command "undo" "BE" ) là sẽ

chả thấy nó í ới gì
  • 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
@thanhbinh:

 

cái dòng Command: undo Current settings: Auto = On, Control = All, Combine = Yes có là do trong líp có gọi lệnh Undo begin và undo end. E cũng chưa hiểu tác dụng của cái lệnh này như thế nào cả. khi xóa cà 2 dòng này trong líp đi thì nó sẽ không hiện lên nữa mặc dù em chả hiểu nó có ảnh hưởng gì không nữa. e cung sửa upwb thành upwb1 và chạy cả 2 líp rất ngon. chỉ còn cái vấn đề dim trong block đích thì thôi mặc kệ nó bác ah. Cảm ơn bác rất nhiều.

Chào bạn nguyentuyen6,

Cái dòng (command "undo" "be") là để bắt đầu vị trí mà cái lệnh undo sẽ có tác dụng.

Cái dòng (command "undo" "e" là để đánh dấu vị trí kết thức lệnh undo.

Tiếng Tây nó là vậy còn nôm na theo tiếng ta là nó như vầy: Khi có hai dòng này thì sau khi bạn chạy lisp bạn chỉ cần undo một phát thì tất cả những gì lisp đã thực hiện trong khoảng từ begin đến end sẽ được xóa sạch. Bằng không thì mỗi nhát undo bạn chỉ xóa được một lệnh trong lisp mà thôi. Đấy cái hiểu củ chuối của mình là vậy.

Bạn xóa đi ư??? Ok chả sao, lisp vẫn chạy ngon, có điều khi muốn undo thì chịu khó gõ nhiều nhiều, vậy thôi. Ấy vậy mà nó cũng tiện ra phết đó. mình hay dùng cái kiểu này để kiểm tra các bước thực hiện của lisp. Cho đến khi viết xong rồi mới nhét hai thằng này vô cho ......OAI thôi bạn ạ.

 

Tuy nhiên cái khác giữa máy của bạn và máy của mình thì mình không giải thích được vì thực tế khi có cả hai thằng đó, mình chạy lisp mát ga mà chả thấy cái dòng đó nó hiện lên vậy mới nghi nó chớ. Còn trị thì đành nhịn nó đã vì mình cóc biết nó võ vẽ ra răng, nhỡ đụng vô nó chơi cho méo mặt thì khổ???? hề hề hề,....

 

Nói kệ chứ mình cũng cay mũi lắm vì tại sao lại kỳ rứa, trên máy mình chả có í ới gì mà về máy bạn nó lại cứ ăn vạ kiểu nớ.... hề hề hề....

 

Ấy ấy ấy, bạn làm thử như bác Master_Worse vừa mách coi sao. Có khi nó lại chạy không thắng được đó. Hề hề 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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×