明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1801|回复: 7

■【求助】求程序一个■

[复制链接]
发表于 2012-2-4 22:41:11 | 显示全部楼层 |阅读模式
本帖最后由 CTC 于 2012-2-8 08:55 编辑

    如上图1,当点1,2点后,命令提示:输入垂直于该线的长度(默认5mm)线长往哪边偏移,最后这些线变成一条多线段。
    如上图2,当点1,2,3,4,5,6点后,命令提示:输入垂直于该线的长度(默认5mm)线长往哪边偏移,最后这些线变成一条多线段。
    如上图3,当点1,2,3,4,5,点后,命令提示:输入垂直于该线的长度(默认5mm)线长往哪边偏移,最后这些线变成一条多线段。
    困于能力问题,特此申请程序一个,希望操作不要太复杂,谢谢大伙了。


发表于 2012-2-5 00:37:50 | 显示全部楼层
试一试,不知道行不行

(defun c:jcc (/ lst pt pt1 pt2 pt4 pt5 r1 r2 r3 s snap)
  (setvar "cmdecho" 0)
  (setq lst '())
  (while (setq pt (getpoint "\n指定端点:"))
    (setq lst (cons pt lst))
  )
  (if (null dbak)
    (setq dbak 5.0)
  )
  (setq pt5 (car lst))
  (setq pt4 (cadr lst))
  (initget "S ")
  (while (progn
           (if (= (setq pt (getpoint pt5 (strcat "\n指定垂直线方向[垂直线长" (rtos dbak 2 2) ",重设(S)]:")))
                  "S"
               )
             (if (setq s (getreal (strcat "\n垂直线长:<" (rtos dbak 2 2) ">")))
               (setq dbak s)
             )
           )
           (not (= (type pt) 'list))
         )
  )
  (setq r1 (angle pt4 pt5))
  (setq r2 (angle pt5 pt))
  (if (or
        (and
          (< (- r2 r1) pi)
          (> (- r2 r1) 0)
        )
        (< (- r2 r1) (- pi))
      )
    (setq lst (cons (polar pt5 (+ (* 0.5 pi) r1) dbak) lst))
    (setq lst (cons (polar pt5 (+ (* 1.5 pi) r1) dbak) lst))
  )
  (setq lst (reverse lst))
  (setq pt1 (car lst))
  (setq pt2 (cadr lst))
  (setq r3 (angle pt1 pt2))
  (if (or
        (and
          (< (- r2 r1) pi)
          (> (- r2 r1) 0)
        )
        (< (- r2 r1) (- pi))
      )
    (setq lst (cons (polar pt1 (+ (* 0.5 pi) r3) dbak) lst))
    (setq lst (cons (polar pt1 (+ (* 1.5 pi) r3) dbak) lst))
  )
  (command ".undo" "be")
  (setq snap (getvar "osmode"))
  (setvar "osmode" 0)
  (command "PLINE")
  (foreach pt lst
    (command pt)
  )
  (command "")
  (setvar "osmode" snap)
  (command ".undo" "e")
  (princ)
)
 楼主| 发表于 2012-2-5 01:10:22 | 显示全部楼层
langjs 发表于 2012-2-5 00:37
试一试,不知道行不行

(defun c:jcc (/ lst pt pt1 pt2 pt4 pt5 r1 r2 r3 s snap)

langjs 你好,谢谢你的程序,用了还行,不知在点端点画直线过程中,端点与端点的线可以像LINE命令那样显示出来呢?我04的在画过程中没有显示出来。
发表于 2012-2-5 08:02:44 | 显示全部楼层
机械行业的剖视符号程序
发表于 2012-2-5 08:34:37 | 显示全部楼层
原来是剖视符号啊,可是不大像啊,剖视符号要断开的。晕死,作为机械设计人员居然看不出来感到汗颜!我还为是钣金屏柜折弯一类的程序呢!
发表于 2012-2-5 09:36:03 | 显示全部楼层
试试这个行不行
(defun c:cc ( / ent lst pt pt1 pt2 pt4 pt5 r1 r2 r3 s snap)
  (setvar "cmdecho" 0)
  (setq lst '())
  (princ "\n指定起点:")
  (command "pline")
  (while (= 1 (getvar "cmdactive"))
    (command pause)
    (setq pt (getvar "lastpoint"))
    (princ "\n指定下一点")
    (setq lst (cons pt lst))
  )
  (setq ent (entlast))
  (if (null dbak)
    (setq dbak 5.0)
  )
  (setq lst (cdr lst))
  (if (>= (length lst) 2)
    (progn
      (setq pt5 (car lst))
      (setq pt4 (cadr lst))
      (initget "S ")
      (while (progn
               (if (= (setq pt (getpoint pt5 (strcat "\n指定垂直线方向[垂直线长" (rtos dbak 2 2) ",重设(S)]:")))
                      "S"
                   )
                 (if (setq s (getreal (strcat "\n垂直线长:<" (rtos dbak 2 2) ">")))
                   (setq dbak s)
                 )
               )
               (not (= (type pt) 'list))
             )
      )
      (entdel ent)
      (setq r1 (angle pt4 pt5))
      (setq r2 (angle pt5 pt))
      (if (or
            (and
              (< (- r2 r1) pi)
              (> (- r2 r1) 0)
            )
            (< (- r2 r1) (- pi))
          )
        (setq lst (cons (polar pt5 (+ (* 0.5 pi) r1) dbak) lst))
        (setq lst (cons (polar pt5 (+ (* 1.5 pi) r1) dbak) lst))
      )
      (setq lst (reverse lst))
      (setq pt1 (car lst))
      (setq pt2 (cadr lst))
      (setq r3 (angle pt1 pt2))
      (if (or
            (and
              (< (- r2 r1) pi)
              (> (- r2 r1) 0)
            )
            (< (- r2 r1) (- pi))
          )
        (setq lst (cons (polar pt1 (+ (* 0.5 pi) r3) dbak) lst))
        (setq lst (cons (polar pt1 (+ (* 1.5 pi) r3) dbak) lst))
      )
      (command ".undo" "be")
      (setq snap (getvar "osmode"))
      (setvar "osmode" 0)
      (command "PLINE")
      (foreach pt lst
        (command pt)
      )
      (command "")
      (setvar "osmode" snap)
      (command ".undo" "e")
    )
  )
  (princ)
)
 楼主| 发表于 2012-2-5 10:31:04 | 显示全部楼层
langjs 发表于 2012-2-5 09:36
试试这个行不行
(defun c:cc ( / ent lst pt pt1 pt2 pt4 pt5 r1 r2 r3 s snap)
  (setvar "cmdecho" 0)
...

谢谢langjs的程序,可以了。。。
发表于 2012-2-6 01:27:37 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-9 04:15 , Processed in 0.201375 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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