明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: mandala

急!!!请教:如何画可带圆弧的双线?(已解决,感谢LONGFIN先生!)

  [复制链接]
发表于 2010-12-12 07:12:07 | 显示全部楼层
来看看,学习学习。
有时在哪个地方该使用. 或者_ 掌握的不好。
谢谢
 楼主| 发表于 2010-12-12 09:54:30 | 显示全部楼层
本帖最后由 mandala 于 2010-12-12 13:27 编辑

不过我的问题还没有解决。以下是我试图用先作平行线,再修改第二条线的线型的方式来画可带圆弧的双线,但达不到我的要求:

(DEFUN C:test()

;指定层和线型:
(command "layer" "m" "wall" "")(command "linetype" "s" "wq2012" "")

;输入宽度:
(setq th (getreal "输入墙厚度:(默认为0.5):"))

;先画一条边线
(command "pline" )

;判断是否还处于pline中:
(while (= (getvar "CMDACTIVE") 1) (command pause))

;作平行线:
(setq a (vlax-ename->vla-object (entlast)))
(if (= nil th) (vla-offset a -0.5) (vla-offset a (- th)))


;更改第二条线的线型:
(setq b (entlast))
(command "chprop" b "" "lt" "continuous" "")

)

现在问题还有两个:第一是,我希望第一条线,就是用pline做的那条线是打散的,不知道做好了平行线之后,该如何回头去选择这条线;第二个问题是我如何封闭这两条平行线的头和尾呢?是否要调用lastpoint和lastangle这两个参数,但不知道如何去弄。请大家帮帮忙。

本帖子中包含更多资源

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

x
发表于 2010-12-12 10:55:51 | 显示全部楼层
带圆弧的双线,不就是带弯头的管子吗。
游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0

本帖子中包含更多资源

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

x
发表于 2010-12-12 12:03:08 | 显示全部楼层
本帖最后由 Student 于 2010-12-12 12:03 编辑

“程序如果只为英语写,可以只写PLINE。如果要在其它语系中使用,就要加点。
而命令的原型是要加下画线的,这样在别人取消这个命令时还能使用这个命令。”
似乎恰好说反了
 楼主| 发表于 2010-12-12 13:14:34 | 显示全部楼层
本帖最后由 mandala 于 2010-12-12 13:41 编辑
ZZXXQQ 发表于 2010-12-12 10:55
带圆弧的双线,不就是带弯头的管子吗。


不是的,那个程序对我没什么用处。

我的情况是测绘制图,画围墙时需要用双线,两条线的线型不同。要求是一路画过去,可以自由选择下一步是用直线还是圆弧。最后头尾要封闭,然后最好将第一条线打散,因为有时候那个方块的型会露到线外边去。基本情况如下,你们能看见图吗:




本帖子中包含更多资源

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

x
 楼主| 发表于 2010-12-12 13:15:26 | 显示全部楼层
Student 发表于 2010-12-12 12:03
“程序如果只为英语写,可以只写PLINE。如果要在其它语系中使用,就要加点。
而命令的原型是要加下画线的, ...

俺被你们搞糊涂鸟。
 楼主| 发表于 2010-12-12 16:59:00 | 显示全部楼层
本帖最后由 mandala 于 2010-12-12 21:30 编辑

下午我似乎解决了如何打散第一条线的问题,只要在画好第一条pline线之后(setq b (entlast)),然后在程序最后加上(command "explode" b  )就可以了。但如何封闭两条线的头尾,还是缺乏方向。

要感谢longfin先生,我参考了他以前在论坛上的一个回帖。

但新问题又出现:当线相交时,会出现相交处断掉的现象,应该是val-offset 的问题,如下图:






本帖子中包含更多资源

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

x
 楼主| 发表于 2010-12-12 21:24:54 | 显示全部楼层
敬请高手解惑……
发表于 2010-12-12 22:09:16 | 显示全部楼层
mandala 发表于 2010-12-12 13:15
俺被你们搞糊涂鸟。

Student 说的没错,ZZXXQQ版主的反了
发表于 2010-12-12 23:06:50 | 显示全部楼层
本帖最后由 LONGFIN 于 2010-12-12 23:14 编辑

;;试试是否可用
(defun c:TT (/ TH P E1 OP E2)
  (or (setq TH (getdist "输入墙厚度 <0.5>: "))
      (setq TH 0.5)
  )
  (if (setq P (getpoint "\n指定起点: "))
    (progn
      (setvar 'CMDECHO 1)
      (command "_.PLINE" P)
      (while (= (getvar 'CMDACTIVE) 1) (command "\\"))
      (setq E1 (entlast))
      (if (setq OP (getpoint "\n偏移方向:" ))
        (command "_.OFFSET" TH (list E1 (vlax-curve-getClosestPointTo E1 OP)) OP "")
      )
      (setq E2 (entlast))
      (if (eq E2 (entnext E1));;判断是否只生成一个对象
        (progn
          (command "_.LINE" "_NON" (vlax-curve-getStartPoint E1) "_NON"  (vlax-curve-getStartPoint E2) "")
          (command "_.LINE"  "_NON" (vlax-curve-getEndPoint E1)  "_NON" (vlax-curve-getEndPoint E2) "")
          (command "_.EXPLODE"  E1)
        )
        (progn
          (princ "绘制失败。无法偏移对象或产生的对象超过一个。")
          (setq E2 E1)
          ;;至于你要得到程序结束后所产生的对象,则参考如下的 entnext 用法
          (while (setq E1 (entnext E1))
            (entdel E1)
          )
          (entdel E2)
        )
      )
    )
  )
  (princ)
)
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-12 23:23 , Processed in 0.203140 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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