CadFrank 发表于 2022-7-6 08:23:05

需要这方面的帮助

各位读者好,
 
嗯,我正在做一个例行工作,我会贴一张照片给你看。
 

 
但我想选择在左边或右边复制这个
 
所以我用函数getkword,if和progn来模拟它。
 
现在,当我选择正确的时候,它不起作用。
 
这是
(defun c:cofp (/ rep pt1 pt2)

(setq pt1 (getpoint "\nClick on the first point ! "))
(setq pt2 (getpoint "\nClick on the second point ! "))

(initget 1 "left right")
(setq rep (getkword "\nChoose the side of the beam "))
   (if (= rep Gauche)
   (progn
   
       (setq pt3 (list (- (car pt2) 20) (cadr pt2)))
       (setq pt4 (list (- (car pt1) 20) (cadr pt1)))
       (setq pt5 (list (- (car pt4) 90) (+ (cadr pt4) 20)))
       (setq pt6 (list (- (car pt4) 90) (cadr pt4)))
       (setq pt7 (list (car pt3) (- (cadr pt3) 38)))
       (setq pt8 (list (car pt3) (- (cadr pt3) 76)))
   
   );progn
   );if

   (if (= rep Droite)
   (progn
   
       (setq pt3 (list (+ (car pt2) 20) (cadr pt2)))
       (setq pt4 (list (+ (car pt1) 20) (cadr pt1)))
       (setq pt5 (list (+ (car pt4) 90) (+ (cadr pt4) 20)))
       (setq pt6 (list (+ (car pt4) 90) (cadr pt4)))
       (setq pt7 (list (car pt3) (- (cadr pt3) 38)))
       (setq pt8 (list (car pt3) (- (cadr pt3) 76)))

   );progn
   );if

(setq os (getvar 'OSMODE))
(setvar 'OSMODE 0)

(command "_insert" "2 x 4" pt6 "" "1" "")
(command "_insert" "2 x 4" pt7 "" "1" "")
(command "_insert" "2 x 4" pt8 "" "1" "")
(command "_rectangle" pt1 pt3)
(command "_rectangle" pt4 pt5)
(command "_rectangle" pt5 pt8)

(setvar 'OSMODE os)

);defun c:
 
就是这样!
 
提前感谢您的帮助!
 
干杯,啤酒。

GP_ 发表于 2022-7-6 08:39:05

尝试
 

(defun c:cofp (/ rep pt1 pt2)
(setq pt1 (getpoint "\nClick on the first point ! "))
(setq pt2 (getpoint "\nClick on the second point ! "))
(initget 1 "L R")
(setq rep (getkword "\nChoose the side of the beam "))
   (if (= rep "L")
   (progn

       (setq pt3 (list (- (car pt2) 20) (cadr pt2)))
       (setq pt4 (list (- (car pt1) 20) (cadr pt1)))
       (setq pt5 (list (- (car pt4) 90) (+ (cadr pt4) 20)))
       (setq pt6 (list (- (car pt4) 90) (cadr pt4)))
       (setq pt7 (list (car pt3) (- (cadr pt3) 38)))
       (setq pt8 (list (car pt3) (- (cadr pt3) 76)))

   );progn
   );if
   (if (= rep "R")
   (progn

       (setq pt3 (list (+ (car pt2) 20) (cadr pt2)))
       (setq pt4 (list (+ (car pt1) 20) (cadr pt1)))
       (setq pt5 (list (+ (car pt4) 90) (+ (cadr pt4) 20)))
       (setq pt6 (list (+ (car pt4) 90) (cadr pt4)))
       (setq pt7 (list (car pt3) (- (cadr pt3) 38)))
       (setq pt8 (list (car pt3) (- (cadr pt3) 76)))
   );progn
   );if

(setq os (getvar 'OSMODE))
(setvar 'OSMODE 0)
(command "_insert" "2 x 4" pt6 "" "1" "")
(command "_insert" "2 x 4" pt7 "" "1" "")
(command "_insert" "2 x 4" pt8 "" "1" "")
(command "_rectangle" pt1 pt3)
(command "_rectangle" pt4 pt5)
(command "_rectangle" pt5 pt8)
(setvar 'OSMODE os)

);defun c:

CadFrank 发表于 2022-7-6 08:51:03

嗨,谢谢你的帮助!我想我忘了“

GP_ 发表于 2022-7-6 08:56:39

这是我的荣幸。

BIGAL 发表于 2022-7-6 09:05:40

一个较短的方法可能是2次点击第一个选择-选择线,你可以得到开始和结束点,然后比较选择点,找出顶部-底部等交换点-第二个选择是所需的方向。
 
代码受版权保护,但只是一个片段
(setq tp1 (entsel "\nSelect left side inner wall near end : "))
(setq tpp1 (entget (car tp1)))
(setq pt1 (cdr (assoc 10 tpp1)))   ;start
(setq pt2 (cdr (assoc 11 tpp1)))   ; end
(setq pt3 (cadr tp1)) ;pick point

Just compare distance pt3-pt1 pt3-pt2 the shorter is your start point.

CadFrank 发表于 2022-7-6 09:20:31

嗨,比格尔,
 
我尝试了你发布的内容,但我不确定当它是pline时是否有效。
 
但是,既然我想确保我的pt1总是在底部,有没有办法做到这一点?
 
干杯啤酒

BIGAL 发表于 2022-7-6 09:30:25

我的draw stud是基于一个完整的包,所以它期望你可能会得到的行仍然可以与普林斯,但代码将变得更大,与其他一些东西只是采取了廉价的方式,如果普林斯然后爆炸并继续。
页: [1]
查看完整版本: 需要这方面的帮助