明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1175|回复: 6

[提问] 拉取一个矩形框线并偏移一定距离生成视口如何实现

[复制链接]
发表于 2019-11-2 22:31 | 显示全部楼层 |阅读模式
平时画图在布局会拉取视口框 为了美观 就会在外框处偏移20 画视口 想用个插件解决重复性质的工作




想要达到的想过如图所示 希望有哪位大神出手帮忙 实现这个效果 谢谢~

本帖子中包含更多资源

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

x
发表于 2019-11-3 19:15 | 显示全部楼层
(defun c:tt5 ()
        (setvar "LTSCALE" 30)
        (setq p1 (getpoint"\n点1:") p2 (getcorner p1"\n点2:"))
        (command "RECTANG" "non" p1 "non" p2)
        (setq rc1 (entlast) dis (if (setq dis (getdist"\n偏移距离<20>:")) dis 20))
        (command "OFFSET" dis rc1 "non" (mid_pt p1 p2) "" "CHANGE" (entlast) "" "p" "c" 4 "p" "lt" "center" "" "pedit" (entlast) "w" 0.5 "" "MVIEW" "o" (entlast) "ERASE" rc1 "")
        (princ)
)
(defun mid_pt (a b) ;中点函数
        (mapcar
                '(lambda (a b) (/ (+ a b) 2))
                a
                b
        )
)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-11-3 15:09 | 显示全部楼层
lisperado 发表于 2019-11-3 12:34
尝试偏移值思路,但视匡口好像有bug? 创建成功却无法打开进入!星期天出街了,没时间调试!

谢谢您的帮助   但是测试发现有些问题 看您方便帮助调整下
1. 输入的偏移值是得到结果的四分之一(如输入偏移值为20 实际偏移距离为5)
2. 最初框定范围的矩形框仍然存在 可否去掉
3.正如您所说 生成了视口 但是如法进入

如果不能生成视口 按照我图中所示 生成那种样式(颜色 线宽  线型  及比例  图层 )的矩形框也可

谢谢~
回复 支持 0 反对 1

使用道具 举报

