ynhh 发表于 2023-10-2 22:19:30

lostbalance 发表于 2023-10-2 21:41
你指的是模拟AutoCAD的line命令画直线吗?那可以这样:
1. 在cad中输入:   (command "line")
2. 根据cad ...

谢谢您的热心指点
感觉有时手工操作与编写程序还是有点区别的
还是要慢慢学习摸索
谢谢您

guosheyang 发表于 2023-10-3 09:47:31

ynhh 发表于 2023-10-2 21:34
我看你的示范
和手工画图一样的
这不用什么程序都可以办到的

二、起点 A 带角度 J画指定距离L 的直线,直接用输入角度 <J 的方法      这不就是你需求的吗    也是line命令所具有的功能啊

guosheyang 发表于 2023-10-3 09:52:13

(defun c:lll(/ QD ZD)
(setq qd(getpoint "\n 请点取直线的起点"))
(setq zd(getpoint qd "\n 点取终点或输入坐标值,或输入<加角度值,再输入距离:"))
(entmake (list '(0 . "line") (cons 10 qd) (cons 11 zd) ))
(princ)
)

这就是模拟line命令的代码

tomonkey239 发表于 2023-10-3 10:29:59

guosheyang 发表于 2023-10-2 18:05
是这样模拟line命令吗用get函数写一个就是 get函数本身有这个功能

ynhh 发表于 2023-10-3 12:18:38

guosheyang 发表于 2023-10-3 09:52
(defun c:lll(/ QD ZD)
(setq qd(getpoint "\n 请点取直线的起点"))
(setq zd(getpoint qd "\n 点取 ...

谢谢您的热心指导

guosheyang 发表于 2023-10-3 14:26:07

一、起点 A 以 B 点为方向控制点, 画指定距离L 的直线    这个目标也可借助grread函数变相实现

alexmai 发表于 2023-10-12 13:50:41

在论坛上找的类似命令



;;;动态角度矩形
(defun c:are (/ os pt1 pt2 pt3 pt4 ag0 ag len ent ct in k)
(setq os (getvar "osmode"))
(while (and (setq pt1 (getpoint "\n角点1:"))
            (setq ag0(getangle pt1 "角度:"))
       (progn (princ "对角点:") (setq ct t))
       (progn
(setq ct t k t ent nil)
         (while ct
    (setq in (grread 1))
    (cond
       ((= 5 (car in))
                        (setq pt3 (cadr in))
                        (setq len (distance pt1 pt3) ag(angle pt1 pt3) )
                        (setq pt2 (polar pt1 ag0 (* len (cos (- ag ag0)))))
                        (setq pt4 (polar pt1 (+ (/ pi 2.) ag0) (* len (sin (- ag ag0)))))
          (if ent (command "erase" ent ""))
          (setvar "osmode" 0)
          (command "pline" pt1 pt2 pt3 pt4 "c" )
          (setvar "osmode" os)
          (setq ent (entlast))
                     )
       ((= 3 (car in))
          (setq pt3 (cadr in))
                        (setq len (distance pt1 pt3) ag(angle pt1 pt3) )
                        (setq pt2 (polar pt1 ag0 (* len (cos (- ag ag0)))))
                        (setq pt4 (polar pt1 (+ (/ pi 2.) ag0) (* len (sin (- ag ag0)))))
          (if ent (command "erase" ent ""))
          (setvar "osmode" 0)
          (command "pline" pt1 pt2 pt3 pt4 "c" )
          (setvar "osmode" os)
          (setq ent (entlast))
          (setq ct nil)
       )
       ((equal '(11 0) in)
          (if ent (command "erase" ent ""))
          (setq ct nil k nil)
       )
       (t)
    )
         )
         k
       )
    )
      
)
(setvar "osmode" os)
(princ)
)

页: 1 [2]
查看完整版本: 手工画直线的方法如何写成代码