

h2c
-
Số lượng nội dung
50 -
Đã tham gia
-
Lần ghé thăm cuối
Bài đăng được đăng bởi h2c
-
-
À quên nhân đây nhờ các huynh chỉ giúp(setq pt1 (getpoint "\nCho diem dau cua line") pt2 (getpoint pt1 "\nCho diem thu 2 cua line") )
tại sao getpoint hàng trên thì không cần pt1 ,nhưng getpoint hàng tiếp theo lại có pt1 .2 cái này khác nhau như thế nào ạ
Khi có pt1 ở dòng 2 thì cad sẽ có 1 đường nối từ pt1 đến cursor của bạn trong quá trình bạn chọn điểm thứ 2 , cái này để trực quan hơn thôi .
-
Bạn có thể cho mình xin link các bài viết của ông GS Takemoto này được không . Cám ơn bạn nhiều .
-
Nếu bạn thực hiện đúng hoàn toàn như mình gợi ý, dòng màu đỏ trên không thể xảy ra được. Bạn kiểm tra lại các dòng code sau đó có cái gì làm thay đổi TT0 hay không?Bạn có thể thử chương trình đơn giản sau. User nhập chiều dài và chỉ định điểm chuẩn -> chương trình vẽ 1 line từ điểm chuẩn, nằm ngang, với chiều dài đã nhập. Chạy lần đầu, chiều dài mặc định là 100 đã gán. Các lần sau, giá trị mặc định là giá trị vừa chạy của lần kề trước đó.
(defun C:VD( / L p)
(if (not L0) (setq L0 100))
(setq L (getreal (strcat "\nChieu dai <" (rtos L0) ">: ")))
(if (not L) (setq L L0) (setq L0 L))
(setq p (getpoint "\nBase point:"))
(command "line" p (polar p 0 L) "")
(princ)
)
Tất nhiên, L0 chỉ nhớ trong phiên làm việc hiện tại. Bạn close bản vẽ nó sẽ mất.
Nếu bạn muốn nhớ luôn cho các phiên làm việc sau (save luôn trong bản vẽ) thì dùng các biến UserR1, UserR2... như bạn hnhmai đã bày ở trên.
Lưu ý thêm
1) Giả sử các biến L và L0 là string thì có khác một chút:
Thay vì: (if (not L) (setq L L0) (setq L0 L))
Sửa thành: (if (= L "") (setq L L0) (setq L0 L))
2) 3 biểu thức (not L), (= L nil) và (null L) tương đương nhau. Viết sao cũng được, tuỳ thói quen mỗi người.
Hoàn toàn đồng ý với ssg , dòng if màu đỏ này là mấu chốt đây . Mình cũng đã nói đến dòng if này ở post trên . Cám ơn ssg đã rất nhiệt tình .
-
Bạn đã thử chưa? TT0 không được khai báo local. Nó vẫn tồn tại suốt phiên làm việc cho đến khi bạn close bản vẽ. Do đó, khi bạn chạy lần 2 trở đi, nó sẽ không gán giá trị 5 nữa mà vẫn giữ giá trị (setq TT0 TT1) trước đó!@hnhmai: Giờ mình mới biết đến các User variables này. Cám ơn bạn!
Mình đã thử nhưng tt0 sẽ vẫn lưu giá trị 5 ( theo ví dụ của ssg ) , nên mình thêm dòng if trước đó
(if (= tt0 nil) (setq tt0 0))
Lần chạy đầu tiên tt0 chưa có giá trị thì sẽ được set 0 , sau lần này tt0 đã được mang giá trị nên sẽ không được set nữa , không biết có phải ý ssg là vậy .
-
Cám ơn hnhmai nhiều . Mình đã dùng biến useri1 để nhớ giá trị mặc định . Chạy tốt .
Bác ssg nói mà em chưa hiểu kỹ lắm , cuối chương trình có động tác gán giá trị mới cho TT0 nhưng đầu chương trình lại gán cho TT0 giá trị mặc định ví dụ là 5 , vậy lần sau chạy chương trình nữa thì giá trị mặc định luôn luôn bị set sẵn là 5 chứ ko phải là giá trị vừa dùng trước đó .
-
Mọi người cho mình hỏi , làm sao để lisp lưu lại 1 mặc định để dùng cho lần sau .
Cụ thể : Mình vẽ ký hiệu hàn , lần đầu tiên sẽ hỏi người dùng chiều cao hàn , mình muốn lần dùng tiếp theo cứ đánh enter tiếp tục thì nó sẽ dùng các giá trị đã nhập trước đó .
Mình đã thử không khai báo nó là biến local rồi mà nó vẫn bị "quên" sau khi lisp kết thúc .
(setq TT1 (getstring "\nWeld height <NONE>:"))
(if TT1 nil (setq TT1 TT1M))
(if (= TT1 "N") (setq TT1 nil))
(setq TT1M TT1)
Mình bỏ lửng không khai báo TT1M . Lần dùng tiếp theo em muốn người dùng có 3 lựa chọn : 1 là enter để dùng lại giá trị trước đó , 2 là nhập N để set giá trị NONE , 3 là nhập 1 giá trị mới .
Cám ơn mọi người .
-
Cám ơn ssg . Nhưng cho mình hỏi là tại sao phải tạo local variable . Khi mình thử del dòng khai báo variable đi thì nó vẫn chạy tốt mà ( đây mới là chỗ mình khó hiểu ) ? Nên trước giờ mình ít khi nào khai báo như thế lắm , mong bạn giải thích thêm . Thanks .
-
Mình vừa viết xong lisp này để copy đối tượng align theo đường thẳng cho trước với khoảng cách xác định theo phương đứng . Nhưng mà có cái gì đó sai trong dòng command copy .
(defun c:FG() (setq OBJ (entsel "\nSelect object :") LI (entget (car (entsel "\nSelect line :"))) P1 (cdr(assoc 10 LI)) P2 (cdr(assoc 11 LI)) x1 (car P1) y1 (cadr P1) x2 (car P2) y2 (cadr P2) goc (atan (- y2 y1) (- x2 x1)) BP (getpoint "\nBase point :") DI (getreal "\nVertical distance : ") SB (getint "\nNumber of step :") n 0 ) (while (< n SB) (setq BP1 (polar BP goc (/ DI (cos goc)))) (command "copy" OBJ BP BP BP1 "") (setq BP BP1) (setq OBJ entlast) (setq n (+ n 1)) ) (princ) )
Cám ơn mọi người .
-
Thay đổi entity ?
trong AutoLisp
Cám ơn ssg nhiều . Đặc thù cviệc của mình có đến hàng trăm block nên liệt kê ra cũng không cần thiết lắm , nếu có liệt kê ra thì người dùng cũng choáng , nhưng mình sẽ xem thêm theo gợi ý của ssg .
-
Thay đổi entity ?
trong AutoLisp
Mình muốn đổi tên block bởi vì nếu chạy lệnh rename của cad thì khi chọn old name thì mình ko thể view được mặt mũi cái block mình cần đổi tên .
Mình viết lisp này để đổi tên nhưng sao nó lại không chạy , mong mọi người giúp đỡ
(defun c:CB()
(setq BL (entget (car (entsel "\nChon block :")))
ten (cdr(assoc 2 BL)))
(princ "\nTen block cu : ")(princ ten)
(setq
tenM (getstring "\nTen block moi :"))
(if (tblsearch "block" tenM) (alert "Ten nay da co trong danh sach block !")
(progn
(setq
BL (subst (cons 2 tenM) (assoc 2 BL) BL))
(entmod BL)
)
)
(princ)
)
Thanks mọi người .
-
Cám ơn ssg nhiều .
-
Cảm ơn bạn ssg rất nhiều . Nhưng thật kỳ cục là kết quả nhận được của mình là file này đây , mọi cách từ hôm qua đến giờ vẫn là nó . Mình đã move hết *.txt và *.sld sang thư mục gốc của CAD08 và dùng lisp của bạn nhưng vẫn ko được , kết quả vẫn là mark.txt y như ban đầu còn file *.slb này nó lại nằm bên mục my documents .
-
Mình đang dùng cad08 . Mình vẫn tạo được file *.slb nhưng mà nó lại không chứa thông tin gì hết . Mình dùng lisp của bác ssg và dùng command shell của cad nhưng vẫn ko được , chỉ tạo ra file rỗng , có gì lưu ý về nơi đặt file *.sld không ?
Mình chuyển qua làm theo đoạn help này
In the Command Prompt window, at the prompt, enter CD <folder location of slides> to change folders.
As an example: CD “c:\symbol”
At the prompt, enter the following syntax to create the slide library:
slidelib mark <mark.txt (mark.txt chứa danh sách các *.sld , tất cả các file *.txt và *.sld nằm trong thư mục c:\symbol)
Mình không hiểu tại sao trong command promt nó lại báo ko hiểu lệnh slidelib .
Cám ơn bạn đã nhiệt tình giúp đỡ .
-
Mình đã thử và vẫn chưa tạo được flie slb như mong muốn được , vẫn không điều khiển được nó . Có phải bản chất của slb là tập hợp các sld lại ? và tại sao phải dùng slb trong khi đã có sẵn sld rồi ?
-
Mình chỉ mới biết tạo file *.sld thôi , chưa tạo được *.slb . Mình đã làm theo như file help nhưng máy cứ báo là nó không hiểu lệnh slidelib .
-
Các bác có thể cho em 1 lisp ví dụ về dialog được không ah . Khi đánh lệnh ABC.. gì đó thì sẽ hiện lên bảng dialog . 1 bên là có 3 dòng với nội dung "hình tròn" "hình vuông" "tam giác" , bên kia là slide của 3 hình đó . Khi mình click vào hình slide hay dòng chữ thì sẽ thực thi ngay lệnh chứ không cần phải nhấp ok . Tất nhiên sau khi click sẽ có giai đoạn nhập R đường tròn , cạnh hình vuông hoặc kích thước tam giác .
Lisp này để em học hỏi , chứ nhiều lisp trên máy quá phức tạp và rất dài , em còn học nhiều nên chưa hiểu hết .
Em cảm ơn rất nhiều .
-
Mọi người cho mình hỏi cách ghi text trong 3D sao cho khi mình quay 3D orbit hoặc chuyển view khác thì text nó vẫn giữ nguyên , không bị bẹp dúm (không bị hiểu là đối tượng 3D) ? Chi tiết của mình rất phức tạp nên luôn luôn phải biết thông tin về mỗi thành phần trong mọi kiểu view .
Cảm ơn mọi người rất nhiều .
-
Cám ơn ssg và jikibo đã chỉ . Cám ơn bác Hoành , MPL xài rất tốt ah .
-
Mình thường có vài chục bản nằm chung 1 file , mỗi lần in 1 file mất khá nhiều thời gian . Có cách nào in toàn bộ bản vẽ trong 1 file đó không . Các bản vẽ đều có sẵn khung tên , lề mép đầy đủ và in ở A3 .
Thanks mọi người .
-
Thanks mọi người , em đã sửa được rồi .
-
Mình đã sửa được rồi , nhưng có 1 vấn đề mình không hiểu nổi : khi mình chọn điểm mà mình zoom sát vô đối tượng để không còn thấy bảng số liệu thì sau khi làm xong , bảng số liệu ghi rất đúng , nhưng nếu mình vẫn thấy cùng lúc bảng số liệu mà máy đang vẽ và đối tượng cần tính thì bảng số liệu nó sẽ vẽ rất lung tung .
-
Công dụng : lisp này để khi pick vào điểm , nó sẽ cho ra toạ độ tuyệt đối của nó so với điểm gốc và tương đối của nó so với điểm liền kề trước nó . Tuy nhiên điểm gốc này được chọn và có toạ độ do người dùng nhập vào để tương ứng toạ độ trong soft PDMS . Xuất dữ liệu ra ngay trong cad cho đơn giản , dễ nhìn .
Vấn đề là nó chạy lung tung lắm , lúc đúng lúc sai . Em chạy nhiều lisp 1 lúc nên nghĩ rằng nó ghi trùng biến lên memory , nhưng em restart cad , tắt hết các lisp khác nhưng dùng được vài lần lại lỗi .
Trong này em có dùng đoạn code vẽ bảng với chú thích của bác ssg , mong bác ssg đừng giận nha (thanks bác nhiều)
;;;------------------------------------------------------
(defun Begin_tdo()
(setq
oldOs (getvar "osmode")
oldTrack (getvar "trackpath")
oldOrth (getvar "orthomode")
StyleBN (getvar "textstyle")
Th (cdr (assoc 40 (tblsearch "style" StyleBN)))
SNum (getreal "\nChieu cao cua chu - Height of text :")
p00 (getpoint "\nDiem chuan bang so lieu - Base point of info list [Top right] :")
x_PDbase (getreal "\nNhap toa do X cua basepoint trong PDMS - Enter X coordinate of base point in PDMS :")
y_PDbase (getreal "\nNhap toa do Y cua basepoint trong PDMS - Enter Y coordinate of base point in PDMS :")
CAD (getpoint "\nChon diem base point - Pick base point :")
x1_cad (car CAD)
x2_cad (cadr CAD)
p0 p00
p10 (polar p00 pi (* 60 SNum))
p20 (polar p00 pi (* 120 SNum))
p30 (polar p00 pi (* 180 SNum))
p40 (polar p00 pi (* 240 SNum))
p50 (polar p00 pi (* 260 SNum))
n 0
TT (getint "\nSo bat dau - Enter start number [2] :")
)
(if (not TT) (setq TT 2))
(if (= Th 0) (setq Ts (* 2 SNum)) (setq Ts Th))
(command "line" p00 p50 "")
)
;;;-------------------------------------------------------
(defun So_tdo()
(setvar "osmode" 1)
(setvar "trackpath" 0)
(setq
p2 (getpoint p1 "\nVi tri STT - Place the number: ")
p3 (polar p2 (* pi 1.5) (* 0.5 Ts))
g (angle p1 p2)
r1 (distance p1 p2)
r2 (* 1.37 Ts)
p4 (polar p1 g (- r1 r2))
x2_cad (car p1)
y2_cad (cadr p1)
deltaX (- x2_cad (car CAD))
deltaY (- y_cad (cadr CAD))
x_pd (+ x_PDbase deltaX)
y_pd (+ y_PDbase deltaY)
deltaX_dis (- x2_cad x1_cad)
deltaY_dis (- y3_cad y1_cad)
x1_cad x2_cad
y1_cad y2_cad
)
(setvar "osmode" 0)
(command "circle" p0 20)
(command "leader" p1 p4 "" "" "n")
(command "circle" p2 r2)
(if (= Th 0)
(command "text" "j" "c" p3 Ts 0 TT)
)
(setvar "osmode" 1)
(command "scale" (entlast) "" p3 1)
(setq n (1+ n))
)
;;;-------------------------------------------------------
(defun Txt_tdo (p0 TT x_pd y_pd deltaX_dis deltaY_dis )
(setq
pTT (list (- (car p0) (* 255 SNum)) (- (cadr p0) (* 3.5 SNum)))
pxPD (list (- (car p0) (* 235 SNum)) (cadr pTT))
pyPD (list (- (car p0) (* 175 SNum)) (cadr pTT))
pdeltaX (list (- (car p0) (* 115 SNum)) (cadr pTT))
pdeltaY (list (- (car p0) (* 55 SNum)) (cadr pTT))
)
(if (= Th 0)
(command
"text" "j" "MC" pTT "" "" TT "text" "j" "ML" pxPD "" "" x_pd "text" "j" "ML" pyPD "" "" y_pd
"text" "j" "ML" pdeltaX "" "" deltaX_dis "text" "j" "ML" pdeltaY "" "" deltaY_dis
)
(command
"text" "j" "MC" pTT 0 TT "text" "j" "ML" pxPD 0 x_pd "text" "j" "ML" pyPD 0 y_pd
"text" "j" "ML" pdeltaX 0 deltaX_dis "text" "j" "MC" pdeltaY 0 deltaY_dis
)
);end if
)
;;;-------------------------------------------------------
(defun End_tdo()
(setq
hb (* (* 7 SNum) n)
p1n (polar p10 (* (- 0.5) pi) hb)
p2n (polar p20 (* (- 0.5) pi) hb)
p3n (polar p30 (* (- 0.5) pi) hb)
p4n (polar p40 (* (- 0.5) pi) hb)
p5n (polar p50 (* (- 0.5) pi) hb)
)
(command "line" p00 p0 "" "line" p10 p1n "" "line" p20 p2n "" "line" p30 p3n "" "line" p40 p4n ""
"line" p50 p5n ""
)
)
;;;*************************************************
(Defun C:TD( / oldOs oldTrack OldOrth StyleBN Th p00 p0 p10 p20 p30 p40 p50 p60 p70 n SNum
TT Ts p2 p3 g r1 r2 p4 x1_cad y1_cad x2_cad y2_cad deltaX deltaY x_pd y_pd
pTT pxPD pyPD pdeltaX pdeltaY deltaX_dis deltaY_dis hb p1n p2n p3n p4n p5n p51)
(Begin_tdo)
(While (setq p1 (getpoint "\nChon diem tiep theo - Pick the next point <exit>:"))
(So_tdo)
(Txt_tdo p0 TT x_pd y_pd deltaX deltaY)
(setq
TT (1+ TT)
p0 (list (car p0) (- (cadr p0) (* 7 SNum)))
p51 (polar p0 pi (* 260 SNum))
)
(command "line" p0 p51 "")
)
(End_tdo)
(setvar "orthomode" oldOrth)
(setvar "osmode" oldOs)
(setvar "trackpath" oldTrack)
(princ)
)
;;;*************************************************
-
Dạo này bận quá không có thời gian lên net nữa , hôm nay vô thấy khí thế quá .
Công ty mình thiết kế tàu biển , tài liệu về xích , neo , móc , tời thì vô số luôn nhưng chán cái là họ in ra hết rồi , không có file .xls .
Em cũng xin tham gia CVU , em dân cơ khí , chắc anh còn nhớ hồi viết lisp cái bảng kê cho em :unsure: , em dựa theo đó làm lisp cái bảng kê nữa , flexible hơn chút nhưng cơ bản vẫn là suy nghĩ của anh .
CVU mà có việc gì , anh cứ giao , em sẽ cố gắng làm hết sức mình .
-
1
-
-
Tâm sự về nghề ACAD!
trong Cơ khí
@ hotbac :
Thật sự thì trình độ của bạn hiện nay chưa thể kiếm tiền từ cad được ( chỉ là suy nghĩa cá nhân mình thôi ) . Với lại ít có công ty nào tuyển người vào , đào tạo rồi để họ quay lại trường đại học cả ! Nếu bạn muốn làm thêm bằng cad , mình nghĩ tốt nhất là bạn nên lật sách chuyên ngành của bạn ra , xem kỹ các chi tiết , cụm máy rồi vẽ lại bằng cad , càng nhanh , đẹp , gọn gàng càng tốt . Bạn đang làm thêm cho chính mình , nó giúp bạn nâng cao kỹ năng dùng cad và kiến thức chuyên môn , khi đi làm bạn sẽ thấy kết quả . Một cụm máy bạn tưởng là biết rành rồi , nhưng khi vẽ lại thì có nhiều vấn đề lắm .
Chúc bạn thành công .
Viết Lisp theo yêu cầu
trong AutoLisp
Đã đăng · Trả lời báo cáo
Anh Hoành có thể giúp em cái lisp để vẽ giao tuyến của 2 hình trụ bất kỳ được không . Nhiều lúc em phải ngồi gióng gióng mệt quá . Hay anh nêu hướng giải quyết trước để em cố thử coding , cám ơn anh nhiều .