明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3063|回复: 9

如何根据制定范围画平行线

[复制链接]
发表于 2006-10-30 16:47:00 | 显示全部楼层 |阅读模式

       如:我在屏幕上画一条直线(或者是多段线或弧段或圆),我想在此线的两边平行50米的位置画出两条平行线(如果是圆的话,就是内外50米),应该怎么做?请各位大虾指教,谢谢!!!

发表于 2006-10-30 20:21:00 | 显示全部楼层
可以用offset方法!
发表于 2006-10-30 20:22:00 | 显示全部楼层

比如可参照下面的程式:

(defun c:test ()
  (setq obj  (vlax-ename->vla-object (car (entsel)))
 dis1 50
 dis2 (- 0 dis1)
  )
  (vla-offset obj dis1)
  (if (or (eq (vla-get-objectname obj) "AcDbCircle")
   (eq (vla-get-objectname obj) "AcDbArc")
      )
    (if (> (vla-get-radius obj) dis1)
      (vla-offset obj dis2)
    )
    (vla-offset obj dis2)
  )
)

 楼主| 发表于 2006-10-31 09:53:00 | 显示全部楼层
        rongyifei大哥,您的程序非常好用,谢谢。目前的程序一次只能对一个元素,有没有批量的方法,请再赐教了,谢谢!1
发表于 2006-10-31 19:57:00 | 显示全部楼层
如果有多个对象,则需要构造选择集.
发表于 2006-10-31 21:21:00 | 显示全部楼层

我写的一个,看看怎么样?

(defun c:test ()
  (setq ssets (vla-get-selectionsets
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
 gpcode (vlax-make-safearray vlax-vbInteger '(0 . 5))
 gpvalue (vlax-make-safearray vlax-vbvariant '(0 . 5))
  )
  (vlax-safearray-put-element gpcode 0 -4)
  (vlax-safearray-put-element gpcode 1 0)
  (vlax-safearray-put-element gpcode 2 0)
  (vlax-safearray-put-element gpcode 3 0)
  (vlax-safearray-put-element gpcode 4 0)
  (vlax-safearray-put-element gpcode 5 -4)
  (vlax-safearray-put-element gpvalue 0 "<OR")
  (vlax-safearray-put-element gpvalue 1 "LINE")
  (vlax-safearray-put-element gpvalue 2 "CIRCLE")
  (vlax-safearray-put-element gpvalue 3 "LWPOLYLINE")
  (vlax-safearray-put-element gpvalue 4 "ARC")
  (vlax-safearray-put-element gpvalue 5 "OR>")
  (setq sset (vla-add ssets "sset"))
  (vla-SelectOnScreen sset gpcode gpvalue)
  (vlax-for obj sset
    (progn (vla-offset obj dis1)
    (if (or (eq (vla-get-objectname obj) "AcDbCircle")
     (eq (vla-get-objectname obj) "AcDbArc")
        )
      (if (> (vla-get-radius obj) dis1)
        (vla-offset obj dis2)
      )
      (vla-offset obj dis2)
    )
    )
  )
  (vla-Delete sset)
)

 楼主| 发表于 2006-11-1 09:44:00 | 显示全部楼层

        rongyifei大哥,程序有问题,执行了以后可以选择多个元素,但是选择了元素后敲回车就报错误了:ActiveX服务器返回错误:非选择性的参数。

        难道这个程序要和之前的那个一起用吗?怎么一起用?请指教,谢谢!

发表于 2006-11-1 20:51:00 | 显示全部楼层

忘了对变量dis1,dis2赋值!这下可以了!

(defun c:test ()
  (setq ssets (vla-get-selectionsets
    (vla-get-ActiveDocument (vlax-get-acad-object))
  )
 gpcode (vlax-make-safearray vlax-vbInteger '(0 . 5))
 gpvalue (vlax-make-safearray vlax-vbvariant '(0 . 5))
 dis1 50
 dis2 (- 0 dis1)
  )
  (vlax-safearray-put-element gpcode 0 -4)
  (vlax-safearray-put-element gpcode 1 0)
  (vlax-safearray-put-element gpcode 2 0)
  (vlax-safearray-put-element gpcode 3 0)
  (vlax-safearray-put-element gpcode 4 0)
  (vlax-safearray-put-element gpcode 5 -4)
  (vlax-safearray-put-element gpvalue 0 "<OR")
  (vlax-safearray-put-element gpvalue 1 "LINE")
  (vlax-safearray-put-element gpvalue 2 "CIRCLE")
  (vlax-safearray-put-element gpvalue 3 "LWPOLYLINE")
  (vlax-safearray-put-element gpvalue 4 "ARC")
  (vlax-safearray-put-element gpvalue 5 "OR>")
  (setq sset (vla-add ssets "sset"))
  (vla-SelectOnScreen sset gpcode gpvalue)
  (vlax-for obj sset
    (progn (vla-offset obj dis1)
    (if (or (eq (vla-get-objectname obj) "AcDbCircle")
     (eq (vla-get-objectname obj) "AcDbArc")
        )
      (if (> (vla-get-radius obj) dis1)
        (vla-offset obj dis2)
      )
      (vla-offset obj dis2)
    )
    )
  )
  (vla-Delete sset)
)

发表于 2009-8-29 13:42:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-8-29 14:18:00 | 显示全部楼层
ghost_mooo发表于2006-10-31 9:53:00        rongyifei大哥,您的程序非常好用,谢谢。目前的程序一次只能对一个元素,有没有批量的方法,请再赐教了,谢谢!1

......................

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 12:10 , Processed in 0.189867 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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