发表于 2019-11-3 12:34 | 显示全部楼层
本帖最后由 lisperado 于 2019-11-5 01:26 编辑

  1. (or *acad* (setq *acad* (vlax-get-acad-object)))
  2.   (defun *space (doc)
  3.     (foreach x '(ActiveDocument ActiveLayout Block) (setq doc (vlax-get doc x)))
  4.     )


  5. (defun c:tt ( / p1 p2 WH n ob vp)
  6.   (setvar 'tilemode 0)
  7.   (if (and (setq p1 (getpoint "\n左下角 "))
  8.       
  9.            (setq p2 (getcorner p1 "\n右上角 "))
  10.            (progn (initget 6) (setq n (cond ((getdist "\n偏移值 <20> : ")) (20))))
  11. ;;;           (vl-cmdf "_RECTANG" p1 p2)
  12.            (setq WH (mapcar ''((x) (- (abs x) (* 2.0 n)) )(mapcar '- p2 p1 '(0. 0.))))
  13.            (vl-every '(lambda (x) (> x 0.0)) WH)
  14.            (setq vp (vl-catch-all-apply 'vla-AddPViewport
  15.                   (vl-list* (*space *acad*) (vlax-3d-point (mapcar ''((a b) (* (+ a b) 0.5)) p1 p2)) WH)
  16.                   )
  17.                  )
  18.            (= (type vp) 'VLA-OBJECT )
  19.            )
  20.     (progn
  21.     (vla-put-viewporton vp 1)(vla-display vp 1)
  22.     (mapcar ''((a b) (vl-catch-all-apply 'vlax-put (list vp a b)))
  23.         '(Layer color LineWeight LineType LinetypeScale)
  24.         '("VPORT" 4 30 "CENTER" 0.03) ;;;参数:图层 颜色 线宽 线型 比例  
  25.         )
  26.     )
  27.     (princ "\n执行无效!")
  28.     )
  29.   (princ)
  30.   )


试偏移值思路,但视匡口好像有bug?

 楼主| 发表于 2019-11-3 21:19 | 显示全部楼层
start4444 发表于 2019-11-3 19:15
(defun c:tt5 ()
        (setvar "LTSCALE" 30)
        (setq p1 (getpoint"\n点1:") p2 (getcorner p1"\n点2:"))

谢谢您 就是这个效果
发表于 2019-11-5 00:48 | 显示全部楼层
本帖最后由 lisperado 于 2019-11-5 01:12 编辑
暮雨晨曦 发表于 2019-11-3 15:09
谢谢您的帮助   但是测试发现有些问题 看您方便帮助调整下
1. 输入的偏移值是得到结果的四分之一(如输 ...

提问1. 输入的偏移值是得到结果的四分之一(如输入偏移值为20 实际偏移距离为5)
回复: (setq WH (mapcar '(lambda (x) (- (abs x) (* 0.5 n))) (mapcar '- p2 p1 '(0. 0.))))
举例如果宽度=200,偏移值20也就是说 200-(20x2) = (- 200 (* 2.0 n) )
发源码的目的是让你调试后如果有误可以自行修改0.5为2.0
注意:如果偏移默认值大过视口如何处理?

提问2. 最初框定范围的矩形框仍然存在 可否去掉
回复: 很简单删除这一段 (vl-cmdf "_RECTANG" p1 p2)

提问3.正如您所说 生成了视口 但是如法进入
回复: 可以利用vlax-dump-object查看视口设定/参数viewporton值原来是=0 :vlax-false
vla-put-viewporton打开改视口设定为= 1

至于颜色 线宽  线型  比例  图层等等可用vla-put-属性  自行修改
检查属性参数如下
Command: (vlax-dump-object (vlax-ename->vla-object (car(entsel))) t)
视口的参数如下
Select object: ; IAcadPViewport: IAcadPViewport Interface
; Property values:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 0000000140142308>
;   ArcSmoothness = 1000
;   Center = (128.5 97.5 0.0)
;   Clipped (RO) = 0
;   CustomScale = 16.9044
;   Direction = (0.0 0.0 1.0)
;   DisplayLocked = 0
;   Document (RO) = #<VLA-OBJECT IAcadDocument 000000002c268398>
;   EntityTransparency = "ByLayer"
;   GridOn = -1
;   Handle (RO) = "1D1"
;   HasExtensionDictionary (RO) = -1
;   HasSheetView (RO) = 0
;   Height = 156.0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 000000002c162a18>
;   LabelBlockId = 0
;   LabelBlockId32 = 0
;   Layer = "0"
;   LayerPropertyOverrides (RO) = 0
;   LensLength = 50.0
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   ModelView = nil
;   ObjectID (RO) = 49
;   ObjectID32 (RO) = 49
;   ObjectName (RO) = "AcDbViewport"
;   OwnerID (RO) = 48
;   OwnerID32 (RO) = 48
;   PlotStyleName = "ByLayer"
;   ShadePlot = 0
;   SheetView = nil
;   SnapBasePoint = (0.0 0.0)
;   SnapOn = 0
;   SnapRotationAngle = 0.0
;   StandardScale = 1
;   StandardScale2 = 1
;   Target = (0.0 0.0 0.0)
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 000000002c1625f0>
;   TwistAngle = 0.0
;   UCSIconAtOrigin = -1
;   UCSIconOn = -1
;   UCSPerViewport = -1
;   ViewportOn = -1
;   Visible = -1
;   VisualStyle = 1
;   Width = 205.6

太忙只有睡前随笔修改请看二楼
自行调试修改吧
 楼主| 发表于 2019-11-5 17:38 | 显示全部楼层
lisperado 发表于 2019-11-5 00:48
提问1. 输入的偏移值是得到结果的四分之一(如输入偏移值为20 实际偏移距离为5)
回复: (s ...

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

本版积分规则

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

GMT+8, 2024-5-2 08:07 , Processed in 0.435305 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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