明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1828|回复: 11

直线,长度可以按某长度倍数输入

[复制链接]
发表于 2023-9-23 19:17:39 | 显示全部楼层 |阅读模式
本帖最后由 hubeiwdlue 于 2023-9-24 13:35 编辑

日常绘图的时候,时常有一个困扰,就是一个图纸上,有几个不同比例尺的图,有的绘图比例是1:1000,有的是1:500等,这个时候,总要按计算器来确定绘制直线的长度。本来想在论坛上找一个代替line的命令,可以直接在输入长度时候输入算式,或者有几倍长度的选项,但是没有找到。自己刚开始学,也没能力做出来。就写了一个弱化版的line,凑合用,可以在上下左右四个方向生成直线,长度有两个输入项,长度和倍数。输入第二个点时候,如果直接按空格,则进入倍数模式。

我不清楚这个功能的插件是难还是简单,如果有大神做出来,那就不胜感激了。
  1. ;;生成直线
  2. (defun entmakeline (p1 p2)
  3.   (entmakex (list '(0 . "line") (cons 10 p1) (cons 11 p2)))
  4. )

  5. ;;8等分象限函数
  6. ;;p0 定点  p1 位置落在不同象限,返回 11 12 21 22 31 32 41 41,靠近x轴后缀是1,y轴后缀是2
  7. (defun sl-8p (p0 p1 / ang xx) ;;象限
  8.   (setq ang (angle p0 p1))
  9.   (cond
  10.     ((and (<= ang (* 0.25 pi)) (> ang 0)) (setq xx 11))
  11.     ((and (<= ang (* 0.5 pi)) (> ang (* 0.25 pi))) (setq xx 12))
  12.     ((and (<= ang (* 0.75 pi)) (> ang (* 0.5 pi))) (setq xx 22))
  13.     ((and (<= ang (* 1 pi)) (> ang (* 0.75 pi))) (setq xx 21))
  14.     ((and (<= ang (* 1.25 pi)) (> ang (* 1 pi))) (setq xx 31))
  15.     ((and (<= ang (* 1.5 pi)) (> ang (* 1.25 pi))) (setq xx 32))
  16.     ((and (<= ang (* 1.75 pi)) (> ang (* 1.5 pi))) (setq xx 42))
  17.     ((and (<= ang (* 2 pi)) (> ang (* 1.75 pi))) (setq xx 41))
  18.   )
  19.   xx
  20. )

  21. ;;主函数
  22. (defun c:ll(/ p1 p2 p3 p4 bb dis n1 xx)
  23.   (setq p1 (getpoint "\n第一个点"))
  24.   (setq p2 (getpoint p1 "\n第二个点"))
  25.   (if (/= p2 nil)
  26.     (entmakeline (trans p1 1 0) (trans p2 1 0))
  27.     (progn
  28.       (setq bb (grread t 8 0) p3 (cadr bb))
  29.       (setq dis (getdist p1 "\n输入距离"))
  30.       (setq n1 (getreal "\n输入倍数"))
  31.       (setq xx (sl-8p p1 p3))
  32.       (cond
  33.         ((or (= xx 11) (= xx 41)) (setq ang 0))
  34.         ((or (= xx 12) (= xx 22)) (setq ang (* 0.5 pi)))
  35.         ((or (= xx 21) (= xx 31)) (setq ang pi))
  36.         ((or (= xx 32) (= xx 42)) (setq ang (* 1.5 pi)))
  37.       )
  38.     (setq p4 (polar p1 ang (* dis n1)))
  39.     (entmakeline (trans p1 1 0) (trans p4 1 0))
  40.     )
  41.   )
  42.   (princ)
  43. )


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-9-24 00:33:32 | 显示全部楼层
本帖最后由 kucha007 于 2023-9-24 11:11 编辑

试试这个:
建议还是1:1制图,大不了编块放大或者用布局。要不然比例丢失绘制对不上会很麻烦


  1. (defun c:TT (/ DOC Old_CMD TmpVar P1 P2 Flag StaPT EndPT)
  2.   (setq DOC (vla-get-ActiveDOCument (vlax-get-acad-object)))
  3.   (defun *error*(msg)
  4.     (setvar "cmdecho" Old_CMD)
  5.     (vla-endundomark DOC)
  6.   )
  7.   (vla-startundomark Doc) ;记录编组
  8.     (setq Old_CMD (getvar "cmdecho"))(setvar "cmdecho" 0) ;关闭回显
  9.     (if (not Global:SCSVar)(setq Global:SCSVar 1.0));设置首次为1
  10.     (while
  11.       (progn
  12.         (initget 2 "R S");非零
  13.         (setq TmpVar (getpoint (strcat "\n→请输入起点或:[参照(R)/比例(S)_" (rtos Global:SCSVar 2 2)"]")))
  14.         (cond
  15.           ((and (eq (type TmpVar) 'STR)(eq (strcase TmpVar) "R"))
  16.             (if (setq P1 (getpoint "\n→请指定第一点:")
  17.                       P2 (getpoint P1 "\n→请指定第二点:")
  18.                 )
  19.                 (setq Global:SCSVar (/ (getdist P1 "\n→请输入或量取新的长度:") (distance P1 P2)))
  20.             )
  21.             T ;继续循环
  22.           )
  23.           ((and (eq (type TmpVar) 'STR)(eq (strcase TmpVar) "S"))
  24.               (initget (+ 2 4));非零非负
  25.               (setq Global:SCSVar
  26.                   (cond
  27.                     ((getreal (strcat "\n→请输入缩放的值:<" (rtos Global:SCSVar 2 2) ">: ")))
  28.                     (Global:SCSVar)
  29.                   )
  30.               )
  31.               T ;继续循环
  32.           )
  33.           ((and TmpVar (eq (type TmpVar) 'LIST))
  34.               (setq StaPT TmpVar
  35.                     Flag T ;循环标志
  36.               )
  37.               (while Flag
  38.                 (if (setq EndPT (getpoint StaPT "\n→请输入下一个点:"))
  39.                     (progn
  40.                       (setq EndPT (polar StaPT (angle StaPT EndPT) (* Global:SCSVar (distance StaPT EndPT))));放大后的点
  41.                       (command "_Line" StaPT EndPT "")
  42.                       (setq StaPT EndPT)
  43.                     )
  44.                     (progn
  45.                       (setq Flag Nil);退出循环
  46.                       (princ "\n——★★★ 未输入下一点, 程序退出!★★★——")
  47.                     )   
  48.                 )
  49.               )
  50.               nil ;退出循环
  51.           )
  52.           (T
  53.               (princ "\n——★★★ 请输入起点或者关键词!★★★——")
  54.               nil ;退出循环
  55.           )
  56.         )
  57.       )  
  58.     )
  59.     (setvar "cmdecho" Old_CMD)
  60.   (vla-endundomark Doc) ;结束编组
  61.   (princ)
  62. )

评分

参与人数 1明经币 +1 收起 理由
hubeiwdlue + 1 赞一个!

查看全部评分

发表于 2023-9-24 18:46:20 | 显示全部楼层
本帖最后由 e2002 于 2023-9-24 18:49 编辑

可以在需要时,输入计算式:
1. 用 'cal 计算
2. 用AutoCAD自带的计算器
3. 用lisp语句,例如 (* 3400 150)

但无论如何,这种不按实际尺寸绘图,而是沿用手工绘图旧有习惯的方法,完全是自我找虐,是嫌自己还不够累,996还不够吧...
对于各种能高级的解决绘图与(出图)比例两者之间关系问题的功能,如 Annotative Scale, Layout, Viewport 你们这个单位是没一个人会用的,而且也不愿意学。
 楼主| 发表于 2023-9-24 07:59:39 | 显示全部楼层
kucha007 发表于 2023-9-24 00:33
试试这个:
建议还是1:1制图,大不了编块放大或者用布局。要不然比例丢失绘制对不上会很麻烦

谢谢kucha007大神,仰望大神久矣,且屡受恩惠,能得到大神帮助,感激万分。因为周围同事,外院同行绘图比尺大都比较随意,在读图,修改,校核过程中,确有这个需求。再次谢谢大神的帮助。
发表于 2023-9-23 20:28:37 | 显示全部楼层
做个沙发,不懂是啥!
发表于 2023-9-23 20:49:22 | 显示全部楼层
绘图不是1:1画的么?
 楼主| 发表于 2023-9-23 20:54:43 来自手机 | 显示全部楼层
bai2000 发表于 2023-9-23 20:49
绘图不是1:1画的么?

画配筋图的时候,平面图可能是1:100,剖面图是1:50或25,大样图可能是1:10。都在一张图里面,就需要用到不同的绘图比例,特别是修改的时候。
 楼主| 发表于 2023-9-23 21:01:22 来自手机 | 显示全部楼层
咏郡 发表于 2023-9-23 20:28
做个沙发,不懂是啥!

就是画直线的时候,当我输入1我希望它绘制出来是1*n,或者可以直接输入算式,或者是他类似可以1*n的方法。
发表于 2023-9-23 21:20:48 | 显示全部楼层
本帖最后由 天命 于 2023-9-23 21:22 编辑

画图都是1:1的画,出图是按比例出图的,没用过布局吧
发表于 2023-9-24 09:51:09 | 显示全部楼层
是不是有点复杂?先按1:1绘制,然后用放大命令按比例缩放不可以吗?这样线条,圆弧啥的都一把搞定多方便。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 09:57 , Processed in 0.165784 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表